Política AssignMessage

Você está vendo a documentação da Apigee X.
Veja a documentação da Apigee Edge.

Ícone da política

O que é?

A política AssignMessage pode alterar uma mensagem de solicitação ou resposta existente ou criar uma nova mensagem de solicitação ou 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 payloads de mensagens
  • Definir o valor das propriedades atuais de uma mensagem

A AssignMessage também permite definir variáveis de contexto arbitrárias, independentemente de qualquer uma das operações acima que podem se aplicar a uma mensagem.

A política AssignMessage pode ser usada para adicionar, alterar ou remover propriedades da solicitação ou da resposta. Por outro lado, é possível usar a política AssignMessage para criar uma mensagem de resposta ou solicitação personalizada e transmiti-la para um destino alternativo, conforme descrito em Criar 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>
    <PropertySetRef>SOURCE_VARIABLE</PropertySetRef>
    <Ref>SOURCE_VARIABLE</Ref>
    <ResourceURL>RESOURCE_URL_OR_TEMPLATE</ResourceURL>
    <Template>MESSAGE_TEMPLATE</Template>
    or
    <Template ref='TEMPLATE_VARIABLE'></Template>
    <Value>VARIABLE_VALUE</Value>
  </AssignVariable>

  <Copy source="VARIABLE_NAME">
    <!-- 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ítica AssignMessage ao fluxo na IU do Apigee:

<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ítica AssignMessage na IU do Apigee, o modelo contém stubs para todas as operações possíveis. Normalmente, você seleciona quais operações quer executar com essa política e remove o restante dos elementos filhos. Por exemplo, se você quiser executar uma operação de cópia, use o elemento <Copy> e remova <Add>, <Remove> e outros elementos filhos da política para torná-la mais legível.

Este elemento tem os seguintes atributos comuns a todas as políticas:

Atributo Padrão Obrigatório? Descrição
name N/A Valor

O nome interno da política. O valor do atributo name pode conter letras, números, espaços, hifens, sublinhados e pontos. Esse valor não pode exceder 255 caracteres.

Opcionalmente, use o elemento <DisplayName> para rotular a política no editor de proxy da IU de gerenciamento com um nome de linguagem natural diferente.

continueOnError falso Opcional Defina como false para retornar um erro quando uma política falhar. Esse é o comportamento esperado para a maioria das políticas. Defina como true para que a execução do fluxo continue, mesmo depois que uma política falhar.
enabled true Opcional Defina como true para aplicar a política. Defina como false para desativar a política. A política não será aplicada mesmo que permaneça vinculada a um fluxo.
async   falso Obsoleto Esse atributo está obsoleto.

A tabela a seguir fornece uma descrição de alto nível dos elementos filhos de <AssignMessage>:

Elemento filho Obrigatório? Descrição
Operações comuns
<Add> Opcional Adiciona informações ao objeto de mensagem especificado pelo elemento <AssignTo>.

<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ítica AssignMessage:

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. 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 política AssignMessage 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.

Você também pode 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 quando você usar a política VerifyAPIKey para autenticar o usuário. Faça isso para evitar que informações confidenciais da chave sejam transmitidas ao destino do back-end.

6: Definir/encontrar variáveis

O exemplo a seguir mostra três usos de políticas AssignMessage:

  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 a 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 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. No exemplo a seguir, é criado 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 para o proxy da API. por exemplo:
    curl -vL https://ahamilton-eval-test.apigee.net/myproxy

    Como opção, é possível canalizar os resultados por 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 ServiceCallout

No exemplo a seguir, digamos que uma política ServiceCallout esteja na solicitação de proxy de API e que 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 a calloutResponse padrão, a política a seguir mostrará o segundo valor de 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ê observar os resultados em uma ferramenta como a Visão geral do Debug, a solicitação para http://httpbin.org/get se tornará http://httpbin.org/get?myParam=42.

Os elementos filhos de <Add> são compatíveis com a substituição dinâmica de strings, conhecida como modelos de mensagens.

<FormParams> (filho de <Add>)

Adiciona novos parâmetros de formulário à mensagem de solicitação. Esse elemento não afeta mensagens de resposta.

Valor padrão N/A
Obrigatório? Opcional
Tipo Matriz de elementos <FormParam>
Elemento pai <Add>
Elemento filho <FormParam>

O elemento <FormParams> usa a seguinte sintaxe:

Sintaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Add>
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">DESTINATION_VARIABLE_NAME</AssignTo>
  </Add>
</AssignMessage>

Exemplo 1

O exemplo a seguir adiciona um único parâmetro de formulário (answer) e um valor estático (42) à solicitação:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-1">
  <Add>
    <FormParams>
      <FormParam name="answer">42</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"></AssignTo>
