L'esempio seguente utilizza tre criteri Assegna messaggio:

  1. Crea tre variabili di flusso nella richiesta, con valori statici
  2. Recupera le variabili di flusso in modo dinamico in una seconda policy nel flusso di richiesta
  3. Li imposta nel payload della risposta
<!-- 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>

Nella prima policy, l'elemento <AssignVariable> crea e imposta tre variabili nella richiesta. Ogni elemento <Name> specifica un nome di variabile, mentre <Value> specifica il valore.

Il secondo criterio utilizza l'elemento <AssignVariable> per leggere i valori e crea tre nuove variabili:

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

Nella seconda policy, l'elemento <Ref> fa riferimento alla variabile di origine, mentre gli elementi <Name> specificano i nomi delle nuove variabili. Se la variabile a cui fa riferimento l'elemento <Ref> non รจ accessibile, puoi utilizzare il valore specificato dall'elemento <Value>.

Per provare questo insieme di norme:

  1. Aggiungi le norme n. 1 e n. 2 al flusso di richiesta. Assicurati di inserire la norma n. 1 prima della norma n. 2.
  2. Aggiungi la terza norma nel flusso di risposta.
  3. Il terzo criterio utilizza l'elemento <Set> per aggiungere le variabili alla risposta. L'esempio seguente crea un payload XML nella risposta che Edge restituisce al 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>

    Tieni presente che la sintassi per accedere alle variabili di flusso in <Set> prevede di racchiuderle tra parentesi graffe.

    Assicurati di impostare l'attributo contentType dell'elemento <Payload> su "application/xml".

  4. Invia una richiesta al proxy API, ad esempio:
    curl -vL https://ahamilton-eval-test.apigee.net/myproxy

    Se vuoi, puoi inviare i risultati tramite una utility come xmllint in modo che l'XML venga visualizzato in una struttura ben formattata:

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

    Il corpo della risposta dovrebbe essere simile al seguente:

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