Zpracování typů obsahu v Azure Logic Apps
Platí pro: Azure Logic Apps (Consumption + Standard)
Různé typy obsahu můžou protékat aplikací logiky, například JSON, XML, ploché soubory a binární data. Zatímco 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 tyto typy v případě potřeby správně přetypovat nebo převést.
Aby bylo možné určit vhodný způsob zpracování typů obsahu, služba Logic Apps spoléhá na hodnotu hlavičky Content-Type
ve voláních HTTP, například:
- application/json (nativní typ)
- text/plain (nativní typ)
- application/xml a 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 Object Notation).
Ve výchozím nastavení můžete parsovat obsah JSON bez jakéhokoli přetypování.
K analýze 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')['client']['animal-type'][0]
{
"client": {
"name": "Fido",
"animal-type": [ "dog", "cat", "rabbit", "snake" ]
}
}
Pokud pracujete s daty JSON, která nezadávají záhlaví, můžete tato data ručně přetypovat do formátu JSON pomocí funkce json(), například:
@json(triggerBody())['client']['animal-type']
Vytváření tokenů pro vlastnosti JSON
Logic Apps poskytuje možnost generovat uživatelsky přívětivé tokeny, které představují vlastnosti v obsahu JSON, abyste mohli odkazovat na tyto vlastnosti a snadněji je používat v pracovním postupu aplikace logiky.
Trigger požadavku
Když tento trigger použijete v Návrháři aplikace logiky, můžete zadat schéma JSON, které popisuje datovou část, kterou očekáváte. Návrhář analyzuje obsah JSON pomocí tohoto schématu a generuje uživatelsky přívětivé tokeny, které představují vlastnosti v obsahu JSON. Tyto vlastnosti pak můžete snadno odkazovat a používat v rámci pracovního postupu aplikace logiky.
Pokud schéma nemáte, můžete schéma vygenerovat.
V triggeru požadavku vyberte Použít ukázkovou datovou část k vygenerování schématu.
V části Enter 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í ve vaší aktivační události.
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 zahrnete hlavičku s názvem Content-Type, a nastavte hodnotu hlavičky na application/json.
Parsovat akci JSON
Když použijete tuto akci v Návrháři aplikace logiky, můžete analyzovat výstup JSON a generovat uživatelsky přívětivé tokeny, které představují vlastnosti v obsahu JSON. Tyto vlastnosti pak můžete snadno odkazovat a používat v rámci pracovního postupu aplikace logiky. Podobně jako trigger požadavku můžete zadat nebo vygenerovat schéma JSON, které popisuje obsah JSON, který chcete analyzovat. Díky tomu můžete snadněji využívat data ze služby Azure Service Bus, Azure Cosmos DB atd.
text/plain
Když aplikace logiky obdrží zprávy HTTP, které mají hlavičku nastavenou Content-Type
na text/plain
, aplikace logiky tyto zprávy ukládá v nezpracované podobě.
Pokud tyto zprávy zahrnete do následných akcí bez přetypování, požadavky přejdou s hlavičkou nastavenou Content-Type
na text/plain
.
Když například pracujete s plochým souborem, můžete získat požadavek HTTP s Content-Type
hlavičkou 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, @body('flatfile')
například, že druhý požadavek má také hlavičku nastavenou Content-Type
na text/plain
. Pokud pracujete s daty, která jsou prostým textem, 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 a application/octet-stream
Logic Apps vždy zachovává Content-Type
přijatý požadavek nebo odpověď HTTP.
Takže pokud vaše aplikace logiky obdrží obsah s nastaveným Content-Type
nastavením a tento obsah zahrnete do pozdější akce bez přetypování, odchozí požadavek je Content-Type
také nastaven na application/octet-stream
application/octet-stream
.
Logic Apps tak může zaručit, že se při procházení pracovního postupu neztratí data.
Stav akce nebo vstupy a výstupy se však uloží do objektu JSON, zatímco stav prochází pracovním postupem.
Funkce převaděče
Aby se zachovaly některé datové typy, Služba Logic Apps převede obsah na binární řetězec kódovaný v base64 s odpovídajícími metadaty, která zachová $content
datovou část i $content-type
datovou část, která se automaticky převedou.
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 s kódováním base64. -
base64toString()
: Převede řetězec s kódováním base64 natext/plain
-
base64toBinary()
: Převede řetězec s kódováním 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 HTTP, který Content-Type
je 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()
potom tento obsah použít později. Nebo můžete výraz použít @xpath(xml(triggerBody()), '/CustomerName')
s funkcemi xpath()
a xml()
funkcemi.
Další typy obsahu
Logic Apps funguje s jinými typy obsahu a podporuje je, ale může vyžadovat, abyste text zprávy získali ručně dekódováním $content
proměnné.
Předpokládejme například, že aplikace logiky se aktivuje požadavkem s typem application/x-www-url-formencoded
obsahu.
Aby se zachovala všechna data, $content
má proměnná v těle 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 nebo JSON, je požadavek uložen 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, například @body('formdataAction')
.
Tato metoda však funguje pouze v případě, že tělo je jediným parametrem body
ve vstupu. Pokud se pokusíte použít @body('formdataAction')
výraz v application/json
požadavku, zobrazí se chyba za běhu, protože text je odeslán zakódovaný.