</AssignMessage>

Exemplo 2

O exemplo a seguir encontra o valor do parâmetro de string de consulta name e o adiciona à solicitação como um parâmetro de formulário:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-2">
  <Add>
    <FormParam name="name">{request.queryparam.name}</FormParam>
  </Add>
</AssignMessage>

Este exemplo não especifica um destino com <AssignTo>. Essa política adiciona o parâmetro somente à solicitação.

Exemplo 3

O exemplo a seguir adiciona vários parâmetros de formulário à solicitação:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="name">{request.queryparam.name}</FormParam>
      <FormParam name="zip">{request.queryparam.zipCode}</FormParam>
      <FormParam name="lang">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"/>
</AssignMessage>

Este exemplo recebe os parâmetros da string de consulta da solicitação de origem e os adiciona como parâmetros do formulário à solicitação enviada ao endpoint de destino.

É possível usar a Visão geral de depuração para examinar 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>, a Apigee define o cabeçalho Content-Type da solicitação como application/x-www-form-urlencoded antes de enviar a mensagem para o 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 ele:

<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 não especifica nenhuma mensagem no texto de <AssignTo>. Isso significa que a política atuará na mensagem request ou response, dependendo de onde a política for executada.

<AssignMessage name="assignto-1">
  <AssignTo createNew="false" transport="http" type="request"/> <!-- no-op -->
  ...
</AssignMessage>

Se você especificar createNew="false" e não fornecer explicitamente um nome de mensagem, os outros atributos de <AssignTo> serão irrelevantes. Nesse caso, talvez seja bom omitir o elemento <AssignTo> completamente.

Exemplo 2

O exemplo a seguir cria um novo objeto de solicitação, substituindo o objeto existente:

<AssignMessage name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request"/>
  ...
</AssignMessage>

Ao criar um novo objeto de solicitação ou resposta, os outros elementos da política AssignMessage (como <Add>, <Set> e <Copy>) atuarão nesse novo objeto de solicitação.

É possível acessar o novo objeto de solicitação em outras políticas do fluxo posteriormente ou enviar o novo objeto de solicitação para um serviço externo com uma política ServiceCallout.

Exemplo 3

O exemplo a seguir cria um novo objeto de solicitação chamado MyRequestObject:

<AssignMessage name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo>
  ...
</AssignMessage>

Ao criar um novo objeto de solicitação ou resposta, os outros elementos da política AssignMessage (como <Add>, <Set> e <Copy>) atuarão nesse novo 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á uma nova solicitação ou um objeto de resposta com base no valor de type.

Se 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 compatível).

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 Apigee criará uma solicitação ou uma resposta, dependendo de onde a política for executada.

Opcional String

<AssignVariable>

Atribui um valor a uma variável de fluxo de destino (como uma variável com valor definido pela política AssignMessage). Se a variável de fluxo não existir, <AssignVariable> será criada por ela. É possível usar vários elementos AssignVariable na política AssignMessage. Eles são executados em ordem de aparência na configuração da política.

Valor padrão N/A
Obrigatório? Opcional
Tipo Tipo complexo
Elemento pai <AssignMessage>
Elemento filho <Name> (obrigatório)
<PropertySetRef>
<Ref>
<ResourceURL>
<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.
  • Propriedade definida: use o elemento filho <PropertySetRef> para recuperar o valor de um par nome/chave de conjunto de propriedades e armazená-lo em uma variável de fluxo. Permite acessar conjuntos de propriedades dinamicamente.
  • URL do recurso: use o elemento filho <ResourceURL> para especificar um URL para um recurso de texto, do tipo XSL, XSD, WSDL, JavaScript ou Especificação OpenAPI. Isso atribui o conteúdo do recurso à variável de fluxo nomeada.
  • Modelo de mensagem: use o elemento filho <Template> para especificar um modelo de mensagem para a variável de fluxo de destino.

A ordem de precedência desses elementos filhos é: ResourceURL, Template, Ref, Value, PropertySetRef.

O elemento <AssignVariable> usa a seguinte sintaxe:

Sintaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <AssignVariable>
    <Name>VARIABLE_NAME</Name>
    <PropertySetRef>SOURCE_VARIABLE</PropertySetRef>
    <Ref>SOURCE_VARIABLE</Ref>
    <ResourceURL>RESOURCE_URL_OR_TEMPLATE</ResourceURL>
    <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 a variável referenciada por <Ref> não estiver acessível, a Apigee usará o valor especificado pelo elemento <Value>. Se você definir <Template>, ele terá precedência sobre os elementos irmãos <Ref> e <Value>.

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 qualquer atribuição falhar, a Apigee atribuirá o valor ErrorOnCopy à 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>

