Partilhar via


Manipular tipos de conteúdo nos Aplicativos Lógicos do Azure

Aplica-se a: Aplicativos Lógicos do Azure (Consumo + Padrão)

Vários tipos de conteúdo podem fluir através de um aplicativo lógico, por exemplo, JSON, XML, arquivos simples e dados binários. Embora os Aplicativos Lógicos suportem todos os tipos de conteúdo, alguns têm suporte nativo e não exigem transmissão ou conversão em seus aplicativos lógicos. Outros tipos podem exigir fundição ou conversão, conforme necessário. Este artigo descreve como os Aplicativos Lógicos lidam com tipos de conteúdo e como você pode converter ou converter corretamente esses tipos quando necessário.

Para determinar a maneira apropriada de lidar com tipos de conteúdo, os Aplicativos Lógicos dependem do valor do Content-Type cabeçalho em chamadas HTTP, por exemplo:

application/json

O Logic Apps armazena e lida com qualquer solicitação com o tipo de conteúdo application/json como um objeto JSON (JavaScript Object Notation). Por padrão, você pode analisar o conteúdo JSON sem qualquer transmissão. Para analisar uma solicitação que tenha um cabeçalho com o tipo de conteúdo "application/json", você pode usar uma expressão. Este exemplo retorna o valor dog da animal-type matriz sem transmitir:

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

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

Se você estiver trabalhando com dados JSON que não especificam um cabeçalho, poderá converter manualmente esses dados para JSON usando a função json(), por exemplo:

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

Criar tokens para propriedades JSON

Os Aplicativos Lógicos fornecem a capacidade de gerar tokens amigáveis que representam as propriedades no conteúdo JSON para que você possa referenciar e usar essas propriedades mais facilmente no fluxo de trabalho do seu aplicativo lógico.

  • Gatilho de solicitação

    Ao usar esse gatilho no Logic App Designer, você pode fornecer um esquema JSON que descreve a carga útil que você espera receber. O designer analisa o conteúdo JSON usando esse esquema e gera tokens amigáveis que representam as propriedades em seu conteúdo JSON. Em seguida, você pode facilmente referenciar e usar essas propriedades em todo o fluxo de trabalho do seu aplicativo lógico.

    Se você não tiver um esquema, poderá gerá-lo.

    1. No gatilho Solicitação, selecione Usar carga útil de exemplo para gerar esquema.

    2. Em Inserir ou colar uma carga JSON de exemplo, forneça uma carga útil de exemplo e escolha Concluído. Por exemplo:

      Captura de tela que mostra a ação

      O esquema gerado agora aparece no seu gatilho.

      Fornecer exemplo de carga JSON

      Aqui está a definição subjacente para o gatilho Request no editor de visualização 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. Na solicitação HTTP que seu aplicativo cliente envia aos Aplicativos Lógicos do Azure, certifique-se de incluir um cabeçalho chamado Content-Type e defina o valor do cabeçalho como application/json.

  • Analisar ação JSON

    Ao usar essa ação no Logic App Designer, você pode analisar a saída JSON e gerar tokens amigáveis que representam as propriedades em seu conteúdo JSON. Em seguida, você pode facilmente referenciar e usar essas propriedades em todo o fluxo de trabalho do seu aplicativo lógico. Semelhante ao gatilho Request, você pode fornecer ou gerar um esquema JSON que descreva o conteúdo JSON que você deseja analisar. Dessa forma, você pode consumir mais facilmente dados do Barramento de Serviço do Azure, do Azure Cosmos DB e assim por diante.

    Analisar JSON

text/plain

Quando seu aplicativo lógico recebe mensagens HTTP com o Content-Type cabeçalho definido como text/plain, seu aplicativo lógico armazena essas mensagens em formato bruto. Se você incluir essas mensagens em ações subsequentes sem transmitir, as solicitações sairão com o Content-Type cabeçalho definido como text/plain.

Por exemplo, quando você está trabalhando com um arquivo simples, você pode obter uma solicitação 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, você enviar essa solicitação em uma ação posterior como o corpo de outra solicitação, por exemplo, @body('flatfile')essa segunda solicitação também terá um Content-Type cabeçalho definido como text/plain. Se você estiver trabalhando com dados que são texto sem formatação, mas não especificou um cabeçalho, poderá converter manualmente esses dados em texto usando a função string(), como esta expressão:

@string(triggerBody())

application/xml e application/octet-stream

O Logic Apps sempre preserva o Content-Type em uma solicitação ou resposta HTTP recebida. Portanto, se seu aplicativo lógico receber conteúdo com Content-Type definido como application/octet-stream, e você incluir esse conteúdo em uma ação posterior sem transmitir, a solicitação de saída também será Content-Type definida como application/octet-stream. Dessa forma, os Aplicativos Lógicos podem garantir que os dados não se percam durante a movimentação no fluxo de trabalho. No entanto, o estado da ação, ou entradas e saídas, é armazenado em um objeto JSON enquanto o estado se move pelo fluxo de trabalho.

Funções do conversor

Para preservar alguns tipos de dados, o Logic Apps converte o conteúdo em uma cadeia de caracteres binária codificada em base64 com metadados apropriados que preservam a $content carga útil e o $content-type, que são convertidos automaticamente.

Esta lista descreve como os Aplicativos Lógicos convertem conteúdo quando você usa estas funções:

  • json(): Transmite dados para application/json
  • xml(): Transmite dados para application/xml
  • binary(): Transmite dados para application/octet-stream
  • string(): Transmite dados para text/plain
  • base64(): Converte conteúdo em uma cadeia de caracteres codificada em base64
  • base64toString(): Converte uma cadeia de caracteres codificada em base64 em text/plain
  • base64toBinary(): Converte uma cadeia de caracteres codificada em base64 em application/octet-stream
  • dataUri(): Converte uma cadeia de caracteres em um URI de dados
  • dataUriToBinary(): Converte um URI de dados em uma cadeia de caracteres binária
  • dataUriToString(): Converte um URI de dados em uma cadeia de caracteres

Por exemplo, se você receber uma solicitação HTTP onde Content-Type definido como application/xml, como este conteúdo:

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

Você pode transmitir esse conteúdo usando a @xml(triggerBody()) expressão com as funções e triggerBody() e, em seguida, xml() usar esse conteúdo mais tarde. Ou, você pode usar 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 você obtenha manualmente o corpo da mensagem decodificando a $content variável.

Por exemplo, suponha que seu aplicativo lógico seja acionado por uma solicitação com o tipo de application/x-www-url-formencoded conteúdo. Para preservar todos os dados, a $content variável no corpo da solicitação tem uma carga codificada como uma cadeia de caracteres base64:

CustomerName=Frank&Address=123+Avenue

Como a solicitação não é texto sem formatação ou JSON, a solicitação é armazenada na ação da seguinte maneira:

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

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

Ou, você pode acessar manualmente os dados usando uma expressão como este exemplo:

@string(body('formdataAction'))

Se você quiser que a solicitação de saída tenha o mesmo application/x-www-url-formencoded cabeçalho de tipo de conteúdo, poderá adicioná-la ao corpo da ação sem qualquer transmissão usando uma expressão como @body('formdataAction'). No entanto, este método só funciona quando o corpo é o único parâmetro na body entrada. Se você tentar usar a @body('formdataAction') expressão em uma application/json solicitação, obterá um erro de tempo de execução porque o corpo é enviado codificado.