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

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.

    1. V triggeru požadavku vyberte Použít ukázkovou datovou část ke generování schématu.

    2. V části Zadejte nebo vložte ukázkovou datovou část JSON zadejte ukázkovou datovou část a pak zvolte Hotovo. Příklad:

      Snímek obrazovky znázorňující akci Při přijetí požadavku HTTP s ukázkovou datovou částí JSON

      Vygenerované schéma se teď zobrazí v triggeru.

      Zadání ukázkové datové části JSON

      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"
                           }
                        }
                     }
                  }
               }
            }
         }
      }
      
    3. 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.

    Parsovat JSON

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-streama tento obsah zahrnete do pozdější akce bez přetypování, je odchozí požadavek také Content-Type nastavený na application/octet-streamhodnotu . 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-typeobjekt , 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 na application/json
  • xml(): Přetypuje data na application/xml
  • binary(): Přetypuje data na application/octet-stream
  • string(): Přetypuje data na text/plain
  • base64(): Převede obsah na řetězec kódovaný jako base64.
  • base64toString(): Převede řetězec kódovaný jako base64 na text/plain
  • base64toBinary(): Převede řetězec kódovaný jako base64 na application/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é.