Exemplo 4

O exemplo a seguir usa <AssignVariable> para desativar o comportamento padrão de propagação do sufixo de caminho da solicitação do proxy para a solicitação de destino:

<AssignMessage name='AM-PathSuffixFalse'>
  <AssignVariable>
    <Name>target.copy.pathsuffix</Name>
    <Value>false</Value>
  </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 (como a variável com valor definido pela política AssignMessage). Se a variável nomeada em <Name> 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 Nenhum

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

<PropertySetRef> (filho de <AssignVariable>)

Esse elemento permite recuperar o valor de um par nome/chave de conjunto de propriedades dinamicamente. Para saber mais sobre os conjuntos de propriedades, consulte Como usar conjuntos de propriedades.

Valor padrão N/A
Obrigatório? Opcional
Tipo String
Elemento pai <AssignVariable>
Elemento filho Nenhum

Um conjunto de propriedades é composto por um par de nome/chave. Por exemplo: propset1.id=12345, em que propset1 é o nome do conjunto de propriedades, id é uma chave e 12345 é o valor da chave.

O elemento filho PropertySetRef permite selecionar nomes e/ou chaves do conjunto de propriedades de forma dinâmica. Suponha que você tenha 200 regras de roteamento em um arquivo de conjunto de propriedades. É possível acessar as regras do conjunto de propriedades da seguinte maneira, em que routingrules é o nome do conjunto de propriedades e rule1, rule2, rulen são chaves:

propertyset.routingrules.rule1
propertyset.routingrules.rule2
propertyset.routingrules.rulen

Para acessar essas propriedades em um fluxo de proxy da API, é necessário saber qual regra você quer selecionar no momento do projeto. No entanto, suponha que o nome da regra esteja no cabeçalho da solicitação ou no payload. Uma maneira de selecionar a regra é usar uma política JavaScript com código como o seguinte:

context.getVariables("propertyset.routingrules." + ruleName); //assuming ruleName was populated earlier.

Por outro lado, com o recurso PropertySetRef AssignMessage, você seleciona uma chave de propriedade dinamicamente sem introduzir o JavaScript.

É possível usar uma combinação de variáveis de fluxo e valores de string literal no elemento <PropertySetRef>. Veja os exemplos para mais detalhes.

O elemento <PropertySetRef> usa a seguinte sintaxe:

Sintaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <AssignVariable>
    <PropertySetRef>SOURCE_VARIABLE</PropertySetRef>
  </AssignVariable>
</AssignMessage>

Exemplo 1

Este exemplo atribui o valor de uma chave de conjunto de propriedades em uma variável de fluxo. Neste caso, o nome do conjunto de propriedades é obtido no cabeçalhopropset_name, a chave será fornecida no cabeçalho propset_key e o valor atribuído à chave será armazenado na variável flow_variable.

<AssignMessage async="false" continueOnError="false" enabled="true" name="assignMessage">
  <DisplayName>Assign Message-1</DisplayName>
  <Properties/>
  <AssignVariable>
    <Name>flow_variable</Name>
    <PropertySetRef>{request.header.propset_name}.{request.header.propset_key}</PropertySetRef>
  </AssignVariable>
</AssignMessage>

Qualquer combinação de variáveis de fluxo e strings literais pode ser usada no elemento <PropertySetRef>.

Exemplo 2

Este exemplo atribui o valor de uma chave de conjunto de propriedades para uma variável de fluxo usando um nome de chave fixo (string literal). Nesse caso, o nome do conjunto de propriedades é obtido no cabeçalho propset_name, a chave é a string literal key1 e o valor atribuído à chave é armazenado na variável flow_variable.

<AssignMessage async="false" continueOnError="false" enabled="true" name="assignMessage">
  <DisplayName>Assign Message-1</DisplayName>
  <Properties/>
  <AssignVariable>
    <Name>flow_variable</Name>
    <PropertySetRef>{request.header.propset_name}.key1</PropertySetRef>
  </AssignVariable>
</AssignMessage>

Qualquer combinação de variáveis de fluxo e strings literais pode ser usada no elemento <PropertySetRef>.

<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 specify the variable name without brackets:
  <Ref>client.host</Ref>

  DO NOT use 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 por <Ref> não existir, não puder ser lida ou for nula, o Apigee atribuirá 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 Apigee não tem um valor padrão (ou substituto) especificado para nenhuma 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 do parâmetro de consulta Country forem nulos, ilegíveis ou malformados, o Apigee 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 de API de clima 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 usará 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.

