Política AssignMessage

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.

This element has the following attributes that are common to all policies:

Attribute Default Required? Description
name N/A Required

The internal name of the policy. The value of the name attribute can contain letters, numbers, spaces, hyphens, underscores, and periods. This value cannot exceed 255 characters.

Optionally, use the <DisplayName> element to label the policy in the management UI proxy editor with a different, natural-language name.

continueOnError false Optional Set to "false" to return an error when a policy fails. This is expected behavior for most policies. Set to "true" to have flow execution continue even after a policy fails.
enabled true Optional Set to "true" to enforce the policy. Set to "false" to "turn off" the policy. The policy will not be enforced even if it remains attached to a flow.
async   false Deprecated This attribute is deprecated.

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>.

<Add> adiciona cabeçalhos ou parâmetros à mensagem que não existem na mensagem original. Para substituir cabeçalhos ou parâmetros atuais, use o elemento <Set>.

<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 <Set> substitui cabeçalhos ou parâmetros que já existem na mensagem original. Para adicionar novos cabeçalhos ou parâmetros, use o elemento <Add>.

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:

  1. Criar três variáveis de fluxo na solicitação, com valores estáticos
  2. Encontrar as variáveis de fluxo dinamicamente em uma segunda política no fluxo de solicitação
  3. 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:

  1. 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.
  2. Adicione a terceira política no fluxo de resposta.
  3. 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".

  4. 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 &quot;http://httpbin.org/get?myParam=42&quot;.

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, com curl adicione -H "Content-Length: 0" à solicitação.

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 &quot;application/x-www-form-urlencoded&quot; 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"&gt;MyRequestObject&lt;/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 type ( "request" ou "response"). Se você não especificar o nome da nova variável, a política criará um novo objeto de solicitação ou resposta com base no valor de type.

Se o valor for "false", a política responderá de uma destas duas maneiras:

  • Se <AssignTo> puder resolver o nome da variável para uma solicitação ou resposta, ele continuará em processamento. Por exemplo, se a política estiver em um fluxo de solicitação, a variável será o objeto de solicitação. Se a política estiver em uma resposta, a variável será o objeto de resposta.
  • Se <AssignTo> não puder ser resolvido ou se for resolvido para um tipo de mensagem, a política emitirá um erro.

Se createNew não for especificado, a política responderá de duas maneiras:

  • Se <AssignTo> for resolvido para uma mensagem, o processamento avançará para a próxima etapa.
  • Se <AssignTo> não puder ser resolvido ou se for resolvido para um tipo que não seja de mensagem, será criada uma nova variável de tipo especificada em type.
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.

  • Se source não for especificado, ele tratado como uma mensagem simples. Por exemplo, se a política estiver no fluxo de solicitações, a origem será padrão para o objeto request. Se a política estiver no fluxo de resposta, o padrão será o objeto response. Se você omitir a source, poderá usar uma referência absoluta a uma variável de fluxo como a origem da cópia. Por exemplo, especifique o valor como {request.header.user-agent}.
  • Se a variável de origem não puder ser resolvida ou se for resolvida com um tipo que não seja mensagem, <Copy> não responderá.
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, com curl adicione -H "Content-Length: 0" à solicitação.

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 in addition to the name attribute to label the policy in the management UI proxy editor with a different, more natural-sounding name.

The <DisplayName> element is common to all policies.

Default Value n/a
Required? Optional. If you omit <DisplayName>, the value of the policy's name attribute is used
Type String
Parent Element <PolicyElement>
Child Elements None

The <DisplayName> element uses the following syntax:

Syntax

<PolicyElement>
  <DisplayName>policy_display_name</DisplayName>
  ...
</PolicyElement>

Example

<PolicyElement>
  <DisplayName>My Validation Policy</DisplayName>
</PolicyElement>

The <DisplayName> element has no attributes or child elements.

<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 contentType é atribuído ao cabeçalho HTTP Content-Type.

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 fluxo user-agent, não é necessário especificar o atributo source como <Copy>.
    • Define o parâmetro de consulta address na mensagem personalizada para o valor do parâmetro de consulta addy da solicitação recebida.
    • Define o verbo HTTP como GET.
  • 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

Nesta seção, descrevemos os códigos e as mensagens de erro retornados e as variáveis de falha definidas pelo Edge quando a política aciona um erro. Essas informações são importantes para saber se você está desenvolvendo regras de falha para lidar com falhas. Para saber mais, consulte O que você precisa saber sobre erros de política e Como lidar com falhas.

Erros de execução

Esses erros podem ocorrer quando a política é executada.

Código de falha Status HTTP Causa Correção
steps.assignmessage.SetVariableFailed 500 Não foi possível definir uma variável na política. Veja a string de falha para o nome da variável não resolvida.
steps.assignmessage.VariableOfNonMsgType 500

Esse erro ocorrerá se o atributo source no elemento <Copy> estiver definido como uma variável diferente do tipo message.

As variáveis do tipo Message representam solicitações e respostas HTTP completas. As variáveis de fluxo integradas do Edge request, response e message são do tipo mensagem. Para saber mais sobre variáveis de mensagens, consulte a referência de variáveis.

steps.assignmessage.UnresolvedVariable 500

Esse erro ocorrerá se uma variável especificada na política "Atribuir mensagem":

  • estiver fora do escopo (não disponível no fluxo específico em que a política está sendo executada);
  • ou
  • não é possível resolver (não está definida)

Erros de implantação

Esses erros podem ocorrer quando você implanta um proxy que contém essa política.

Nome do erro Causa Correção
InvalidIndex Se o índice especificado nos elementos <Copy> e/ou <Remove> da política "Atribuir mensagem" for 0 ou um número negativo, a implantação do proxy da API falhará.
InvalidVariableName Se o elemento filho <Name> estiver vazio ou não for especificado no elemento <AssignVariable>, a implantação do proxy de API falhará porque não há um nome de variável válido para atribuir um valor. Um nome de variável válido é obrigatório.
InvalidPayload Um payload especificado na política é inválido.

Variáveis de falha

Essas variáveis são definidas quando essa política aciona um erro no ambiente de execução. Para mais informações, consulte O que você precisa saber sobre erros de política.

Variáveis Onde Exemplo
fault.name="fault_name" fault_name é o nome da falha, conforme listado na tabela Erros de ambiente de execução acima. O nome da falha é a última parte do código de falha. fault.name Matches "UnresolvedVariable"
assignmessage.policy_name.failed policy_name é o nome especificado pelo usuário da política que causou a falha. assignmessage.AM-SetResponse.failed = true

Exemplo de resposta de erro

{  
   "fault":{  
      "detail":{  
         "errorcode":"steps.assignmessage.VariableOfNonMsgType"
      },
      "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message"
   }
}

Exemplo de regra de falha

<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.