L'exemple suivant utilise trois règles d'attribution de messages :

  1. Crée trois variables de flux dans la requête, avec des valeurs statiques.
  2. Récupère les variables de flux de façon dynamique dans une deuxième règle du flux de requête.
  3. Les définit dans la charge utile de la réponse.
<!-- 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>

Dans la première règle, l'élément <AssignVariable> crée et définit trois variables dans la requête. Chaque élément <Name> spécifie un nom de variable et <Value> spécifie la valeur.

La deuxième règle utilise l'élément <AssignVariable> pour lire les valeurs et créer trois variables :

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

Dans la seconde règle, l'élément <Ref> fait référence à la variable source, et les éléments <Name> spécifient le nom des nouvelles variables. Si la variable référencée par l'élément <Ref> n'est pas accessible, vous pouvez utiliser la valeur spécifiée par l'élément <Value>.

Pour essayer ces règles, procédez comme suit :

  1. Ajoutez les stratégies 1 et 2 au flux de requête. Veillez à placer la règle n° 1 avant la règle n° 2.
  2. Ajoutez la troisième règle dans le flux response.
  3. La troisième règle utilise l'élément <Set> pour ajouter les variables à la réponse. L'exemple suivant construit une charge utile XML dans la réponse renvoyée par Edge au client :
    <!-- 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>

    Notez que la syntaxe permettant d'accéder aux variables de flux dans <Set> consiste à les placer entre accolades.

    Veillez à définir l'attribut contentType de l'élément <Payload> sur "application/xml".

  4. Envoyez une requête à votre proxy d'API. Exemple :
    curl -vL https://ahamilton-eval-test.apigee.net/myproxy

    Vous pouvez également lier les résultats via un utilitaire tel que xmllint pour que le code XML s'affiche dans une structure correctement formatée :

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

    Le corps de la réponse doit se présenter comme suit :

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