O valor de <Ref> precisa ser uma variável de fluxo, como uma propriedade de request, response ou target ou o nome de uma variável de fluxo personalizada.

Se você especificar uma variável de fluxo que não existe para o valor de <Ref> e o valor de <IgnoreUnresolvedVariables> é false, a Apigee gera um erro.

<ResourceURL> (filho de <AssignVariable>)

Especifica o URL de um recurso de texto como a origem da atribuição da variável. A Apigee carrega a variável de fluxo especificada em <Name> com o conteúdo do recurso referenciado. O recurso pode ser do tipo XSD, XSL, WSDL, JavaScript, conjunto de propriedades ou OpenAPI Spec.

Valor padrão N/A
Obrigatório? Opcional
Tipo String
Elemento pai <AssignVariable>
Elemento filho Nenhum

Se o recurso especificado por <ResourceURL> não existir, então: se o valor de <IgnoreUnresolvedVariables> for true, a Apigee atribuirá o valor null à variável de fluxo de destino, mas se o valor de <IgnoreUnresolvedVariables> for false, a Apigee gerará um erro.

O elemento <ResourceURL> usa a seguinte sintaxe:

Sintaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <AssignVariable>
    <Name>VARIABLE_NAME</Name>
    <ResourceURL>RESOURCE_URL_OR_TEMPLATE</ResourceURL>
  </AssignVariable>
</AssignMessage>
      

O valor de texto usa um valor de string e é interpretado como um modelo de mensagem. Qualquer um destes é válido:

<ResourceURL>jsc://my-js-file.js</ResourceURL>
<ResourceURL>wsdl://{variable-goes-here}</ResourceURL>
<ResourceURL>{variable-goes-here}</ResourceURL>

Exemplo 1

O exemplo a seguir atribui o valor de um recurso JSON, carregado no proxy na pasta jsc, na variável de fluxo assigned-variable:

<AssignMessage name='AM-From-ResourceURL-Proxy-JSC'>
  <AssignVariable>
    <Name>assigned-variable</Name>
    <ResourceURL>jsc://settings.json</ResourceURL>
  </AssignVariable>
</AssignMessage>

Exemplo 2

O exemplo a seguir atribui o valor de um recurso OpenAPI Spec, carregado no proxy na pasta oas, na variável de fluxo assigned-variable e, em seguida, define esse valor como Payload. no corpo da resposta:

<AssignMessage name='AM-Response'>
  <AssignVariable>
    <Name>assigned-variable</Name>
    <ResourceURL>oas://Fulfillment.yaml</ResourceURL>
  </AssignVariable>
  <Set>
    <Payload contentType='application/yaml'>{assigned-variable}</Payload>
  </Set>
</AssignMessage>

<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, é possível armazenar um modelo de mensagem como um atributo personalizado em um app de desenvolvedor. Quando o Apigee identifica o app de desenvolvedor após verificar a chave de API ou o token de segurança (por meio de uma política extra), o elemento <AssignVariable> pode usar o modelo de mensagem do atributo personalizado do app, 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:

<Template ref='verifyapikey.myVerifyAPIKeyPolicy.app.name.message_template'/>

Valor padrão N/A
Obrigatório? Opcional
Tipo String
Elemento pai <AssignVariable>
Elemento filho Nenhum

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 override, em que, em alguns casos, você quer substituir o modelo padrão (a parte de texto) pelos 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 do 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 atribuição falhar, <AssignVariable> atribui 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="VARIABLE_NAME">
    <!-- 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
source

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 especificada no atributo source não puder ser resolvida ou resolvida para um tipo não mensagem, <Copy> não terá efeito.
  • Verifique se o valor especificado para source é diferente da mensagem de destino, seja a mensagem de destino padrão ou um destino especificado explicitamente com <AssignTo>. Se o source for igual à mensagem de destino, <Copy> não terá efeito.
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="VARIABLE_NAME">
    <!-- 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 de 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 será 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>, <Copy> define Content-Type da mensagem como application/x-www-form-urlencoded antes de enviar a mensagem para o 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="VARIABLE_NAME">
    <!-- 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 será 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.

Setrue, essa política copia o caminhode a mensagem de solicitação especificada pelo <Copy> do elementosource atributoà a mensagem de solicitação especificada pelo<AssignTo>.

Valor padrão Falso
Obrigatório? Opcional
Tipo Booleanos
Elemento pai <Copy>
Elemento filho Nenhum

O elemento <Path> usa a seguinte sintaxe:

Sintaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Copy source="VARIABLE_NAME">
    <Path>[false|true]</Path>
  </Copy>
</AssignMessage>

