Processar tipos de conteúdo no Azure Logic Apps

Aplica-se a: Azure Logic Apps (Consumo + Standard)

Vários tipos de conteúdo podem fluir através de uma aplicação lógica, por exemplo, JSON, XML, ficheiros simples e dados binários. Embora o Logic Apps suporte todos os tipos de conteúdo, alguns têm suporte nativo e não necessitam de casting ou conversão nas suas aplicações lógicas. Outros tipos podem exigir casting ou conversão conforme necessário. Este artigo descreve como o Logic Apps lida com os tipos de conteúdo e como pode lançar ou converter corretamente estes tipos quando necessário.

Para determinar a forma adequada de processar tipos de conteúdo, o Logic Apps baseia-se no valor do Content-Type cabeçalho nas chamadas HTTP, por exemplo:

application/json

O Logic Apps armazena e processa qualquer pedido com o tipo de conteúdo application/json como um objeto JSON (JavaScript Notation). Por predefinição, pode analisar conteúdo JSON sem qualquer casting. Para analisar um pedido que tenha um cabeçalho com o tipo de conteúdo "application/json", pode utilizar uma expressão. Este exemplo devolve o valor dog da animal-type matriz sem casting:

@body('myAction')['animal-type'][0]

{
  "client": {
     "name": "Fido",
     "animal-type": [ "dog", "cat", "rabbit", "snake" ]
  }
}

Se estiver a trabalhar com dados JSON que não especificam um cabeçalho, pode lançar manualmente esses dados para JSON com a função json(), por exemplo:

@json(triggerBody())['animal-type']

Criar tokens para propriedades JSON

O Logic Apps fornece a capacidade de gerar tokens fáceis de utilizar que representam as propriedades nos conteúdos JSON para que possa referenciar e utilizar essas propriedades mais facilmente no fluxo de trabalho da sua aplicação lógica.

  • Acionador de pedido

    Quando utiliza este acionador no Designer da Aplicação Lógica, pode fornecer um esquema JSON que descreva o payload que espera receber. O estruturador analisa o conteúdo JSON com este esquema e gera tokens fáceis de utilizar que representam as propriedades no conteúdo JSON. Em seguida, pode referenciar e utilizar facilmente essas propriedades em todo o fluxo de trabalho da sua aplicação lógica.

    Se não tiver um esquema, pode gerar o esquema.

    1. No acionador Pedir, selecione Utilizar payload de exemplo para gerar o esquema.

    2. Em Introduzir ou colar um payload JSON de exemplo, forneça um payload de exemplo e, em seguida, selecione Concluído. Por exemplo:

      Captura de ecrã que mostra a ação

      O esquema gerado aparece agora no acionador.

      Fornecer payload JSON de exemplo

      Segue-se a definição subjacente para o acionador Pedido no editor de vista de código:

      "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. No pedido HTTP que a sua aplicação cliente envia para o Azure Logic Apps, certifique-se de que inclui um cabeçalho com o nome Tipo de Conteúdo e defina o valor do cabeçalho como aplicação/json.

  • Analisar a ação JSON

    Quando utiliza esta ação no Designer da Aplicação Lógica, pode analisar a saída JSON e gerar tokens fáceis de utilizar que representam as propriedades no conteúdo JSON. Em seguida, pode referenciar e utilizar facilmente essas propriedades em todo o fluxo de trabalho da sua aplicação lógica. Semelhante ao acionador Pedido, pode fornecer ou gerar um esquema JSON que descreva o conteúdo JSON que pretende analisar. Desta forma, pode consumir mais facilmente dados de Azure Service Bus, do Azure Cosmos DB, etc.

    Analisar JSON

texto/simples

Quando a sua aplicação lógica recebe mensagens HTTP com o Content-Type cabeçalho definido como text/plain, a sua aplicação lógica armazena essas mensagens em formato não processado. Se incluir estas mensagens em ações subsequentes sem casting, os pedidos serão enviados com o Content-Type cabeçalho definido como text/plain.

