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 name="AM-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>
</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. 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 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>