Exemplo 1

O exemplo a seguir indica que AssignMessage precisa copiar o caminho da solicitação de 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 true, essa política copia o payload de a mensagem especificada pelo atributo source do elemento <Copy> para a mensagem especificada pelo elemento <AssignTo>.

Valor padrão Falso
Obrigatório? Opcional
Tipo Booleanos
Elemento pai <Copy>
Elemento filho Nenhum

O elemento <Payload> usa a seguinte sintaxe:

Sintaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Copy source="VARIABLE_NAME">
    <Payload>[false|true]</Payload>
  </Copy>
</AssignMessage>

Exemplo 1

O exemplo a seguir define <Payload> como true para que o payload de 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 Nenhum

O elemento <QueryParams> usa a seguinte sintaxe:

Sintaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Copy source="VARIABLE_NAME">
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Copy>
</AssignMessage>

Exemplo 1

No exemplo a seguir, copiamos 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 será 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 true, essa política copia o 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 Booleanos
Elemento pai <Copy>
Elemento filho Nenhum

O elemento <ReasonPhrase> usa a seguinte sintaxe:

Sintaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Copy source="VARIABLE_NAME">
    <ReasonPhrase>[false|true]</ReasonPhrase>
  </Copy>
</AssignMessage>

Exemplo 1

O exemplo a seguir define <ReasonPhrase> como true, o que faz com que <Copy> copie a frase de motivo 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.

Setrue, essa política copia o código de statusde a mensagem de resposta especificada pelo atributo source do elemento <Copy> à a mensagem de resposta especificada pelo<AssignTo>.

Valor padrão Falso
Obrigatório? Opcional
Tipo Booleanos
Elemento pai <Copy>
Elemento filho Nenhum

O elemento <StatusCode> usa a seguinte sintaxe:

Sintaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Copy source="VARIABLE_NAME">
    <StatusCode>[false|true]</StatusCode>
  </Copy>
</AssignMessage>

Exemplo 1

No exemplo a seguir, definimos <StatusCode> como true, que copia o código de status do objeto de resposta padrão para um novo objeto de resposta personalizado:

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

<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 Booleanos
Elemento pai <Copy>
Elemento filho Nenhum

O elemento <Verb> usa a seguinte sintaxe:

Sintaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Copy source="VARIABLE_NAME">
    <Verb>[false|true]</Verb>
  </Copy>
</AssignMessage>

Exemplo 1

No exemplo a seguir, definimos <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 Booleanos
Elemento pai <Copy>
Elemento filho Nenhum

O elemento <Version> usa a seguinte sintaxe:

Sintaxe

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Copy source="VARIABLE_NAME">
    <Version>[false|true]</Version>
  </Copy>
</AssignMessage>

Exemplo 1

No exemplo a seguir, definimos <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 personalizado:

<AssignMessage name="copy-version-1">
  <Copy source="request">
    <Version>true</Version>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Use <Version> somente quando os seguintes critérios forem atendidos:

  • Tipo de mensagem: solicitação

<DisplayName>

Use além do atributo name para rotular a política no editor de proxy da IU de gerenciamento com um nome de som diferente e mais natural.

O elemento <DisplayName> é comum a todas as políticas.

Valor padrão N/A
Obrigatório? Opcional. Se você omitir <DisplayName>, o valor do atributo name da política será usado
Tipo String
Elemento pai <PolicyElement>
Elemento filho Nenhum

O elemento <DisplayName> usa a seguinte sintaxe:

Sintaxe

<PolicyElement>
  <DisplayName>POLICY_DISPLAY_NAME</DisplayName>
  ...
</PolicyElement>

Exemplo

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

O elemento <DisplayName> não tem atributos ou elementos filhos.

<IgnoreUnresolvedVariables>

Determina se o processamento é interrompido quando uma variável não resolvida é encontrada.

Valor padrão True
Obrigatório? Opcional
Tipo Booleanos
Elemento pai <AssignMessage>
Elemento filho Nenhum

Defina como true para ignorar variáveis não resolvidas e continuar o processamento. Caso contrário, false. O valor padrão é true.

Definir <IgnoreUnresolvedVariables> como true"true" é diferente de definir o continueOnError de <AssignMessage> como true porque ele é específico para definir e receber valores de variáveis. Se você definir continueOnError como true, a Apigee ignorará todos os erros, não apenas os erros 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 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 será 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 limpar o payload. Caso contrário, false. O valor padrão é false.

Valor padrão Falso
Obrigatório? Opcional
Tipo Booleanos
Elemento pai <Remove>
Elemento filho Nenhum

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

No exemplo a seguir, <Payload> é definido 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>