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 (tipo nativo)
- texto/simples (tipo nativo)
- application/xml e application/octet-stream
- Outros tipos de conteúdo
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.
No acionador Pedir, selecione Utilizar payload de exemplo para gerar o esquema.
Em Introduzir ou colar um payload JSON de exemplo, forneça um payload de exemplo e, em seguida, selecione Concluído. Por exemplo:
O esquema gerado aparece agora no acionador.
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" } } } } } } } }
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.
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 paraapplication/json
-
xml()
: lança dados paraapplication/xml
-
binary()
: lança dados paraapplication/octet-stream
-
string()
: lança dados paratext/plain
-
base64()
: converte conteúdo numa cadeia codificada com base64 -
base64toString()
: converte uma cadeia codificada com base64 emtext/plain
-
base64toBinary()
: converte uma cadeia codificada com base64 emapplication/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.