Zpracování typů obsahu v Azure Logic Apps
Platí pro: Azure Logic Apps (Consumption + Standard)
Aplikace logiky můžou procházet různé typy obsahu, například JSON, XML, ploché soubory a binární data. I když Logic Apps podporuje všechny typy obsahu, některé mají nativní podporu a nevyžadují přetypování ani převod v aplikacích logiky. Jiné typy mohou podle potřeby vyžadovat přetypování nebo převod. Tento článek popisuje, jak Logic Apps zpracovává typy obsahu a jak je můžete v případě potřeby správně přetypovat nebo převést.
Při určování vhodného způsobu zpracování typů obsahu služba Logic Apps spoléhá na Content-Type
hodnotu hlavičky ve voláních HTTP, například:
- application/json (nativní typ)
- text/plain (nativní typ)
- application/xml and application/octet-stream
- Další typy obsahu
application/json
Logic Apps ukládá a zpracovává všechny požadavky s typem obsahu application/json jako objektem JSON (JavaScript Notation).
Ve výchozím nastavení můžete parsovat obsah JSON bez přetypování.
K parsování požadavku, který má hlavičku s typem obsahu "application/json", můžete použít výraz. Tento příklad vrátí hodnotu dog
z animal-type
pole bez přetypování:
@body('myAction')['animal-type'][0]
{
"client": {
"name": "Fido",
"animal-type": [ "dog", "cat", "rabbit", "snake" ]
}
}
Pokud pracujete s daty JSON, která nezadávají hlavičku, můžete tato data ručně přetypovat do formátu JSON pomocí funkce json(), například:
@json(triggerBody())['animal-type']
Vytváření tokenů pro vlastnosti JSON
Logic Apps nabízí možnost generovat uživatelsky přívětivé tokeny, které představují vlastnosti v obsahu JSON, abyste na tyto vlastnosti mohli snadněji odkazovat a používat je v pracovním postupu aplikace logiky.
Aktivační událost žádosti
Když tento trigger použijete v Designer aplikace logiky, můžete zadat schéma JSON, které popisuje datovou část, kterou očekáváte. Návrhář parsuje obsah JSON pomocí tohoto schématu a vygeneruje uživatelsky přívětivé tokeny, které představují vlastnosti v obsahu JSON. Na tyto vlastnosti pak můžete snadno odkazovat a používat je v rámci pracovního postupu aplikace logiky.
Pokud schéma nemáte, můžete ho vygenerovat.
V triggeru požadavku vyberte Použít ukázkovou datovou část ke generování schématu.
V části Zadejte nebo vložte ukázkovou datovou část JSON zadejte ukázkovou datovou část a pak zvolte Hotovo. Příklad:
Vygenerované schéma se teď zobrazí v triggeru.
Tady je základní definice triggeru požadavku v editoru zobrazení kódu:
"triggers": { "manual": { "type": "Request", "kind": "Http", "inputs": { "schema": { "type": "object", "properties": { "client": { "type": "object", "properties": { "animal-type": { "type": "array", "items": { "type": "string" }, }, "name": { "type": "string" } } } } } } } }
V požadavku HTTP, který vaše klientská aplikace odesílá do Azure Logic Apps, se ujistěte, že jste zahrnuli hlavičku s názvem Content-Type a nastavili hodnotu hlavičky na application/json.
Akce Parsovat JSON
Když tuto akci použijete v Designer aplikace logiky, můžete parsovat výstup JSON a vygenerovat uživatelsky přívětivé tokeny, které představují vlastnosti v obsahu JSON. Na tyto vlastnosti pak můžete snadno odkazovat a používat je v rámci pracovního postupu aplikace logiky. Podobně jako u triggeru Požadavku můžete zadat nebo vygenerovat schéma JSON, které popisuje obsah JSON, který chcete analyzovat. Můžete tak snadněji využívat data z Azure Service Bus, Azure Cosmos DB atd.
text/prostý text
Když aplikace logiky obdrží zprávy HTTP, které mají hlavičku nastavenou Content-Type
na text/plain
, aplikace logiky tyto zprávy uloží v nezpracované podobě.
Pokud tyto zprávy zahrnete do následných akcí bez přetypování, požadavky budou chodit s hlavičkou nastavenou Content-Type
na text/plain
.
Například při práci s plochým souborem můžete získat požadavek HTTP s hlavičkou Content-Type
nastavenou na text/plain
typ obsahu:
Date,Name,Address
Oct-1,Frank,123 Ave
Pokud pak tento požadavek odešlete v pozdější akci jako text jiného požadavku, například , @body('flatfile')
má tento druhý požadavek také hlavičku Content-Type
, která je nastavená na text/plain
. Pokud pracujete s daty, která jsou ve formátu prostého textu, ale nezadali jste záhlaví, můžete tato data ručně přetypovat na text pomocí funkce string(), jako je například tento výraz:
@string(triggerBody())
application/xml and application/octet-stream
Služba Logic Apps v přijatém požadavku nebo odpovědi HTTP vždy zachovává Content-Type
hodnotu .
Pokud tedy vaše aplikace logiky obdrží obsah s nastaveným Content-Type
na application/octet-stream
a tento obsah zahrnete do pozdější akce bez přetypování, je odchozí požadavek také Content-Type
nastavený na application/octet-stream
hodnotu .
Služba Logic Apps tak může zaručit, že se při procházení pracovního postupu neztratí data.
Stav akce neboli vstupy a výstupy jsou však uloženy v objektu JSON, zatímco stav prochází pracovním postupem.
Funkce převaděče
Aby se zachovaly některé datové typy, převede Logic Apps obsah na binární řetězec s kódováním Base64 s příslušnými metadaty, která zachová datovou část i $content
$content-type
objekt , který se převede automaticky.
Tento seznam popisuje, jak Logic Apps převádí obsah při použití těchto funkcí:
-
json()
: Přetypuje data naapplication/json
-
xml()
: Přetypuje data naapplication/xml
-
binary()
: Přetypuje data naapplication/octet-stream
-
string()
: Přetypuje data natext/plain
-
base64()
: Převede obsah na řetězec kódovaný jako base64. -
base64toString()
: Převede řetězec kódovaný jako base64 natext/plain
-
base64toBinary()
: Převede řetězec kódovaný jako base64 naapplication/octet-stream
-
dataUri()
: Převede řetězec na identifikátor URI dat. -
dataUriToBinary()
: Převede identifikátor URI dat na binární řetězec. -
dataUriToString()
: Převede identifikátor URI dat na řetězec.
Pokud například obdržíte požadavek Content-Type
HTTP nastavený na application/xml
, například tento obsah:
<?xml version="1.0" encoding="UTF-8" ?>
<CustomerName>Frank</CustomerName>
Tento obsah můžete přetypovat pomocí výrazu @xml(triggerBody())
s funkcemi xml()
a triggerBody()
a pak ho použít později. Nebo můžete použít @xpath(xml(triggerBody()), '/CustomerName')
výraz s funkcemi xpath()
a xml()
.
Další typy obsahu
Logic Apps funguje s jinými typy obsahu a podporuje je, ale může vyžadovat ruční načtení textu zprávy dekódováním $content
proměnné.
Předpokládejme například, že se vaše aplikace logiky aktivuje požadavkem s typem application/x-www-url-formencoded
obsahu.
Aby se zachovala všechna data, $content
má proměnná v textu požadavku datovou část, která je zakódovaná jako řetězec base64:
CustomerName=Frank&Address=123+Avenue
Vzhledem k tomu, že požadavek není prostý text ani JSON, uloží se v akci následujícím způsobem:
"body": {
"$content-type": "application/x-www-url-formencoded",
"$content": "AAB1241BACDFA=="
}
Logic Apps poskytuje nativní funkce pro zpracování dat formulářů, například:
Nebo můžete k datům přistupovat ručně pomocí výrazu, jako je tento příklad:
@string(body('formdataAction'))
Pokud chcete, aby odchozí požadavek měl stejnou application/x-www-url-formencoded
hlavičku typu obsahu, můžete požadavek přidat do textu akce bez jakéhokoli přetypování pomocí výrazu, jako @body('formdataAction')
je .
Tato metoda však funguje pouze v případě, že je tělo jediným parametrem body
ve vstupu. Pokud se pokusíte použít @body('formdataAction')
výraz v application/json
požadavku, dojde k chybě za běhu, protože tělo je zakódované.