Sdílet prostřednictvím


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

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.

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

    2. V části Enter 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

      Vygenerované schéma se teď zobrazí ve vaší aktivační události.

      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 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.

    Parsování kódu JSON

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-streamapplication/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-typedatovou čá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 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 s kódováním base64.
  • base64toString(): Převede řetězec s kódováním base64 na text/plain
  • base64toBinary(): Převede řetězec s kódováním 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 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ý.