En el siguiente ejemplo, se usan tres políticas de asignación de mensajes:

  1. Crea tres variables de flujo en la solicitud, con valores estáticos.
  2. Obtiene las variables de flujo de forma dinámica en una segunda política en el flujo de solicitudes.
  3. Los establece en la carga útil de la respuesta.
<!-- 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>

En la primera política, el elemento <AssignVariable> crea y establece tres variables en la solicitud. Cada elemento <Name> especifica un nombre de variable, y <Value> especifica el valor.

La segunda política usa el elemento <AssignVariable> para leer los valores y crea tres variables nuevas:

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

En la segunda política, el elemento <Ref> hace referencia a la variable de origen y los elementos <Name> especifican los nombres de las variables nuevas. Si la variable a la que hace referencia el elemento <Ref> no es accesible, puedes usar el valor especificado por el elemento <Value>.

Para probar este conjunto de políticas, haga lo siguiente:

  1. Agrega las políticas número 1 y 2 al flujo de solicitud. Asegúrate de poner la política número 1 antes de la política número 2.
  2. Agrega la tercera política en el flujo de respuesta.
  3. La tercera política usa el elemento <Set> para agregar las variables a la respuesta. En el siguiente ejemplo, se construye una carga útil XML en la respuesta que el perímetro muestra al 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>

    Ten en cuenta que la sintaxis para acceder a las variables de flujo en <Set> es colocarlas entre llaves.

    Asegúrate de configurar el atributo contentType del elemento <Payload> como "application/xml".

  4. Envía una solicitud a tu proxy de API. Por ejemplo:
    curl -vL https://ahamilton-eval-test.apigee.net/myproxy

    De manera opcional, puedes canalizar los resultados a través de una utilidad como xmllint, de modo que el XML se muestre en una estructura con formato adecuado:

    curl -vL https://ahamilton-eval-test.apigee.net/myproxy | xmllint --format -

    El cuerpo de la respuesta debe verse de la siguiente manera:

    <wrapper>
      <secret>42</secret>
      <config>
        <environment>test</environment>
        <protocol>gopher</protocol>
      </config>
    </wrapper>