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 (tipo nativo)
- texto/simples (tipo nativo)
- application/xml e application/octet-stream
- Outros tipos de conteúdo
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.
No gatilho Solicitação, selecione Usar carga útil de exemplo para gerar esquema.
Em Inserir ou colar uma carga JSON de exemplo, forneça uma carga útil de exemplo e escolha Concluído. Por exemplo:
O esquema gerado agora aparece no seu gatilho.
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" } } } } } } } }
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.
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 paraapplication/json
-
xml()
: Transmite dados paraapplication/xml
-
binary()
: Transmite dados paraapplication/octet-stream
-
string()
: Transmite dados paratext/plain
-
base64()
: Converte conteúdo em uma cadeia de caracteres codificada em base64 -
base64toString()
: Converte uma cadeia de caracteres codificada em base64 emtext/plain
-
base64toBinary()
: Converte uma cadeia de caracteres codificada em base64 emapplication/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.