Esta é a documentação do Apigee Edge.
Acesse
Documentação da Apigee X. informações
O que
A política AssignMessage muda ou cria novas mensagens de solicitação e resposta durante o fluxo de proxy da API. A política permite realizar as seguintes ações nessas mensagens:
- Adicionar novos parâmetros de formulário, cabeçalhos ou parâmetros de consulta para uma mensagem
- Copiar propriedades atuais de uma mensagem para outra
- Remover cabeçalhos, parâmetros de consulta, parâmetros de formulário e/ou mensagens payloads de uma mensagem
- Definir o valor das propriedades atuais de uma mensagem
Com a política AttributionMessage, você geralmente adiciona, altera ou remove propriedades dos solicitação ou resposta. No entanto, também é possível usar a políticaAssignMessage para criar um de solicitação ou resposta e passá-la para um destino alternativo, conforme descrito em Crie mensagens de solicitação personalizadas.
A política AssignMessage pode criar ou alterar variáveis de fluxo com os seguintes elementos filhos:
Elemento <AssignMessage>
Define uma política AssignMessage.
Valor padrão | Consulte a guia Política padrão a seguir |
Obrigatório? | Obrigatório |
Tipo | Objeto complexo |
Elemento pai | n/a |
Elemento filho |
<Add> <AssignTo> <AssignVariable> <Copy> <DisplayName> <IgnoreUnresolvedVariables> <Remove> <Set> |
O elemento <AssignMessage>
usa a seguinte sintaxe:
Sintaxe
O elemento <AssignMessage>
usa a seguinte sintaxe:
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <!-- All AssignMessage child elements are optional --> <Add> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Add> <AssignTo createNew="[true|false]" transport="http" type="[request|response]">destination_variable_name</AssignTo> <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> <Template>message_template</Template> or <Template ref='template_variable'></Template> <Value>variable_value</Value> </AssignVariable> <Copy source="[request|response]"> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Path>[false|true]</Path> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> <ReasonPhrase>[false|true]</ReasonPhrase> <StatusCode>[false|true]</StatusCode> <Verb>[false|true]</Verb> <Version>[false|true]</Version> </Copy> <DisplayName>policy_display_name</DisplayName> <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables> <Remove> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Remove> <Set> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Path>path</Path> <Payload contentType="content_type" variablePrefix="prefix" variableSuffix="suffix">new_payload</Payload> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> <StatusCode>HTTP_status_code or {variable}</StatusCode> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
Política padrão
O exemplo a seguir mostra as configurações padrão quando você adiciona uma políticaAssignMessage ao fluxo na interface do Edge:
<AssignMessage continueOnError="false" enabled="true" name="assign-message-default"> <DisplayName>Assign Message-1</DisplayName> <Properties/> <Copy source="request"> <Headers/> <QueryParams/> <FormParams/> <Payload/> <Verb/> <StatusCode/> <ReasonPhrase/> <Path/> </Copy> <Remove> <Headers> <Header name="h1"/> </Headers> <QueryParams> <QueryParam name="q1"/> </QueryParams> <FormParams> <FormParam name="f1"/> </FormParams> <Payload/> </Remove> <Add> <Headers/> <QueryParams/> <FormParams/> </Add> <Set> <Headers/> <QueryParams/> <FormParams/> <!-- <Verb>GET</Verb> --> <Path/> </Set> <AssignVariable> <Name>name</Name> <Value/> <Ref/> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Quando você insere uma nova políticaAssignMessage na interface do Edge, o modelo contém stubs para todos
possíveis operações. Normalmente, você seleciona quais operações quer executar com essa política
e remove o restante dos elementos filhos. Por exemplo, se você quiser executar uma operação de cópia, use o elemento
<Copy>
e remova <Add>
, <Remove>
e outros elementos filhos
da política para torná-la mais legível.
Este elemento tem os seguintes atributos comuns a todas as políticas:
Atributo | Padrão | Obrigatório? | Descrição |
---|---|---|---|
name |
N/A | Obrigatório |
O nome interno da política. O valor do atributo Opcionalmente, use o elemento |
continueOnError |
falso | Opcional | Defina como "false" para retornar um erro quando uma política falhar. Esse é o comportamento esperado para a maioria das políticas. Defina como "true" para que a execução do fluxo continue mesmo após a falha de uma política. |
enabled |
verdadeiro | Opcional | Defina como "true" para aplicar a política. Defina como "false" para "turn off" a política. A política não será aplicada mesmo que permaneça vinculada a um fluxo. |
async |
falso | Descontinuado | Esse atributo está obsoleto. |
A tabela a seguir fornece uma descrição de alto nível dos elementos filhos de <AssignMessage>
:
Elemento filho | Obrigatório? | Descrição |
---|---|---|
Operações comuns | ||
<Add> |
Opcional | Adiciona informações ao objeto de mensagem especificado pelo
elemento <AssignTo> .
|
<Copy> |
Opcional | Copia as informações da mensagem especificadas pelo atributo source
para o objeto de mensagem especificado pelo elemento <AssignTo> . |
<Remove> |
Opcional | Exclui os elementos especificados da variável de mensagem definida no
elemento <AssignTo> . |
<Set> |
Opcional | Substitui os valores das propriedades atuais na solicitação ou resposta, que é especificada
pelo elemento <AssignTo> .
O |
Outros elementos filhos | ||
<AssignTo> |
Opcional | Especifica em que mensagem a política AssignMessage funciona. Pode ser a solicitação ou a resposta padrão ou uma nova mensagem personalizada. |
<AssignVariable> |
Opcional | Atribui um valor a uma variável de fluxo. Se a variável não existir,
ela será criada por <AssignVariable> . |
<IgnoreUnresolvedVariables> |
Opcional | Determina se o processamento é interrompido quando uma variável não resolvida é encontrada. |
Cada um desses elementos filhos é descrito nas seções a seguir.
Exemplos
Os exemplos a seguir mostram algumas maneiras de usar a políticaAssignMessage política:
1: Adicionar cabeçalho
O exemplo a seguir adiciona um cabeçalho à solicitação com
o elemento <Add>
:
<AssignMessage continueOnError="false" enabled="true" name="add-headers-1"> <Add> <Headers> <Header name="user-agent">{request.user.agent}</Header> </Headers> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
2: Remover payload
O exemplo a seguir exclui o payload da resposta com
o elemento <Remove>
:
<AssignMessage continueOnError="false" enabled="true" name="remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
3: Modificar resposta
O exemplo a seguir modifica um objeto de resposta atual adicionando um cabeçalho:
<AssignMessage name="modify-response"> <Set> <Headers> <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo createNew="false" type="response"></AssignTo> </AssignMessage>
Este exemplo não cria uma nova mensagem. Em vez disso, ele modifica uma mensagem de resposta atual adicionando um cabeçalho HTTP.
Como este exemplo omite um nome de variável no elemento <AssignTo>
e especifica
type
como "resposta", essa política modifica o objeto de resposta retornado pelo servidor
de destino.
O cabeçalho HTTP adicionado pela política à mensagem de resposta é derivado de uma variável preenchida pela política LookupCache. Portanto, a mensagem de resposta modificada por essa política "Atribuir mensagem" contém um cabeçalho HTTP que indica se os resultados foram extraídos do cache ou não. Definir cabeçalhos na resposta pode ser útil para depuração e solução de problemas.
4: Definir conteúdo dinâmico
É possível usar a opção "Atribuir mensagem" para incorporar conteúdo dinâmico ao payload de mensagens de resposta e de solicitação.
Para incorporar variáveis de fluxo do Edge em um payload XML, una a variável designada entre chaves,
conforme mostrado a seguir: {prefix.name}
.
O exemplo a seguir incorpora o valor da variável de fluxo de cabeçalho HTTP user-agent
em um elemento XML chamado User-agent
:
<AssignMessage name="set-dynamic-content"> <AssignTo createNew="false" type="response"></AssignTo> <Set> <Payload contentType="text/xml"> <User-agent>{request.header.user-agent}</User-agent> </Payload> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </AssignMessage>
Para payloads JSON, é possível inserir variáveis usando os atributos variablePrefix
e
variableSuffix
com caracteres delimitadores, conforme mostrado no exemplo
a seguir:
<AssignMessage name="set-payload"> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> { "user-agent": "@request.header.user-agent#" } </Payload> </AssignMessage>
Para uma lista completa de variáveis de fluxo, consulte Referência de variáveis de fluxo.
A partir da versão 16.08.17, também será possível usar as chaves para inserir variáveis.
5: Remover parâmetro de consulta
O exemplo a seguir remove o parâmetro de consulta apikey
da solicitação:
<AssignMessage name="remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
É recomendável remover o parâmetro de consulta apikey
da mensagem de solicitação
se você usa a política VerifyAPIKey para autenticação do usuário. Faça isso para evitar
que informações importantes da chave sejam passadas ao destino de back-end.
6: Definir/encontrar variáveis
O exemplo a seguir mostra três usos de políticas de atribuição de mensagens:
- Criar três variáveis de fluxo na solicitação, com valores estáticos
- Encontrar as variáveis de fluxo dinamicamente em uma segunda política no fluxo de solicitação
- Definir as variáveis no payload da resposta.
<!-- Policy #1: Set variables in the request --> <AssignMessage continueOnError="false" enabled="true" name="set-variables"> <!-- Create a variable named myAppSecret --> <AssignVariable> <Name>myAppSecret</Name> <Value>42</Value> </AssignVariable> <!-- Create a variable named config.environment --> <AssignVariable> <Name>config.environment</Name> <Value>test</Value> </AssignVariable> <!-- Create a variable named config.protocol --> <AssignVariable> <Name>config.protocol</Name> <Value>gopher</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Na primeira política, o elemento <AssignVariable>
cria e define três
variáveis na solicitação. Cada elemento <Name>
especifica
um nome de variável e <Value>
especifica o valor.
A segunda política usa o elemento <AssignVariable>
para ler os valores e cria três
novas variáveis:
<!-- Policy #2: Get variables from the request --> <AssignMessage continueOnError="false" enabled="true" name="get-variables"> <AssignTo createNew="false" transport="http" type="request"/> <!-- Get the value of myAppSecret and create a new variable, secret --> <AssignVariable> <Name>secret</Name> <Ref>myAppSecret</Ref> <Value>0</Value> </AssignVariable> <!-- Get the value of config.environment and create a new variable, environment --> <AssignVariable> <Name>environment</Name> <Ref>config.environment</Ref> <Value>default</Value> </AssignVariable> <!-- Get the value of config.protocol and create a new variable, protocol --> <AssignVariable> <Name>protocol</Name> <Ref>config.protocol</Ref> <Value>default</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </AssignMessage>
Na segunda política, o elemento <Ref>
referencia variável de origem
e os elementos <Name>
especificam os nomes das novas variáveis. Se a variável
referenciada pelo elemento <Ref>
não estiver acessível, use o valor
especificado pelo elemento <Value>
.
Para testar esse conjunto de políticas:
- Adicione as políticas 1 e 2 ao fluxo de solicitação. Certifique-se de colocar a política no 1 antes da política 2.
- Adicione a terceira política no fluxo de resposta.
- A terceira política usa o elemento
<Set>
para adicionar as variáveis à resposta. A O exemplo a seguir constrói um payload XML na resposta que o Edge retorna ao cliente:<!-- Policy #3: Add variables to the response --> <AssignMessage continueOnError="false" enabled="true" name="put-em-in-the-payload"> <DisplayName>put-em-in-the-payload</DisplayName> <Set> <Payload contentType="application/xml"> <wrapper> <secret>{secret}</secret> <config> <environment>{environment}</environment> <protocol>{protocol}</protocol> </config> </wrapper> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
Observe que a sintaxe para acessar as variáveis de fluxo em
<Set>
é colocá-las entre chaves.Defina o atributo
contentType
do elemento<Payload>
como "application/xml". - Envie uma solicitação ao proxy de API. Por exemplo:
curl -vL https://ahamilton-eval-test.apigee.net/myproxy
Como opção, é possível canalizar os resultados por meio de um utilitário como
xmllint
para que o XML seja exibido em uma estrutura bem formatada:curl -vL https://ahamilton-eval-test.apigee.net/myproxy | xmllint --format -
O corpo da resposta será semelhante a este:
<wrapper> <secret>42</secret> <config> <environment>test</environment> <protocol>gopher</protocol> </config> </wrapper>
7: Receber cabeçalhos de resposta de chamada de serviço
No exemplo a seguir, digamos que uma política ServiceCallout esteja na solicitação de proxy de API,
e a resposta da chamada contenha vários cabeçalhos de mesmo nome
(Set-Cookie
). Supondo que a variável de resposta da chamada de serviço seja o padrão
calloutResponse
, a política a seguir encontra o segundo
valor do cabeçalho Set-Cookie
.
<AssignMessage continueOnError="false" enabled="true" name="get-header"> <Set> <Payload contentType="application/json"> {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"} </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Para listar todos os valores de cabeçalho, use a seguinte variável:
{calloutResponse.header.Set-Cookie.values}
Cada elemento filho nesta referência tem exemplos extras. Para ainda mais exemplos, consulte Exemplo de AssignMessage (em inglês) no GitHub.
Referência a elementos filhos
Esta seção descreve os elementos filhos de <AssignMessage>
.
<Add>
Adiciona informações à solicitação ou à resposta, que é especificada pelo
elemento <AssignTo>
.
O elemento <Add>
adiciona novas propriedades à mensagem que não existem na mensagem
original. Para alterar os valores das propriedades atuais, use
o elemento <Set>
.
Valor padrão | n/a |
Obrigatório? | Opcional |
Tipo | Tipo complexo |
Elemento pai |
<AssignMessage>
|
Elemento filho |
<FormParams> <Headers> <QueryParams> |
O elemento <Add>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Add> </AssignMessage>
Exemplo 1
O exemplo a seguir usa o elemento <FormParams>
para encontrar os valores de
três parâmetros de string de consulta da solicitação inicial e defini-los como parâmetros de formulário
na solicitação de endpoint de destino:
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3"> <Add> <FormParams> <FormParam name="name">{request.queryparam.name}</FormParam> <FormParam name="zip">{request.queryparam.zipCode}</FormParam> <FormParam name="lang">{request.queryparam.lang}</FormParam> </FormParams> </Add> <AssignTo transport="http" type="request"/> </AssignMessage>
Exemplo 2
O exemplo a seguir usa o elemento <Headers>
para adicionar o
cabeçalho User-Agent
à solicitação de endpoint de destino:
<AssignMessage continueOnError="false" enabled="true" name="add-headers-1"> <Add> <Headers> <Header name="user-agent">{request.user.agent}</Header> </Headers> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Exemplo 3
O exemplo a seguir usa o elemento <QueryParams>
para adicionar um único parâmetro de consulta
com um valor estático à solicitação:
<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Este exemplo usa <Add>
no pré-fluxo de solicitação. Se você analisar os resultados em uma ferramenta
como a Ferramenta de rastreamento, a solicitação para "http://httpbin.org/get" se torna
"http://httpbin.org/get?myParam=42".
Os elementos filhos de <Add>
são compatíveis com a substituição dinâmica de strings, conhecida como
modelos de mensagens.
<FormParams>
(filho de <Add>
)
Adiciona novos parâmetros de formulário à mensagem de solicitação. Esse elemento não afeta mensagens de resposta.
Valor padrão | n/a |
Obrigatório? | Opcional |
Tipo | Matriz de elementos <FormParam> |
Elemento pai |
<Add>
|
Elemento filho |
<FormParam> |
O elemento <FormParams>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <AssignTo createNew="[true|false]" transport="http" type="[request|response]">destination_variable_name</AssignTo> </Add> </AssignMessage>
Exemplo 1
O exemplo a seguir adiciona um único parâmetro de formulário ("answer") e um valor estático ("42") à solicitação:
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-1"> <Add> <FormParams> <FormParam name="answer">42</FormParam> </FormParams> </Add> <AssignTo transport="http" type="request"></AssignTo> </AssignMessage>
Exemplo 2
O exemplo a seguir encontra o valor do parâmetro de string de consulta name
e
o adiciona à solicitação como um parâmetro de formulário:
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-2"> <Add> <FormParam name="name">{request.queryparam.name}</FormParam> </Add> </AssignMessage>
Este exemplo não especifica um destino com <AssignTo>
. Essa política adiciona o
parâmetro somente à solicitação.
Exemplo 3
O exemplo a seguir adiciona vários parâmetros de formulário à solicitação:
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3"> <Add> <FormParams> <FormParam name="name">{request.queryparam.name}</FormParam> <FormParam name="zip">{request.queryparam.zipCode}</FormParam> <FormParam name="lang">{request.queryparam.lang}</FormParam> </FormParams> </Add> <AssignTo transport="http" type="request"/> </AssignMessage>
Este exemplo recebe os parâmetros da string de consulta da solicitação de origem e os adiciona como parâmetros do formulário à solicitação enviada ao endpoint de destino.
Use a Ferramenta de trace para observar o fluxo. Você verá que o corpo da solicitação contém os dados do formulário codificado por URL, que foram originalmente transmitidos como parâmetros de string de consulta:
%7Busername%7D=nick&%7Bzip_code%7D=90210&%7Bdefault_language%7D=en
Use <FormParams>
somente quando os seguintes critérios forem atendidos:
- Verbo HTTP: POST
- Tipo de mensagem: solicitação
- Um ou ambos os itens a seguir:
- Dados do formulário: defina como algum valor ou "" (a string vazia). Por exemplo, com
curl
, adicione-d ""
à solicitação. - Cabeçalho
Content-Length
: defina como 0 (isso se nenhum dado estiver na solicitação original. Caso contrário, o tamanho atual, em bytes). Por exemplo, comcurl
adicione-H "Content-Length: 0"
à solicitação.
- Dados do formulário: defina como algum valor ou "" (a string vazia). Por exemplo, com
Exemplo:
curl -vL -X POST -d "" -H "Content-Type: application/x-www-form-urlencoded" https://ahamilton-eval-test.apigee.net/am-test
Quando você adiciona <FormParams>
, o Edge define o cabeçalho Content-Type
da solicitação como
"application/x-www-form-urlencoded" antes de enviar a mensagem ao serviço de destino.
<Headers>
(filho de <Add>
)
Adiciona novos cabeçalhos à solicitação ou resposta especificada, definida pelo
elemento <AssignTo>
.
Valor padrão | n/a |
Obrigatório? | Opcional |
Tipo | Matriz de elementos <Header> |
Elemento pai |
<Add>
|
Elemento filho |
<Header> |
O elemento <Headers>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Add> </AssignMessage>
Exemplo 1
O exemplo a seguir adiciona o cabeçalho user-agent
à mensagem de solicitação e
atribui o valor da variável de fluxo request.user.agent
a esse cabeçalho.
<AssignMessage continueOnError="false" enabled="true" name="add-headers-1"> <Add> <Headers> <Header name="user-agent">{request.user.agent}</Header> </Headers> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
<QueryParams>
(filho de <Add>
)
Adiciona novos parâmetros de consulta à solicitação. Esse elemento não afeta respostas.
Valor padrão | n/a |
Obrigatório? | Opcional |
Tipo | Matriz de elementos <QueryParam> |
Elemento pai |
<Add>
|
Elemento filho |
<QueryParam> |
O elemento <QueryParams>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Add> </AssignMessage>
Exemplo 1
O exemplo a seguir adiciona o parâmetro de consulta "myParam" à solicitação e atribui o valor "42" a ela:
<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Use <QueryParams>
somente quando os seguintes critérios forem atendidos:
- Verbo HTTP: GET
- Tipo de mensagem: solicitação
Além disso, só é possível definir parâmetros de consulta quando o atributo
type
do elemento <AssignTo>
for uma mensagem de solicitação. A definição delas na resposta não tem efeito.
Se você definir uma matriz vazia de parâmetros de consulta na política
(<Add><QueryParams/></Add>
), a política não adicionará
parâmetros de consulta. Isso é o mesmo que omitir <QueryParams>
.
<AssignTo>
Determina em que objeto a política AssignMessage opera. As opções são:
- Mensagem de solicitação: o
request
recebido pelo proxy da API - Mensagem de resposta: o
response
retornado do servidor de destino - Mensagem personalizada: uma solicitação personalizada ou um objeto de resposta
Em alguns casos, não é possível alterar o objeto em que a política AssignMessage atua.
Por exemplo, não é possível usar <Add>
ou <Set>
para adicionar ou alterar parâmetros de consulta
(<QueryParams>
) ou parâmetros de formulário (<FormParams>
) na resposta. Só é possível
manipular parâmetros de consulta e de formulário na solicitação.
Valor padrão | n/a |
Obrigatório? | Opcional |
Tipo | String |
Elemento pai |
<AssignMessage>
|
Elemento filho | Nenhum |
Se você não especificar <AssignTo>
, a política atuará na solicitação ou resposta padrão,
que é baseada no local em que a política é executada. Se a política for executada no fluxo da solicitação, ela
afetará a mensagem de solicitação. Se for executada no fluxo de resposta, a política afetará
a resposta por padrão.
O elemento <AssignTo>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignTo createNew="[true|false]" transport="http" type="[request|response]">destination_variable_name</AssignTo> </AssignMessage>
Exemplo 1
O exemplo a seguir especifica que o destino é a solicitação original que será enviada ao endpoint de destino:
<AssignMessage name="assignto-1"> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Se createNew
for definido como "false" (padrão), esse exemplo não criará uma
nova solicitação. Todas as operações desta política afetam a solicitação original.
Exemplo 2
O exemplo a seguir cria um novo objeto de solicitação:
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Quando você cria uma nova solicitação ou objeto de resposta, os outros elementos da políticaAssignMessage
política (como <Add>
, <Set>
e <Set>
) será aplicada
objeto de solicitação.
É possível acessar o novo objeto de solicitação em outras políticas do fluxo posteriormente ou enviar o novo objeto de solicitação para um serviço externo com uma política ServiceCallout.
Exemplo 3
O exemplo a seguir cria um novo objeto de solicitação chamado "MyRequestObject":
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo> </AssignMessage>
Quando você cria uma nova solicitação ou objeto de resposta, os outros elementos da políticaAssignMessage
política (como <Add>
, <Set>
e <Set>
) será aplicada
objeto de solicitação.
É possível acessar o novo objeto de solicitação em outras políticas do fluxo posteriormente ou enviar o novo objeto de solicitação para um serviço externo com uma política ServiceCallout.
A tabela a seguir descreve os atributos de <AssignTo>
:
Atributo | Descrição | Obrigatório? | Tipo |
---|---|---|---|
createNew |
Determina se essa política cria uma nova mensagem ao atribuir valores. Se for "true", a política criará uma nova variável do tipo
especificado por Se o valor for "false", a política responderá de uma destas duas maneiras:
Se
|
Opcional | Booleanos |
transport |
Especifica o tipo de transporte para o tipo de mensagem de solicitação ou resposta. O valor padrão é "http" (o único valor aceito). |
Opcional | String |
type |
Especifica o tipo da nova mensagem, quando createNew é "true". Os valores válidos são
"request" ou "response".
O valor padrão é "request". Se você omitir esse atributo, o Edge criará uma solicitação ou uma resposta, dependendo de onde essa política é executada no fluxo. |
Opcional | String |
<AssignVariable>
Atribui um valor a uma variável de fluxo de destino (por exemplo, uma variável cujo valor é definido pelo
atribuição de mensagem). Se a variável de fluxo não existir, <AssignVariable>
será criada por
ela.
Valor padrão | n/a |
Obrigatório? | Opcional |
Tipo | Tipo complexo |
Elemento pai |
<AssignMessage>
|
Elemento filho |
<Name> (obrigatório)<Ref> <Template> <Value> |
O valor atribuído à variável de fluxo de destino pode ser um dos seguintes:
- String literal: use o elemento filho
<Value>
para especificar um valor de string literal para a variável de fluxo de destino. - Variável de fluxo: use o elemento filho
<Ref>
para especificar o valor de uma variável de fluxo atual para a variável de fluxo de destino. Para uma lista completa de variáveis de fluxo que podem ser usadas como origem, consulte Referência de variáveis de fluxo. - Modelo de mensagem: use o elemento filho
<Template>
para especificar um modelo de mensagem para a variável de fluxo de destino.
O elemento <AssignVariable>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> <Template>message_template</Template> or <Template ref='template_variable'></Template> <Value>variable_value</Value> </AssignVariable> </AssignMessage>
Use o elemento <Ref>
para especificar a variável de origem. Se o
a variável referenciada por <Ref>
não estiver acessível, o Edge usará o valor
especificado pelo elemento <Value>
. Se você definir
<Template>
, ele terá precedência sobre os outros elementos filhos.
Exemplo 1
O exemplo a seguir define o valor de uma nova variável, myvar
, como o valor
literal "42":
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
Exemplo 2
O exemplo a seguir atribui o valor da variável de fluxo
request.header.user-agent
para a variável do fluxo de destino myvar
e o valor do parâmetro de consulta country
para a variável do fluxo de destino
Country
:
<AssignMessage name="assignvariable-2"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> </AssignMessage>
Se uma das atribuições falhar, o Edge atribuirá o valor "ErrorOnCopy" para a variável de fluxo de destino.
Se as variáveis de fluxo myvar
ou Country
não existirem,
elas serão criadas por <AssignVariable>
.
Exemplo 3
O exemplo a seguir usa o elemento filho <Template>
para concatenar duas variáveis de contexto
com uma string literal (um hífen) entre elas:
<AssignMessage name='template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
Um uso comum de <AssignVariable>
é definir um valor padrão para um parâmetro de consulta, cabeçalho ou
outro valor que possa ser passado com a solicitação. Isso é feito com uma combinação dos elementos filhos
<Ref>
e <Value>
. Para mais
informações, consulte os exemplos de <Ref>
.
<Name>
(filho de <AssignVariable>
)
Especifica o nome da variável de fluxo de destino (por exemplo, a variável cujo valor é definido pela
a política AttributionMessage). Se a variável nomeada em <AssignVariable>
não existir, a
política criará uma com esse nome.
Valor padrão | n/a |
Obrigatório? | Obrigatório |
Tipo | String |
Elemento pai |
<AssignVariable>
|
Elemento filho | Nenhuma |
O elemento <Name>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> </AssignVariable> </AssignMessage>
Exemplo 1
O exemplo a seguir especifica a variável de destino como myvar
e a define
como o valor literal "42":
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
Se myvar
não existir, ele será criado por <AssignVariable>
.
<Ref>
(filho de <AssignVariable>
)
Especifica a origem da atribuição como uma variável de fluxo. A variável pode ser uma das variáveis de fluxo predefinidas, conforme listado na Referência de variáveis de fluxo, ou uma variável personalizada criada por você.
O valor de <Ref>
é sempre interpretado como uma variável de fluxo. não é possível
especificar uma string literal como
o valor. Para atribuir um valor de string literal,
use o elemento <Value>
.
Valor padrão | n/a |
Obrigatório? | Opcional |
Tipo | String |
Elemento pai |
<AssignVariable>
|
Elemento filho | Nenhum |
Ao especificar uma variável de fluxo com <Ref>
, omita as
chaves "{}" que você normalmente usaria para referenciar uma variável de fluxo. Por exemplo,
para definir o valor da nova variável como o valor da variável
de fluxo client.host
:
Do this (no brackets): <Ref>client.host</Ref> Do NOT do this (brackets): <Ref>{client.host}</Ref>
Para definir um valor padrão para a variável de fluxo de destino, use <Value>
com <Ref>
. Se a variável de fluxo especificada pelo
<Ref>
não existe, não pode ser lido ou é nulo, então o Edge atribui o valor
de <Value>
à variável de fluxo de destino.
O elemento <Ref>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> </AssignVariable> </AssignMessage>
Exemplo 1
O exemplo a seguir atribui o valor da variável de fluxo
request.header.user-agent
para a variável do fluxo de destino myvar
e o valor do parâmetro de consulta country
para a variável Country
:
<AssignMessage name="assignvariable-4"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> </AssignVariable> </AssignMessage>
Neste exemplo, o Edge não tem um padrão (ou valor de substituição) especificado para atribuição.
Exemplo 2
O exemplo a seguir atribui o valor da variável de fluxo
request.header.user-agent
para a variável do fluxo de destino myvar
e o valor do parâmetro de consulta country
para a variável Country
:
<AssignMessage name="assignvariable-2"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> </AssignMessage>
Neste exemplo, se os valores da variável de fluxo request.header.user-agent
ou se o parâmetro de consulta Country
for nulo, ilegível ou malformado, o Edge atribuirá
o valor "ErrorOnCopy" às novas variáveis.
Exemplo 3
Um caso de uso comum de <AssignVariable>
é definir o valor padrão de um parâmetro
de consulta, cabeçalho ou outro valor que pode ser transmitido com a solicitação. Por exemplo, você cria
um proxy da API Weather em que a solicitação usa um único parâmetro de consulta chamado "w". Esse
parâmetro contém o ID da cidade para que você quer saber a previsão do tempo. O URL da solicitação tem
o seguinte formato:
http://myCO.com/v1/weather/forecastrss?w=city_ID
Para definir um valor padrão para "w", crie uma política "AssignMessage" como a seguinte:
<AssignMessage continueOnError="false" enabled="true" name="assignvariable-3"> <AssignTo createNew="false" transport="http" type="request"/> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignVariable> <Name>request.queryparam.w</Name> <Ref>request.queryparam.w</Ref> <Value>12797282</Value> </AssignVariable> </AssignMessage>
Neste exemplo, <AssignVariable>
encontra o valor de request.queryparam.w
e o atribui a si mesmo. Se a variável de fluxo for nula, o que significa que o parâmetro de consulta "w" foi
omitido da solicitação, então este exemplo usa o valor padrão
do elemento <Value>
. Portanto, é possível fazer uma solicitação para esse proxy de API
que omita o parâmetro de consulta "w":
http://myCO.com/v1/weather/forecastrss
...e ainda assim fazer com que o proxy de API retorne um resultado válido.
Diferente do que acontece quando <Value>
é usado, o valor de <Ref>
precisa ser
uma variável de fluxo, como a propriedade de um objeto request
. response
ou
target
. O valor também pode ser uma variável de fluxo personalizada criada por você.
Se você especificar uma variável de fluxo que não existe para o valor de <Ref>
,
e o valor de <IgnoreUnresolvedVariables>
for "true", o Edge vai gerar um erro.
<Template>
(filho de <AssignVariable>
)
Especifica um modelo de mensagem. Um modelo de mensagem permite realizar a substituição de strings variáveis quando a política é executada e pode combinar strings literais com nomes de variáveis entre chaves. Além disso, os modelos de mensagem são compatíveis com funções como escape e conversão de maiúsculas e minúsculas.
Use o atributo ref
para especificar uma variável de fluxo em que o valor da variável
é um modelo de mensagem. Por exemplo, você pode armazenar um modelo de mensagem como um
atributo personalizado
em um app de desenvolvedor. Quando o Edge identifica o app do desenvolvedor depois de verificar a chave de API
ou token de segurança (usando uma política adicional), o <AssignVariable>
poderia usar o modelo de mensagem do atributo personalizado do aplicativo, que está disponível
como uma variável de fluxo da política de segurança. No exemplo a seguir, presume-se que o modelo de mensagem
está disponível em um atributo do cliente chamado message_template
no app de desenvolvedor que faz a chamada de API, em que a política VerifyAPIKey foi usada para verificar
a chave de API do app:
<AssignVariable ref='verifyapikey.myVerifyAPIKeyPolicy.app.name.message_template'/>
Valor padrão | n/a |
Obrigatório? | Opcional |
Tipo | String |
Elemento pai |
<AssignVariable>
|
Elemento filho | Nenhuma |
O elemento <Template>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Template>message_template</Template> or <Template ref='template_variable'></Template> </AssignVariable> </AssignMessage>
Exemplo 1
O exemplo a seguir usa a sintaxe de modelo de mensagem para concatenar duas variáveis de contexto com uma string literal (um hífen) entre elas:
<AssignMessage name='template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
Exemplo 2
O exemplo a seguir especifica uma variável de fluxo, em que o valor da variável é um modelo de mensagem predefinido. Use essa opção se quiser injetar um modelo predefinido no ambiente de execução, sem precisar modificar a política:
<AssignMessage name='template-2'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template ref='my_template_variable'/> </AssignVariable> </AssignMessage>
Exemplo 3
O exemplo a seguir especifica uma variável de fluxo e um valor de texto. Nesse caso, se
a variável referenciada não for nula, esse valor será usado como o modelo. Se o valor referenciado
for nulo, o valor de texto (neste caso, {system.uuid}-{messageid}
)
será usado como modelo. Esse padrão é útil para fornecer um valor de "substituição". Em alguns
casos você quer substituir o modelo padrão (a parte de texto) por valores
definidos dinamicamente. Por exemplo, uma instrução condicional pode capturar um valor
de um mapa de chave-valor e definir a variável referenciada para esse valor:
<AssignMessage name='template-2'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template ref='my_variable'>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
<Value>
(filho de <AssignVariable>
)
Define o valor da variável de fluxo de destino definida com <AssignVariable>
. O
valor é sempre interpretado como uma string literal. Não é possível usar uma variável de fluxo como o valor, mesmo
que você coloque o valor entre chaves ("{}"). Para usar uma variável de fluxo,
use <Ref>
.
Valor padrão | n/a |
Obrigatório? | Opcional |
Tipo | String |
Elemento pai |
<AssignVariable>
|
Elemento filho | Nenhum |
Quando usado com o elemento <Ref>
, <Value>
atua como o valor padrão (ou substituto). Se <Ref>
não for especificado,
não puder ser resolvido ou for nulo, o valor de <Value>
será usado.
O elemento <Value>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Value>variable_value</Value> </AssignVariable> </AssignMessage>
Exemplo 1
O exemplo a seguir define o valor da variável de fluxo de destino, myvar
,
para o valor literal "42":
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
Exemplo 2
O exemplo a seguir atribui o valor da variável de fluxo
request.header.user-agent
para a variável de fluxo myvar
e o valor do parâmetro de consulta country
para a variável Country
:
<AssignMessage name="assignvariable-2"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> </AssignMessage>
Se qualquer uma das atribuições falhar, o <AssignVariable>
atribuirá o valor "ErrorOnCopy" à
variável de fluxo de destino.
<Copy>
Copia os valores da mensagem especificada pelo atributo source
para a mensagem especificada pelo elemento <AssignTo>
. Se você não especificar
um destino com <AssignTo>
, essa política copiará os valores para a solicitação ou resposta,
dependendo do local no fluxo em que a política é executada.
Valor padrão | n/a |
Obrigatório? | Opcional |
Tipo | String |
Elemento pai |
<AssignMessage>
|
Elemento filho |
<FormParams> <Headers> <Path> <Payload> <QueryParams> <ReasonPhrase> <StatusCode> <Verb> <Version> |
O elemento <Copy>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="policy_name" >
<Copy source="[request|response]">
<!-- Can also be an empty array (<FormParams/>) -->
<FormParams>
<FormParam name="formparam_name">formparam_value</FormParam>
...
</FormParams>
<!-- Can also be an empty array (<Headers/>) -->
<Headers>
<Header name="header_name">header_value</Header>
...
</Headers>
<Path>[false|true]</Path>
<Payload>[false|true]</Payload>
<!-- Can also be an empty array (<QueryParams/>) -->
<QueryParams>
<QueryParam name="queryparam_name">queryparam_value</QueryParam>
...
</QueryParams>
<ReasonPhrase>[false|true]</ReasonPhrase>
<StatusCode>[false|true]</StatusCode>
<Verb>[false|true]</Verb>
<Version>[false|true]</Version>
</Copy>
<!-- Used as the destination for the <Copy>
values -->
<AssignTo createNew="[true|false]" transport="http"
type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>
Exemplo 1
O exemplo a seguir copia um cabeçalho, três parâmetros de formulário, o caminho e todos os parâmetros de consulta da solicitação para uma nova solicitação personalizada:
<AssignMessage continueOnError="false" enabled="true" name="copy-1"> <Copy source="request"> <Headers> <Header name="Header_Name_1">Header value 1</Header> </Headers> <FormParams> <FormParam name="Form_Param_Name_1">Form param value 1</FormParam> <FormParam name="Form_Param_Name_2">Form param value 1</FormParam> <FormParam name="Form_Param_Name_3">Form param value 1</FormParam> </FormParams> <Payload>false</Payload> <Path>true</Path> <QueryParams/> <ReasonPhrase>false</ReasonPhrase> <StatusCode>false</StatusCode> <Verb>false</Verb> <Version>false</Version> </Copy> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
O elemento <Copy>
tem os seguintes atributos:
Atributo | Descrição | Obrigatório? | Tipo |
---|---|---|---|
origem |
Especifica o objeto de origem da cópia.
|
Opcional | String |
<FormParams>
(filho de <Copy>
)
Copia os parâmetros do formulário de solicitação especificados pelo atributo
source
do elemento <Copy>
para a solicitação
especificada pelo <AssignTo>
. Esse elemento não afeta
respostas.
Valor padrão | n/a |
Obrigatório? | Opcional |
Tipo | Matriz de elementos <FormParam> ou uma matriz vazia |
Elemento pai |
<Copy>
|
Elemento filho |
<FormParam> |
O elemento <FormParams>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> </Copy> </AssignMessage>
Exemplo 1
O exemplo a seguir copia um único parâmetro de formulário da solicitação para a solicitação personalizada "MyCustomRequest":
<AssignMessage name="copy-formparams-1"> <Copy source="request"> <FormParams> <FormParam name="paramName">Form param value 1</FormParam> </FormParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Exemplo 2
O exemplo a seguir copia todos os parâmetros do formulário para a solicitação personalizada "MyCustomRequest":
<AssignMessage name="copy-formparams-2"> <Copy source="request"> <FormParams/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Exemplo 3
O exemplo a seguir copia três parâmetros do formulário para a solicitação personalizada "MyCustomRequest":
<AssignMessage name="copy-formparams-3"> <Copy source="request"> <FormParams> <FormParam name="paramName1"/> <FormParam name="paramName2"/> <FormParam name="paramName3"/> </FormParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Exemplo 4
Se houver vários parâmetros do formulário com o mesmo nome, use a seguinte sintaxe:
<AssignMessage name="copy-formparams-4"> <Copy source="request"> <FormParams> <FormParam name="f1"/> <FormParam name="f2"/> <FormParam name="f3.2"/> </FormParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Este exemplo copia "f1", "f2" e o segundo valor de "f3". Se "f3" tiver apenas um valor, ele não é copiado.
Use <FormParams>
somente quando os seguintes critérios forem atendidos:
- Verbo HTTP: POST
- Tipo de mensagem: resposta
- Um ou ambos os itens a seguir:
- Dados do formulário: defina como algum valor ou "" (a string vazia). Por exemplo, com
curl
, adicione-d ""
à solicitação. - Cabeçalho
Content-Length
: defina como 0 (isso se nenhum dado estiver na solicitação original. Caso contrário, o tamanho atual). Por exemplo, comcurl
adicione-H "Content-Length: 0"
à solicitação.
- Dados do formulário: defina como algum valor ou "" (a string vazia). Por exemplo, com
Quando você copia <FormParams>
, o <Copy>
define o Content-Type
da mensagem como
"application/x-www-form-urlencoded" antes de enviar a mensagem ao serviço de destino.
<Headers>
(filho de <Copy>
)
Copia os cabeçalhos HTTP da mensagem de solicitação ou resposta especificada pelo
atributo source
do elemento <Copy>
para a mensagem de solicitação
ou resposta especificada pelo elemento <AssignTo>
.
Valor padrão | n/a |
Obrigatório? | Opcional |
Tipo | Matriz de elementos <Header> ou uma matriz vazia |
Elemento pai |
<Copy>
|
Elemento filho |
<Header> |
O elemento <Headers>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Copy> </AssignMessage>
Exemplo 1
O exemplo a seguir copia o cabeçalho user-agent
da solicitação para o novo
objeto de solicitação personalizado:
<AssignMessage name="copy-headers-1"> <Copy source="request"> <Headers> <Header name="user-agent"/> </Headers> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Exemplo 2
Para copiar todos os cabeçalhos, use um elemento <Headers>
vazio, como mostra
o exemplo a seguir:
<AssignMessage name="copy-headers-2"> <Copy source="request"> <Headers/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Exemplo 3
Se houver vários cabeçalhos com o mesmo nome, use a seguinte sintaxe:
<AssignMessage name="copy-headers-3"> <Copy source="request"> <Headers> <Header name="h1"/> <Header name="h2"/> <Header name="h3.2"/> </Headers> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Este exemplo copia "h1", "h2" e o segundo valor de "h3". Se "h3" tiver apenas um valor, ele não é copiado.
<Path>
(filho de <Copy>
)
Determina se o caminho precisa ser copiado da solicitação de origem para a solicitação de destino. Esse elemento não afeta respostas.
Se for "true", essa política copia o caminho da mensagem de solicitação especificada pelo
atributo source
do elemento <Copy>
para a mensagem de solicitação
especificada pelo elemento <AssignTo>
.
Valor padrão | Falso |
Obrigatório? | Opcional |
Tipo | Booleano |
Elemento pai |
<Copy>
|
Elemento filho | Nenhuma |
O elemento <Path>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Path>[false|true]</Path> </Copy> </AssignMessage>
Exemplo 1
O exemplo a seguir indica que a política AttributionMessage precisa copiar o caminho da origem para o novo objeto de solicitação personalizado:
<AssignMessage name="copy-path-1"> <Copy source="request"> <Path>true</Path> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Use <Path>
somente quando os seguintes critérios forem atendidos:
- Tipo de mensagem: solicitação
<Payload>
(filho de <Copy>
)
Determina se o payload precisa ser copiado da origem para o destino. A origem e o destino podem ser solicitações ou respostas.
Se for "true", essa política copia o payload da mensagem especificada pelo
atributo source
do elemento <Copy>
para a mensagem
especificada pelo elemento <AssignTo>
.
Valor padrão | Falso |
Obrigatório? | Opcional |
Tipo | Booleano |
Elemento pai |
<Copy>
|
Elemento filho | Nenhuma |
O elemento <Payload>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Payload>[false|true]</Payload> </Copy> </AssignMessage>
Exemplo 1
O exemplo a seguir define <Payload>
como "true" para que o payload da solicitação seja
copiado da solicitação para a resposta:
<AssignMessage name="copy-payload-1"> <Copy source="request"> <Payload>true</Payload> </Copy> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
<QueryParams>
(filho de <Copy>
)
Copia os parâmetros da string de consulta da solicitação especificada pelo atributo
source
do elemento <Copy>
para a solicitação
especificada pelo elemento <AssignTo>
. Esse elemento não afeta respostas.
Valor padrão | n/a |
Obrigatório? | Opcional |
Tipo | Matriz de elementos <QueryParam> ou uma matriz vazia |
Elemento pai |
<QueryParam>
|
Elemento filho | Nenhuma |
O elemento <QueryParams>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Copy> </AssignMessage>
Exemplo 1
O exemplo a seguir copia o parâmetro de consulta "my_param" da solicitação para um novo objeto de solicitação personalizado:
<AssignMessage name="copy-queryparams-1"> <Copy source="request"> <QueryParams> <QueryParam name="my_param"/> </QueryParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Exemplo 2
O exemplo a seguir copia todos os parâmetros de consulta da solicitação para um novo objeto de solicitação personalizada:
<AssignMessage name="copy-queryparams-2"> <Copy source="request"> <QueryParams/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Exemplo 3
Se houver vários parâmetros de consulta com o mesmo nome, use a seguinte sintaxe:
<AssignMessage name="copy-queryparams-3"> <Copy source="request"> <QueryParams> <QueryParam name="qp1"/> <QueryParam name="qp2"/> <QueryParam name="qp3.2"/> </QueryParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Este exemplo copia "qp1", "qp2" e o segundo valor de "qp3". Se "qp3" tiver apenas um valor, ele não é copiado.
Use <QueryParams>
somente quando os seguintes critérios forem atendidos:
- Verbo HTTP: GET
- Tipo de mensagem: solicitação
<ReasonPhrase>
(filho de <Copy>
)
Determina se a frase de razão deve ser copiada da resposta da origem para a resposta do destino. Esse elemento não afeta solicitações.
Se for "true", essa política copia ReasonPhrase
da resposta
especificada pelo atributo source
do elemento <Copy>
para a resposta
especificada pelo elemento <AssignTo>
.
Valor padrão | Falso |
Obrigatório? | Opcional |
Tipo | Booleano |
Elemento pai |
<Copy>
|
Elemento filho | Nenhuma |
O elemento <ReasonPhrase>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <ReasonPhrase>[false|true]</ReasonPhrase> </Copy> </AssignMessage>
Exemplo 1
O exemplo a seguir define <ReasonPhrase>
como "true", que faz com que <Copy>
copie a frase de razão da resposta padrão para um objeto de resposta personalizada:
<AssignMessage name="copy-reasonphrase-1"> <Copy source="response"> <ReasonPhrase>true</ReasonPhrase> </Copy> <AssignTo createNew="trie" transport="http" type="response">MyCustomResponse</AssignTo> </AssignMessage>
Use <ReasonPhrase>
somente quando os seguintes critérios forem atendidos:
- Tipo de mensagem: resposta
<StatusCode>
(filho de <Copy>
)
Determina se o código de status é copiado da resposta de origem para a resposta de destino. Esse elemento não afeta solicitações.
Se for "true", essa política copia o código de status da mensagem de resposta especificada pelo
atributo source
do elemento <Copy>
para a mensagem de resposta
especificada pelo elemento <AssignTo>
.
Valor padrão | Falso |
Obrigatório? | Opcional |
Tipo | Booleano |
Elemento pai |
<Copy>
|
Elemento filho | Nenhuma |
O elemento <StatusCode>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <StatusCode>[false|true]</StatusCode> </Copy> </AssignMessage>
Exemplo 1
O exemplo a seguir define <StatusCode>
como "true", que copia o código de status
do objeto de resposta padrão para um novo objeto de resposta personalizada:
<AssignMessage name="copy-statuscode-1"> <Copy source="response"> <StatusCode>true</StatusCode> </Copy> <AssignTo createNew="true" transport="http" type="response">MyCustomResponse</AssignTo> </AssignMessage>
Use <StatusCode>
somente quando os seguintes critérios forem atendidos:
- Tipo de mensagem: resposta
Um uso comum do <StatusCode>
é garantir que a resposta do proxy tenha o mesmo status
que a resposta recebida do destino quando o atributo createNew
de <AssignTo>
for definido como "verdadeiro".
<Verb>
(filho de <Copy>
)
Determina se o verbo HTTP é copiado da solicitação de origem para a solicitação de destino. Esse elemento não afeta respostas.
Se for "true", copia o verbo encontrado no atributo source
do elemento <Copy>
para a solicitação especificada no elemento <AssignTo>
.
Valor padrão | Falso |
Obrigatório? | Opcional |
Tipo | Booleano |
Elemento pai |
<Copy>
|
Elemento filho | Nenhuma |
O elemento <Verb>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Verb>[false|true]</Verb> </Copy> </AssignMessage>
Exemplo 1
O exemplo a seguir define <Verb>
como "true", que copia o verbo da solicitação
padrão para uma nova solicitação personalizada:
<AssignMessage name="copy-verb-1"> <Copy source="request"> <Verb>true</Verb> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Use <Verb>
somente quando os seguintes critérios forem atendidos:
- Tipo de mensagem: solicitação
<Version>
(filho de <Copy>
)
Determina se a versão HTTP é copiada da solicitação de origem para a solicitação de destino. Esse elemento não afeta respostas.
Se for "true", copia a versão HTTP encontrada no atributo source
do elemento <Copy>
para o objeto especificado pelo elemento <AssignTo>
.
Valor padrão | Falso |
Obrigatório? | Opcional |
Tipo | Booleano |
Elemento pai |
<Copy>
|
Elemento filho | Nenhuma |
O elemento <Version>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Version>[false|true]</Version> </Copy> </AssignMessage>
Exemplo 1
O exemplo a seguir define <Version>
como "true" na solicitação, que copia a versão
do objeto de solicitação padrão para um novo objeto de solicitação personalizada:
<AssignMessage name="copy-version-1"> <Copy source="request"> <Version>true</Version> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Use <Version>
somente quando os seguintes critérios forem atendidos:
- Tipo de mensagem: solicitação
<DisplayName>
Use além do atributo name
para rotular a política no editor de proxy da IU de gerenciamento com um nome de som diferente e mais natural.
O elemento <DisplayName>
é comum a todas as políticas.
Valor padrão | n/a |
Obrigatório? | Opcional. Se você omitir <DisplayName> , o valor do atributo name da política será usado |
Tipo | String |
Elemento pai | <PolicyElement> |
Elemento filho | Nenhuma |
O elemento <DisplayName>
usa a seguinte sintaxe:
Sintaxe
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
Exemplo
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
O elemento <DisplayName>
não tem atributos ou elementos filhos.
<IgnoreUnresolvedVariables>
Determina se o processamento é interrompido quando uma variável não resolvida é encontrada.
Valor padrão | Falso |
Obrigatório? | Opcional |
Tipo | Booleano |
Elemento pai |
<AssignMessage>
|
Elemento filho | Nenhum |
Defina como true
para ignorar variáveis não resolvidas e continuar o processamento. Caso contrário,
utilize false
. O valor padrão é false
.
Definir <IgnoreUnresolvedVariables>
como true
é diferente de configurar o
continueOnError
do <AssignMessage>
para true
, já que é específico para
configuração e recebimento de valores de variáveis. Se você definir continueOnError
como
true
, o Edge ignorará todos os erros, não apenas os encontrados ao usar
variáveis.
O elemento <IgnoreUnresolvedVariables>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables> </AssignMessage>
Exemplo 1
O exemplo a seguir define <IgnoreUnresolvedVariables>
como "true":
<AssignMessage name="ignoreunresolvedvariables"> <Copy source="response"> ... <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </Copy> </AssignMessage>
<Remove>
Remove cabeçalhos, parâmetros de consulta, parâmetros de formulário e/ou o payload
da mensagem. A mensagem pode ser uma solicitação ou uma resposta. Você especifica em que mensagem <Remove>
atua usando o elemento <AssignTo>
.
Valor padrão | n/a |
Obrigatório? | Opcional |
Tipo | Tipo complexo |
Elemento pai |
<AssignMessage>
|
Elemento filho |
<FormParams> <Headers> <Payload> <QueryParams> |
Um caso de uso comum de <Remove>
é excluir um parâmetro de consulta com informações confidenciais
do objeto de solicitação recebida para evitar transmiti-lo ao servidor de back-end.
O elemento <Remove>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Remove> </AssignMessage>
Exemplo 1
O exemplo a seguir remove o corpo da mensagem da resposta:
<AssignMessage continueOnError="false" enabled="true" name="remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
No fluxo de resposta, essa política remove o corpo da resposta, retornando apenas cabeçalhos HTTP para o cliente.
Exemplo 2
O exemplo a seguir remove todos os parâmetros de formulário e um parâmetro de consulta da solicitação recebida:
<AssignMessage continueOnError="false" enabled="true" name="remove-2"> <Remove> <!-- Empty (<FormParams/>) removes all form parameters --> <FormParams/> <QueryParams> <QueryParam name="qp1"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
<FormParams>
(filho de <Remove>
)
Remove os parâmetros de formulário especificados da solicitação. Esse elemento não afeta respostas.
Valor padrão | n/a |
Obrigatório? | Opcional |
Tipo | Matriz de elementos <FormParam> ou uma matriz vazia |
Elemento pai |
<Remove>
|
Elemento filho |
<FormParam> |
O elemento <FormParams>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> </Remove> </AssignMessage>
Exemplo 1
O exemplo a seguir remove três parâmetros do formulário da solicitação:
<AssignMessage name="remove-formparams-1"> <Remove> <FormParams> <FormParam name="form_param_1"/> <FormParam name="form_param_2"/> <FormParam name="form_param_3"/> </FormParams> </Remove> <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/> </AssignMessage>
Exemplo 2
O exemplo a seguir remove todos os parâmetros de formulário da solicitação:
<AssignMessage name="remove-formparams-2"> <Remove> <FormParams/> </Remove> <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/> </AssignMessage>
Exemplo 3
Se houver vários parâmetros do formulário com o mesmo nome, use a seguinte sintaxe:
<AssignMessage name="remove-formparams-3"> <Remove> <FormParams> <FormParam name="f1"/> <FormParam name="f2"/> <FormParam name="f3.2"/> </FormParams> </Remove> <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/> </AssignMessage>
Este exemplo remove "f1", "f2" e o segundo valor de "f3". Se "f3" tiver apenas um valor, ele não é removido.
Use <FormParams>
somente quando os seguintes critérios forem atendidos:
- Tipo de mensagem: solicitação
Content-Type
: "application/x-www-form-urlencoded"
<Headers>
(filho de <Remove>
)
Remove os cabeçalhos HTTP especificados da solicitação ou resposta, conforme especificado pelo
elemento <AssignTo>
.
Valor padrão | n/a |
Obrigatório? | Opcional |
Tipo | Matriz de elementos <Header> ou uma matriz vazia |
Elemento pai |
<Remove>
|
Elemento filho |
<Header> |
O elemento <Headers>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Remove> </AssignMessage>
Exemplo 1
O exemplo a seguir remove o cabeçalho user-agent
da solicitação:
<AssignMessage name="remove-headers-1"> <Remove> <Headers> <Header name="user-agent"/> </Headers> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Exemplo 2
O exemplo a seguir remove todos os cabeçalhos da solicitação:
<AssignMessage name="remove-headers-2"> <Remove> <Headers/> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Exemplo 3
Se houver vários cabeçalhos com o mesmo nome, use a seguinte sintaxe:
<AssignMessage name="remove-headers-3"> <Remove> <Headers> <Header name="h1"/> <Header name="h2"/> <Header name="h3.2"/> </Headers> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Este exemplo remove "h1", "h2" e o segundo valor de "h3" da solicitação. Se "h3" tiver apenas um valor, ele não será removido.
<Payload>
(filho de <Remove>
)
Determina se <Remove>
exclui o payload na solicitação ou na resposta, conforme
especificado pelo elemento <AssignTo>
. Defina como "true" para
apagar o payload. Caso contrário, defina como "false". O valor padrão é "false".
Valor padrão | Falso |
Obrigatório? | Opcional |
Tipo | Booleano |
Elemento pai |
<Remove>
|
Elemento filho | Nenhuma |
O elemento <Payload>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <Payload>[false|true]</Payload> </Remove> </AssignMessage>
Exemplo 1
O exemplo a seguir define <Payload>
como "true" para que o payload da solicitação seja
apagado:
<AssignMessage name="remove-payload-1"> <Remove> <Payload>true</Payload> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
<QueryParams>
(filho de <Remove>
)
Remove os parâmetros de consulta especificados da solicitação. Esse elemento não afeta respostas.
Valor padrão | n/a |
Obrigatório? | Opcional |
Tipo | Matriz de elementos <QueryParam> ou uma matriz vazia |
Elemento pai |
<Remove>
|
Elemento filho |
<QueryParam> |
O elemento <QueryParams>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Remove> </AssignMessage>
Exemplo 1
O exemplo a seguir remove um único parâmetro de consulta da solicitação:
<AssignMessage name="remove-queryparams-1"> <Remove> <QueryParams> <QueryParam name="qp1"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Exemplo 2
O exemplo a seguir remove todos os parâmetros de consulta da solicitação:
<AssignMessage name="remove-queryparams-2"> <Remove> <QueryParams/> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Exemplo 3
Se houver vários parâmetros de consulta com o mesmo nome, use a seguinte sintaxe:
<AssignMessage name="remove-queryparams-3"> <Remove> <QueryParams> <QueryParam name="qp1"/> <QueryParam name="qp2"/> <QueryParam name="qp3.2"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Este exemplo remove "qp1", "qp2" e o segundo valor de "qp3" da solicitação. Se "qp3" tiver apenas um valor, ele não será removido.
Exemplo 4
O exemplo a seguir remove o parâmetro de consulta apikey
da solicitação:
<AssignMessage name="remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Use <QueryParams>
somente quando os seguintes critérios forem atendidos:
- Verbo HTTP: GET
- Tipo de mensagem: solicitação
<Set>
Define informações na mensagem de solicitação ou resposta especificada pelo
elemento <AssignTo>
. O <Set>
substitui cabeçalhos ou parâmetros que já existem na mensagem
original. Para criar um novo cabeçalho ou parâmetro, use
o elemento <Add>
.
Valor padrão | n/a |
Obrigatório? | Opcional |
Tipo | Tipo complexo |
Elemento pai |
<AssignMessage>
|
Elemento filho |
<FormParams> <Headers> <Payload> <Path> <QueryParams> <ReasonPhrase> <StatusCode> <Verb> <Version> |
O elemento <Set>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Path>path</Path> <Payload contentType="content_type" variablePrefix="prefix" variableSuffix="suffix">new_payload</Payload> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> <StatusCode>HTTP_status_code or {variable}</StatusCode> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
Exemplo 1
O exemplo a seguir mostra o elemento <Set>
:
<AssignMessage continueOnError="false" enabled="true" name="set-1"> <Set> <FormParams> <FormParam name="myparam">{request.header.myparam}</FormParam> </FormParams> <Headers> <Header name="user-agent">{request.header.user-agent}</Header> </Headers> <QueryParams> <QueryParam name="name">{request.header.name}</QueryParam> <QueryParam name="address">{request.header.address}</QueryParam> </QueryParams> <!-- <Verb>GET</Verb> --> <Payload contentType="text/plain">42</Payload> <Path/> <ReasonPhrase>Bad request</ReasonPhrase> <StatusCode>400</StatusCode> <Verb>POST</Verb> <Verb>{my_variable}</Verb> <Version>1.1</Version> </Set> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
<FormParams>
(filho de <Set>
)
Substitui os parâmetros de formulário atuais em uma solicitação e os substitui pelos novos valores especificados com este elemento. Esse elemento não afeta respostas.
Valor padrão | n/a |
Obrigatório? | Opcional |
Tipo | Matriz de elementos <FormParam> |
Elemento pai |
<Set>
|
Elemento filho |
<FormParam> |
O elemento <FormParams>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> </Set> </AssignMessage>
Exemplo 1
O exemplo a seguir define um parâmetro de formulário chamado "myparam" como o valor
da variável request.header.myparam
em uma nova solicitação personalizada:
<AssignMessage name="set-formparams-1"> <Set> <FormParams> <FormParam name="myparam">{request.header.myparam}</FormParam> </FormParams> </Set> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Use <FormParams>
somente quando os seguintes critérios forem atendidos:
- Verbo HTTP: POST
- Tipo de mensagem: solicitação
Se você definir parâmetros de formulário vazios na política
(<Add><FormParams/></Add>
), a política não adicionará parâmetros
de formulário. Isso é o mesmo que omitir <FormParams>
.
<Set>
altera o Content-Type
da mensagem para
"application/x-www-form-urlencoded" antes de enviá-la para o endpoint de destino.
<Headers>
(filho de <Set>
)
Substitui os cabeçalhos HTTP atuais na solicitação ou na resposta, conforme especificado pelo
elemento <AssignTo>
.
Valor padrão | n/a |
Obrigatório? | Opcional |
Tipo | Matriz de elementos <Header> |
Elemento pai |
<Set>
|
Elemento filho |
<Header> |
O elemento <Headers>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Set> </AssignMessage>
Exemplo 1
O exemplo a seguir define o cabeçalho user-agent
como o valor da
variável request.header.user-agent
:
<AssignMessage name="set-headers-1"> <Set> <Headers> <Header name="user-agent">{request.header.user-agent}</Header> </Headers> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Se você definir cabeçalhos vazios na política
(<Add><Headers/></Add>
), a política não adicionará cabeçalhos. Isso
é o mesmo que omitir <Headers>
.
<Path>
(filho de <Set>
)
<Payload>
(filho de <Set>
)
Define o corpo da mensagem para uma solicitação ou resposta, que é especificada pelo
elemento <AssignTo>
. O payload pode ser qualquer tipo de conteúdo válido,
como texto simples, JSON ou XML.
Valor padrão | string em branco |
Obrigatório? | Opcional |
Tipo | String |
Elemento pai |
<Set>
|
Elemento filho | Nenhuma |
O elemento <Payload>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Payload contentType="content_type" variablePrefix="prefix" variableSuffix="suffix">new_payload</Payload> </Set> </AssignMessage>
Exemplo 1
O exemplo a seguir define um payload de texto simples:
<AssignMessage name="set-payload-1"> <Set> <Payload contentType="text/plain">42</Payload> </Set> </AssignMessage>
Exemplo 2
O exemplo a seguir define um payload JSON:
<AssignMessage name="set-payload-2"> <Set> <Payload contentType="application/json"> {"name":"foo", "type":"bar"} </Payload> </Set> </AssignMessage>
Exemplo 3
O exemplo a seguir insere valores de variáveis no payload colocando nomes de variáveis entre chaves:
<AssignMessage name="set-payload-3"> <Set> <Payload contentType="application/json"> {"name":"foo", "type":"{variable_name}"} </Payload> </Set> </AssignMessage>
Em versões mais antigas do Apigee Edge, por exemplo, antes da versão 16.08.17 do Cloud, era possível
não use chaves para denotar referências de variáveis em payloads JSON. Nessas versões, você
precisava usar os atributos variablePrefix
e variableSuffix
para especificar
caracteres delimitadores e usá-los para agrupar nomes de variáveis, como:
<AssignMessage name="set-payload-3b"> <Set> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> {"name":"foo", "type":"@variable_name#"} </Payload> </Set> </AssignMessage>
Essa sintaxe mais antiga ainda funciona.
Exemplo 4
O conteúdo de <Payload>
é tratado como um modelo de mensagem. Isso significa que a política
AssignMessage substitui as variáveis entre chaves pelo valor das
variáveis referenciadas no ambiente de execução.
O exemplo a seguir usa a sintaxe de chaves para definir parte do payload como um valor de variável:
<AssignMessage name="set-payload-4"> <Set> <Payload contentType="text/xml"> <root> <e1>sunday</e1> <e2>funday</e2> <e3>{var1}</e3> </root> </Payload> </Set> </AssignMessage>
A tabela a seguir descreve os atributos de <Payload>
:
Atributo | Descrição | Presença | Tipo |
---|---|---|---|
contentType |
Se especificado, o valor de |
Opcional | String |
variablePrefix |
Opcionalmente, especifica o delimitador inicial em uma variável de fluxo. O padrão é "{". Para mais informações, consulte a referência de variáveis de fluxo. | Opcional | Caracteres |
variableSuffix |
Opcionalmente, especifica o delimitador final em uma variável de fluxo. O padrão é "}". Para mais informações, consulte a referência de variáveis de fluxo. | Opcional | Caracteres |
<QueryParams>
(filho de <Set>
)
Substitui os parâmetros de consulta atuais na solicitação por novos valores. Esse elemento não tem efeito em uma resposta.
Valor padrão | n/a |
Obrigatório? | Opcional |
Tipo | Matriz de elementos <QueryParam> |
Elemento pai |
<Set>
|
Elemento filho |
<QueryParam> |
O elemento <QueryParams>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Set> </AssignMessage>
Exemplo 1
O exemplo a seguir define o parâmetro de consulta "address" como o valor da
variável request.header.address
:
<AssignMessage continueOnError="false" enabled="true" name="set-queryparams-1"> <Set> <QueryParams> <QueryParam name="address">{request.header.address}</QueryParam> </QueryParams> </Set> </AssignMessage>
Use <QueryParams>
somente quando os seguintes critérios forem atendidos:
- Verbo HTTP: GET
- Tipo de mensagem: solicitação
Se você definir parâmetros de consulta vazios na política
(<Set><QueryParams/></Set>
), a política não adicionará parâmetros de consulta. Isso é o mesmo que omitir <QueryParams>
.
<ReasonPhrase>
(filho de <Set>
)
Define a frase de razão na resposta. Isso normalmente é feito para depuração em combinação com
<StatusCode>
. Esse elemento não afeta solicitações.
Valor padrão | n/a |
Obrigatório? | Opcional |
Tipo | String |
Elemento pai |
<Set>
|
Elemento filho | Nenhuma |
O elemento <ReasonPhrase>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> </Set> </AssignMessage>
Exemplo 1
O exemplo a seguir define uma frase de razão simples:
<AssignMessage name="set-reasonphrase-1"> <Set> <ReasonPhrase>Bad medicine</ReasonPhrase> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Exemplo 2
O conteúdo de <ReasonPhrase>
é tratado como um modelo de mensagem. Isso significa
que um nome de variável entre chaves será substituído no ambiente de execução pelo valor da variável
referenciada, como mostrado no exemplo a seguir:
<AssignMessage name="set-reasonphrase-2"> <Set> <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Use <ReasonPhrase>
somente quando os seguintes critérios forem atendidos:
- Tipo de mensagem: resposta
<StatusCode>
(filho de <Set>
)
Define o código de status da resposta. Esse elemento não afeta solicitações.
Valor padrão | '200' (quando o atributo createNew de <AssignTo>
for definido como 'true') |
Obrigatório? | Opcional |
Tipo | String ou variable |
Elemento pai |
<Set>
|
Elemento filho | Nenhuma |
O elemento <StatusCode>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <StatusCode>HTTP_status_code or {variable}</StatusCode> </Set> </AssignMessage>
Exemplo 1
O exemplo a seguir define um código de status simples:
<AssignMessage name="set-statuscode-1"> <Set> <StatusCode>404</StatusCode> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Exemplo 2
O conteúdo de <StatusCode>
é tratado como um modelo de mensagem. Isso significa
que um nome de variável entre chaves será substituído no ambiente de execução pelo valor da variável
referenciada, como mostrado no exemplo a seguir:
<AssignMessage name="set-statuscode-2"> <Set> <StatusCode>{calloutresponse.status.code}</StatusCode> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Use <StatusCode>
somente quando os seguintes critérios forem atendidos:
- Tipo de mensagem: resposta
<Verb>
(filho de <Set>
)
Define o verbo HTTP na solicitação. Esse elemento não afeta respostas.
Valor padrão | n/a |
Obrigatório? | Opcional |
Tipo | String ou variable |
Elemento pai |
<Set>
|
Elemento filho | Nenhuma |
O elemento <Verb>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> </Set> </AssignMessage>
Exemplo 1
No exemplo a seguir, definimos um verbo simples na solicitação:
<AssignMessage name="set-verb-1"> <Set> <Verb>POST</Verb> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Exemplo 2
O conteúdo de <Verb>
é tratado como um modelo de mensagem. Isso significa que um nome de variável
entre chaves será substituído no ambiente de execução pelo valor da variável
referenciada.
O exemplo a seguir usa uma variável para preencher um verbo:
<AssignMessage name="set-verb-2"> <Set> <Verb>{my_variable}</Verb> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Use <Verb>
somente quando os seguintes critérios forem atendidos:
- Tipo de mensagem: solicitação
<Version>
(filho de <Set>
)
Define a versão HTTP em uma solicitação. Esse elemento não afeta respostas.
Valor padrão | n/a |
Obrigatório? | Opcional |
Tipo | String ou variable |
Elemento pai |
<Set>
|
Elemento filho | Nenhuma |
O elemento <Version>
usa a seguinte sintaxe:
Sintaxe
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
Exemplo 1
O exemplo a seguir define o número da versão como "1.1":
<AssignMessage name="set-version-1"> <Set> <Version>1.1</Version> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Exemplo 2
O exemplo a seguir usa uma variável entre chaves para definir o número da versão:
<AssignMessage name="set-version-2"> <Set> <Version>{my_version}</Version> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
O conteúdo de <Version>
é tratado como um modelo de mensagem. Isso significa que
um nome de variável entre chaves será substituído no ambiente de execução pelo valor da variável
referenciada.
Use <Version>
somente quando os seguintes critérios forem atendidos:
- Tipo de mensagem: solicitação
Criar mensagens de solicitação personalizadas
É possível usar a políticaAssignMessage para criar uma mensagem de solicitação personalizada. Depois de criar uma solicitação personalizada, ela pode ser usada das seguintes maneiras:
- Acessar as variáveis em outras políticas
- Passar para um serviço externo
Para criar uma mensagem de solicitação personalizada, use o elemento <AssignTo>
na política AttributionMessage
política. Defina createNew
como "true" e especifique o nome da nova mensagem no corpo
do elemento, como no exemplo a seguir:
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Por padrão, o Edge não faz nada com a mensagem de solicitação personalizada. Depois de criado, o Edge continuar no fluxo com a solicitação original. Para usar a solicitação personalizada, adicione uma política, como a política ServiceCallout para o proxy que pode passar a solicitação personalizada para um serviço externo.
Os exemplos a seguir criam mensagens de solicitação personalizadas:
Exemplo 1
O exemplo a seguir cria um objeto de solicitação personalizado com "Atribuir mensagem":
<AssignMessage name="AssignMessage-3"> <AssignTo createNew="true" type="request">MyCustomRequest</AssignTo> <Copy> <Headers> <Header name="user-agent"/> </Headers> </Copy> <Set> <QueryParams> <QueryParam name="address">{request.queryparam.addy}</QueryParam> </QueryParams> <Verb>GET</Verb> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </AssignMessage>
Este exemplo:
- Cria um novo objeto de mensagem de solicitação chamado "MyCustomRequest".
- Em MyCustomRequest, esta política:
- Copia o valor do cabeçalho HTTP
user-agent
da solicitação recebida para a nova mensagem. Como<Copy>
usa uma referência absoluta à variável de fluxouser-agent
, não é necessário especificar o atributosource
como<Copy>
. - Define o parâmetro de consulta
address
na mensagem personalizada para o valor do parâmetro de consultaaddy
da solicitação recebida. - Define o verbo HTTP como
GET
.
- Copia o valor do cabeçalho HTTP
- Define
<IgnoreUnresolvedVariables>
como "false". Quando<IgnoreUnresolvedVariables>
for "false", se uma das variáveis que a política tentar adicionar não existir, o Edge interromperá o processamento no fluxo da API.
Exemplo 2
Veja outro exemplo que demonstra como criar um objeto de solicitação personalizado com "Atribuir mensagem":
<AssignMessage name="AssignMessage-2"> <AssignTo createNew="true" type="request">partner.request</AssignTo> <Set> <Verb>POST</Verb> <Payload contentType="text/xml"> <request><operation>105</operation></request> </Payload> </Set> </AssignMessage>
Este exemplo cria uma nova solicitação personalizada chamada "partner.request". Em seguida, ele define
<Verb>
e <Payload>
na nova solicitação.
É possível acessar uma mensagem de solicitação personalizada em outra política AssignMessage que ocorrer posteriormente
no fluxo. O exemplo a seguir recebe o valor do cabeçalho user-agent
da mensagem de solicitação
personalizada:
<AssignMessage name="custom-request-1-access"> <DisplayName>custom-request-1-access</DisplayName> <AssignTo createNew="false" type="request"></AssignTo> <Set> <Headers> <Header name="user-agentCopyCustomRequest">{MyCustomRequest.header.user-agent}</Header> </Headers> </Set> </AssignMessage>
Vídeos
Assista aos vídeos abaixo para saber mais sobre a política AssignMessage.
Vídeo | Descrição |
---|---|
Por que a política "Atribuir mensagem"? | Saiba mais sobre os benefícios de usar a política AssignMessage para modificar a solicitação ou a resposta da API sem modificar o código de back-end. |
Copiar elementos da API usando a política AssignMessage | Copie elementos de uma solicitação ou resposta de API e crie uma nova solicitação ou objeto de resposta usando a política AssignMessage. |
Remover elementos da API usando a política AssignMessage | Remova os elementos da API e modifique a API antes de ela atingir o back-end de destino usando a política AssignMessage. |
Adicionar e definir elementos da API usando a política AssignMessage | Altere a solicitação ou a resposta da API adicionando parâmetros de consulta, cabeçalhos, parâmetros de formulário ou payloads usando a política AssignMessage. |
Criar variáveis personalizadas usando a política AssignMessage | Defina variáveis de fluxo personalizadas usando a política AssignMessage e utilize as variáveis em outras políticas no proxy da API. |
Criar novos objetos de solicitação ou resposta usando a política AssignMessage | Crie novos objetos de solicitação ou resposta de API usando a política AssignMessage no ambiente de execução da API. |
Criar uma API de simulação usando a política AssignMessage | Crie uma API REST simples de simulação adicionando a política AssignMessage ao fluxo de resposta. |
Definir ou modificar o payload usando a política AssignMessage | Converter a solicitação REST em uma solicitação SOAP definindo o payload de SOAP usando a políticaAssignMessage política no ambiente de execução da API. |
Códigos de erro
This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.
Runtime errors
These errors can occur when the policy executes.
Fault code | HTTP status | Cause | Fix |
---|---|---|---|
steps.assignmessage.SetVariableFailed |
500 | The policy was not able to set a variable. See the fault string for the name of the unresolved variable. | |
steps.assignmessage.VariableOfNonMsgType |
500 |
This error occurs if the Message type variables represent entire HTTP requests and responses. The built-in Edge
flow variables |
build |
steps.assignmessage.UnresolvedVariable |
500 |
This error occurs if a variable specified in the Assign Message policy is either:
|
build |
Deployment errors
These errors can occur when you deploy a proxy containing this policy.
Error name | Cause | Fix |
---|---|---|
InvalidIndex |
If the index specified in the <Copy> and/or <Remove> elements of the Assign Message
policy is 0 or a negative number, then deployment of the API Proxy fails.
|
build |
InvalidVariableName |
If the child element <Name> is empty or not specified in the <AssignVariable> element,
then the deployment of the API proxy fails because there is no valid variable name to
which to assign a value. A valid variable name is required.
|
build |
InvalidPayload |
A payload specified in the policy is invalid. |
Fault variables
These variables are set when this policy triggers an error at runtime. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. | fault.name Matches "UnresolvedVariable" |
assignmessage.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | assignmessage.AM-SetResponse.failed = true |
Example error response
{ "fault":{ "detail":{ "errorcode":"steps.assignmessage.VariableOfNonMsgType" }, "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message" } }
Example fault rule
<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="Assign Message Faults"> <Step> <Name>AM-CustomNonMessageTypeErrorResponse</Name> <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition> </Step> <Step> <Name>AM-CustomSetVariableErrorResponse</Name> <Condition>(fault.name = "SetVariableFailed")</Condition> </Step> <Condition>(assignmessage.failed = true) </Condition> </FaultRule>
Esquemas
Cada tipo de política é definido por um esquema XML (.xsd
). Para referência, os esquemas de política
estão disponíveis no GitHub.
Temas relacionados
As amostras de trabalho da política AssignMessage estão disponíveis nas amostras da API Platform.
Para um exemplo mais avançado de como substituir o target.url
do
ProxyEndpoint, consulte este artigo da comunidade do Apigee.
Para ver um "caminho de definição" em ação em uma política de destaque de serviço, veja este exemplo nas amostras do GitHub do Apigee. Basta clonar o repositório e seguir as instruções nele. O exemplo usa a políticaAssignMessage para definir um caminho de solicitação, usa uma política de chamada de serviço para fazer a solicitação para um serviço externo.