Por exemplo, quando estiver a trabalhar com um ficheiro simples, poderá obter um pedido HTTP com o Content-Type cabeçalho definido como text/plain tipo de conteúdo:

Date,Name,Address
Oct-1,Frank,123 Ave

Se, em seguida, enviar este pedido numa ação posterior como o corpo de outro pedido, por exemplo, @body('flatfile'), esse segundo pedido também tem um Content-Type cabeçalho definido como text/plain. Se estiver a trabalhar com dados que são texto simples, mas não especificou um cabeçalho, pode lançar manualmente esses dados para texto com a função string(), como esta expressão:

@string(triggerBody())

application/xml e application/octet-stream

O Logic Apps preserva sempre o Content-Type num pedido OU resposta HTTP recebido. Por isso, se a sua aplicação lógica receber conteúdo definido Content-Type como application/octet-stream, e incluir esse conteúdo numa ação posterior sem casting, o pedido de envio também está Content-Type definido como application/octet-stream. Desta forma, o Logic Apps pode garantir que os dados não se perdem durante a movimentação do fluxo de trabalho. No entanto, o estado da ação, ou entradas e saídas, é armazenado num objeto JSON enquanto o estado se move através do fluxo de trabalho.

Funções de conversor

Para preservar alguns tipos de dados, o Logic Apps converte conteúdo numa cadeia binária codificada com base64 com metadados adequados que preservam o $content payload e o $content-type, que são convertidos automaticamente.

Esta lista descreve como o Logic Apps converte conteúdo quando utiliza estas funções:

  • json(): lança dados para application/json
  • xml(): lança dados para application/xml
  • binary(): lança dados para application/octet-stream
  • string(): lança dados para text/plain
  • base64(): converte conteúdo numa cadeia codificada com base64
  • base64toString(): converte uma cadeia codificada com base64 em text/plain
  • base64toBinary(): converte uma cadeia codificada com base64 em application/octet-stream
  • dataUri(): converte uma cadeia num URI de dados
  • dataUriToBinary(): converte um URI de dados numa cadeia binária
  • dataUriToString(): converte um URI de dados numa cadeia

Por exemplo, se receber um pedido HTTP definido Content-Type como application/xml, como este conteúdo:

<?xml version="1.0" encoding="UTF-8" ?>
<CustomerName>Frank</CustomerName>

Pode lançar este conteúdo utilizando a @xml(triggerBody()) expressão com as xml() funções e triggerBody() e, em seguida, utilizar este conteúdo mais tarde. Em alternativa, pode utilizar a @xpath(xml(triggerBody()), '/CustomerName') expressão com as xpath() funções e xml() .

Outros tipos de conteúdo

O Logic Apps funciona com e suporta outros tipos de conteúdo, mas pode exigir que obtenha manualmente o corpo da mensagem ao descodificar a $content variável.

Por exemplo, suponha que a sua aplicação lógica é acionada por um pedido com o application/x-www-url-formencoded tipo de conteúdo. Para preservar todos os dados, a $content variável no corpo do pedido tem um payload codificado como uma cadeia base64:

CustomerName=Frank&Address=123+Avenue

Uma vez que o pedido não é texto simples ou JSON, o pedido é armazenado na ação da seguinte forma:

"body": {
   "$content-type": "application/x-www-url-formencoded",
   "$content": "AAB1241BACDFA=="
}

O Logic Apps fornece funções nativas para processar dados de formulário, por exemplo:

Em alternativa, pode aceder manualmente aos dados com uma expressão como este exemplo:

@string(body('formdataAction'))

Se quiser que o pedido de saída tenha o mesmo application/x-www-url-formencoded cabeçalho de tipo de conteúdo, pode adicionar o pedido ao corpo da ação sem qualquer função de função de função através de uma expressão como @body('formdataAction'). No entanto, este método só funciona quando o corpo é o único parâmetro na body entrada. Se tentar utilizar a @body('formdataAction') expressão num application/json pedido, receberá um erro de runtime porque o corpo é enviado codificado.