Norme di AssignMessage

Stai visualizzando la documentazione di Apigee Edge.
Consulta la documentazione di Apigee X.
info

Cosa

Il criterio AssignMessage modifica o crea nuovi messaggi di richiesta e risposta durante il flusso del proxy API. Le norme ti consentono di eseguire le seguenti azioni su questi messaggi:

  • Aggiungere nuovi parametri del modulo, intestazioni o parametri di ricerca a un messaggio
  • Copiare le proprietà esistenti da un messaggio a un altro
  • Rimuovi intestazioni, parametri di ricerca, parametri del modulo e/o payload dei messaggi da un messaggio
  • Imposta il valore delle proprietà esistenti in un messaggio

Con il criterio AssignMessage, in genere aggiungi, modifichi o rimuovi le proprietà della richiesta o della risposta. Tuttavia, puoi anche utilizzare il criterio AssignMessage per creare una richiesta personalizzata o un messaggio di risposta e passarlo a una destinazione alternativa, come descritto in Creare messaggi di richiesta personalizzati.

Esistono molte situazioni in cui potresti voler modificare una richiesta o un messaggio di risposta durante l'elaborazione da parte di Apigee Edge. Ad esempio:

  • Definisci un valore predefinito per un parametro della stringa di query o un altro tipo di input.
  • Rimuovi le intestazioni HTTP da un messaggio di richiesta prima che venga inoltrato al servizio di backend.
  • Aggiungi intestazioni HTTP prima che venga inviata una risposta all'app consumer.
  • Inserisci contenuti del messaggio JSON o XML prima dell'invio di una risposta.
  • Genera messaggi di richiesta o risposta completi. Ad esempio, puoi utilizzare un criterio ServiceCallout per richiamare un'API remota da un proxy API. Puoi utilizzare il criterio AssignMessage per creare un messaggio di richiesta personalizzato e assegnarlo a una variabile. Poi, utilizza Service Callout per inviare il messaggio all'API remota.
  • Aggiungi intestazioni a richieste e risposte per il debug e la risoluzione dei problemi.

Il criterio AssignMessage può creare o modificare messaggi o variabili di flusso. Utilizza questo criterio per modificare i messaggi di richiesta prima di inviarli tramite un proxy ai sistemi upstream o per modificare i messaggi di risposta prima di inoltrarli alle applicazioni consumer API.

Elemento <AssignMessage>

Definisce una norma AssignMessage.

Valore predefinito Consulta la scheda Policy predefinita di seguito.
Obbligatorio? Obbligatorio
Tipo Oggetto complesso
Elemento principale n/a
Elementi secondari <Add>
<AssignTo>
<AssignVariable>
<Copy>
<DisplayName>
<IgnoreUnresolvedVariables>
<Remove>
<Set>

L'elemento <AssignMessage> utilizza la seguente sintassi:

L'elemento <AssignMessage> utilizza la seguente sintassi:

<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>
    <Ref>source_variable</Ref>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
    <Value>variable_value</Value>
  </AssignVariable>

  <Copy source="[request|response]">
    <!-- 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>

L'esempio seguente mostra le impostazioni predefinite quando aggiungi un criterio AssignMessage al flusso nell'interfaccia utente Edge:

<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 inserisci una nuova policy AssignMessage nell'interfaccia utente Edge, il modello contiene stub per tutte le possibili operazioni. In genere, selezioni le operazioni che vuoi eseguire con questa norma e rimuovi il resto degli elementi secondari. Ad esempio, se vuoi eseguire un'operazione di copia, utilizza l'elemento <Copy> e rimuovi <Add>, <Remove> e altri elementi secondari dal criterio per renderlo più leggibile.

Questo elemento ha i seguenti attributi comuni a tutti i criteri:

Attributo Predefinita Obbligatorio? Description (Descrizione)
name N/A Obbligatorio

Il nome interno del criterio. Il valore dell'attributo name può contenere lettere, numeri, spazi, trattini, trattini bassi e punti. Questo valore non può contenere più di 255 caratteri.

Facoltativamente, utilizza l'elemento <DisplayName> per etichettare il criterio nell'editor del proxy dell'interfaccia utente di gestione con un nome diverso in linguaggio naturale.

continueOnError false Facoltativo Imposta su "false" per restituire un errore quando un criterio non va a buon fine. Si tratta di un comportamento previsto per la maggior parte dei criteri. Impostalo su "true" per far sì che l'esecuzione del flusso continui anche dopo l'esito negativo di un criterio.
enabled true Facoltativo Imposta su "true" per applicare il criterio. Imposta su "false" per "disattivare" il criterio. Il criterio non verrà applicato anche se rimane collegato a un flusso.
async   false Deprecazione Questo attributo è obsoleto.

La tabella seguente fornisce una descrizione generale degli elementi secondari di <AssignMessage>:

Elemento secondario Obbligatorio? Descrizione
Operazioni comuni
<Add> Facoltativo Aggiunge informazioni all'oggetto del messaggio specificato dall'elemento <AssignTo>.

<Add> aggiunge intestazioni o parametri al messaggio che non esistono nel messaggio originale. Per sovrascrivere intestazioni o parametri esistenti, utilizza l'elemento <Set>.

<Copy> Facoltativo Copia le informazioni dal messaggio specificato dall'attributo source al messaggio specificato dall'elemento <AssignTo>.
<Remove> Facoltativo Elimina gli elementi specificati dalla variabile del messaggio specificata nell'elemento <AssignTo>.
<Set> Facoltativo Sostituisce i valori delle proprietà esistenti nella richiesta o nella risposta, specificati dall'elemento <AssignTo>.

<Set> sovrascrive le intestazioni o i parametri già esistenti nel messaggio originale. Per aggiungere nuove intestazioni o nuovi parametri, utilizza l'elemento <Add>.

Altri elementi secondari
<AssignTo> Facoltativo Specifica su quale messaggio opera il criterio AssignMessage. Può trattarsi della richiesta o della risposta standard oppure di un nuovo messaggio personalizzato.
<AssignVariable> Facoltativo Assegna un valore a una variabile di flusso. Se la variabile non esiste, <AssignVariable> la crea.
<IgnoreUnresolvedVariables> Facoltativo Determina se l'elaborazione si interrompe quando viene rilevata una variabile non risolta.

Ognuno di questi elementi secondari è descritto nelle sezioni seguenti.

Esempi

I seguenti esempi mostrano alcuni dei modi in cui puoi utilizzare il criterio AssignMessage:

L'esempio seguente aggiunge un'intestazione alla richiesta con l'elemento <Add>:

<AssignMessage name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

L'esempio seguente elimina il payload dalla risposta con l'elemento <Remove>:

<AssignMessage name="AM-remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo>response</AssignTo>
</AssignMessage>

L'esempio seguente modifica un oggetto risposta esistente aggiungendovi un'intestazione:

<AssignMessage name="AM-modify-response">
  <Set>
    <Headers>
      <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>false
  </IgnoreUnresolvedVariables>
  <AssignTo>response</AssignTo>
</AssignMessage>

Questo esempio non crea un nuovo messaggio. Al contrario, modifica un messaggio di risposta esistente aggiungendo un'intestazione HTTP.

Poiché questo esempio specifica response come nome della variabile nell'elemento <AssignTo>, questa policy modifica l'oggetto risposta originariamente impostato con i dati restituiti dal server di destinazione.

L'intestazione HTTP aggiunta al messaggio di risposta da queste norme deriva da una variabile compilata dalle norme LookupCache. Pertanto, il messaggio di risposta modificato da questa policy Assegna messaggio contiene un'intestazione HTTP che indica se i risultati sono stati recuperati dalla cache o meno. L'impostazione delle intestazioni nella risposta può essere utile per il debug e la risoluzione dei problemi.

Puoi utilizzare Assegna messaggio per incorporare contenuti dinamici nel payload dei messaggi di risposta e richiesta.

Per incorporare le variabili del flusso Edge in un payload XML, racchiudi la variabile designata tra parentesi graffe, in questo modo: {prefix.name}.

L'esempio seguente incorpora il valore della variabile di flusso dell'intestazione HTTP user-agent in un elemento XML chiamato User-agent:

<AssignMessage name="AM-set-dynamic-content">
  <AssignTo>response</AssignTo>
  <Set>
    <Payload contentType="text/xml">
      <User-agent>{request.header.user-agent}</User-agent>
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>false
  </IgnoreUnresolvedVariables>
</AssignMessage>

Per i payload JSON, puoi inserire variabili utilizzando gli attributi variablePrefix e variableSuffix con caratteri delimitatori come mostrato nel seguente esempio:

<AssignMessage name="set-payload">
  <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
  {
     "user-agent": "@request.header.user-agent#"
  }
  </Payload>
</AssignMessage>

Per un elenco completo delle variabili di flusso, consulta Riferimento alle variabili di flusso.

A partire dalla release cloud 16.08.17, puoi utilizzare anche le parentesi graffe per inserire le variabili.

Il seguente esempio rimuove il parametro di query apikey dalla richiesta:

<AssignMessage name="AM-remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

È una best practice rimuovere il parametro di query apikey dal messaggio di richiesta quando utilizzi il criterio VerifyAPIKey per l'autenticazione utente. In questo modo, impedisci il trasferimento di informazioni chiave sensibili al target di backend.

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>

Nel primo criterio, 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>

Nell'esempio seguente, supponiamo che nella richiesta del proxy API sia presente un ServiceCallout policy e che la risposta del callout contenga più intestazioni con lo stesso nome (Set-Cookie). Supponendo che la variabile di risposta di Service Callout sia quella predefinita calloutResponse, il seguente criterio recupera il secondo valore dell'intestazione Set-Cookie.

<AssignMessage name="AM-Payload-from-SC-header">
  <Set>
    <Payload contentType="application/json">
      {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"}
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true
  </IgnoreUnresolvedVariables>
  <AssignTo>response</AssignTo>
</AssignMessage>

Per elencare tutti i valori dell'intestazione, utilizza invece la seguente variabile:

{calloutResponse.header.Set-Cookie.values}

Ogni elemento secondario di questo riferimento contiene esempi aggiuntivi. Per altri esempi, consulta l'esempio AssignMessage su GitHub.

Riferimento all'elemento secondario

Questa sezione descrive gli elementi secondari di <AssignMessage>.

<Add>

Aggiunge informazioni alla richiesta o alla risposta, specificate dall'elemento <AssignTo>.

L'elemento <Add> aggiunge nuove proprietà al messaggio che non esistono nel messaggio originale. Per modificare i valori delle proprietà esistenti, utilizza l'elemento <Set>.

Valore predefinito n/a
Obbligatorio? Facoltativo
Tipo Tipo complesso
Elemento principale <AssignMessage>
Elementi secondari <FormParams>
<Headers>
<QueryParams>

L'elemento <Add> utilizza la seguente sintassi:

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

L'esempio seguente utilizza l'elemento <FormParams> per ottenere i valori di tre parametri della stringa di query dalla richiesta iniziale e impostarli come parametri del modulo nella richiesta dell'endpoint di destinazione:

<AssignMessage name="AM-add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="username">{request.queryparam.name}</FormParam>
      <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
      <FormParam name="default_language">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <Remove>
    <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

L'esempio seguente utilizza l'elemento <Headers> per aggiungere un'intestazione partner-id alla richiesta che verrà inviata all'endpoint di destinazione:

<AssignMessage name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

L'esempio seguente utilizza l'elemento <QueryParams> per aggiungere un singolo parametro di query con un valore statico alla richiesta:

<AssignMessage name="AM-add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

Questo esempio utilizza <Add> nel preflusso della richiesta. Se esamini i risultati in uno strumento come lo strumento di tracciamento, la richiesta a https://example-target.com/get diventa https://example-target.com/get?myParam=42.

Gli elementi secondari di <Add> supportano la sostituzione dinamica delle stringhe, nota come modelli di messaggi.

<FormParams> (figlio di <Add>)

Aggiunge nuovi parametri del modulo al messaggio di richiesta. Questo elemento non ha alcun effetto su un messaggio di risposta.

Valore predefinito n/a
Obbligatorio? Facoltativo
Tipo Array di elementi <FormParam>
Elemento principale <Add>
Elementi secondari <FormParam>

L'elemento <FormParams> utilizza la seguente sintassi:

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

Il seguente esempio aggiunge un singolo parametro del modulo ("answer") e un valore statico ("42") alla richiesta:

<AssignMessage name="AM-add-formparams-1">
  <Add>
    <FormParams>
      <FormParam name="answer">42</FormParam>
    </FormParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

Il seguente esempio recupera il valore del parametro di query name e lo aggiunge alla richiesta come parametro del modulo, quindi rimuove il parametro di query:

<AssignMessage name="AM-Swap-QueryParam-to-FormParams">
  <Add>
    <FormParam name="name">{request.queryparam.name}</FormParam>
  </Add>
  <Remove>
    <QueryParam name="name"/>
  </Remove>
</AssignMessage>

Tieni presente che questo esempio non specifica un target con <AssignTo>. Questo criterio aggiunge il parametro solo alla richiesta.

Il seguente esempio aggiunge più parametri del modulo alla richiesta:

<AssignMessage name="AM-add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="username">{request.queryparam.name}</FormParam>
      <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
      <FormParam name="default_language">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <Remove>
    <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</AssignMessage>

Questo esempio recupera i parametri della stringa di query dalla richiesta di origine e li aggiunge come parametri del modulo con nomi diversi. Poi rimuove i parametri di ricerca originali. Apigee invierà la richiesta modificata all'endpoint di destinazione.

Puoi utilizzare lo strumento Traccia per esaminare il flusso. Vedrai che il corpo della richiesta contiene i dati del modulo codificati nell'URL, che originariamente sono stati passati come parametri della stringa di query:

username=nick&zip_code=90210&default_language=en

Puoi utilizzare <FormParams> solo se sono soddisfatti i seguenti criteri:

  • Verbo HTTP: POST
  • Tipo di messaggio: richiesta
  • Uno (o entrambi) dei seguenti elementi:
    • Dati del modulo: impostato su un valore o su "" (la stringa vuota). Ad esempio, con curl, aggiungi -d "" alla richiesta.
    • Intestazione Content-Length: impostata su 0 (se non sono presenti dati nella richiesta originale; altrimenti, la lunghezza corrente, in byte). Ad esempio, con curl aggiungi -H "Content-Length: 0" alla richiesta.

Ad esempio:

curl -vL -X POST -d "" -H "Content-Type: application/x-www-form-urlencoded"
  https://ahamilton-eval-test.apigee.net/am-test

Quando aggiungi <FormParams>, Edge imposta l'intestazione Content-Type della richiesta su "application/x-www-form-urlencoded" prima di inviare il messaggio al servizio di destinazione.

<Headers> (figlio di <Add>)

Aggiunge nuove intestazioni alla richiesta o alla risposta specificata, che viene specificata dall'elemento <AssignTo>.

Valore predefinito n/a
Obbligatorio? Facoltativo
Tipo Array di elementi <Header>
Elemento principale <Add>
Elementi secondari <Header>

L'elemento <Headers> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Add>
</AssignMessage>

L'esempio seguente aggiunge un'intestazione partner-id al messaggio di richiesta e assegna il valore della variabile di flusso verifyapikey.VAK-1.developer.app.partner-id a questa intestazione.

<AssignMessage name="AM-add-headers-1">
  <Add>
    <Headers>
      <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
    </Headers>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

<QueryParams> (figlio di <Add>)

Aggiunge nuovi parametri di ricerca alla richiesta. Questo elemento non ha alcun effetto su una risposta.

Valore predefinito n/a
Obbligatorio? Facoltativo
Tipo Array di elementi <QueryParam>
Elemento principale <Add>
Elementi secondari <QueryParam>

L'elemento <QueryParams> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Add>
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Add>
</AssignMessage>

L'esempio seguente aggiunge il parametro di query "myParam" alla richiesta e gli assegna il valore "42":

<AssignMessage name="AM-add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo>request</AssignTo>
</AssignMessage>

Puoi utilizzare <QueryParams> solo se sono soddisfatti i seguenti criteri:

  • Verbo HTTP: GET
  • Tipo di messaggio: richiesta

Inoltre, puoi impostare i parametri di query solo quando l'attributo type dell'elemento <AssignTo> è un messaggio di richiesta. Impostarli nella risposta non ha alcun effetto.

Se definisci un array vuoto di parametri di ricerca nella norma (<Add><QueryParams/></Add>), la norma non aggiunge alcun parametro di ricerca. È come omettere <QueryParams>.

<AssignTo>

Determina su quale oggetto opera il criterio AssignMessage. Le opzioni sono:

  • Messaggio di richiesta:il request ricevuto dal proxy API
  • Messaggio di risposta:il response restituito dal server di destinazione
  • Messaggio personalizzato:un oggetto di richiesta o risposta personalizzato

Tieni presente che in alcuni casi non puoi modificare l'oggetto su cui agisce la policy AssignMessage. Ad esempio, non puoi utilizzare <Add> o <Set> per aggiungere o modificare i parametri di query (<QueryParams>) o i parametri del modulo (<FormParams>) nella risposta. Puoi manipolare solo i parametri di query e i parametri del modulo nella richiesta.

Valore predefinito n/a
Obbligatorio? Facoltativo
Tipo Stringa
Elemento principale <AssignMessage>
Elementi secondari Nessuno

Se non specifichi <AssignTo> o se specifichi l'elemento <AssignTo>, ma non specifichi un valore di testo per l'elemento, il criterio agisce sulla richiesta o sulla risposta predefinita, in base a dove viene eseguito. Se il criterio viene eseguito nel flusso della richiesta, influisce sul messaggio di richiesta. Se viene eseguito nel flusso di risposta, il criterio influisce sulla risposta per impostazione predefinita.

L'elemento <AssignTo> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>

L'esempio seguente specifica che la destinazione è la richiesta originale che verrà inviata all'endpoint di destinazione:

<AssignMessage name="assignto-1">
<!-- DO NOT do this -->
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

L'esempio seguente crea un nuovo oggetto richiesta:

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

Quando crei un nuovo oggetto richiesta o risposta, gli altri elementi del criterio AssignMessage (come <Add>, <Set> e <Copy>) agiscono su questo nuovo oggetto richiesta.

Puoi accedere al nuovo oggetto richiesta in altre norme più avanti nel flusso o inviare il nuovo oggetto richiesta a un servizio esterno con un'norma ServiceCallout.

Il seguente esempio crea un nuovo oggetto richiesta denominato "MyRequestObject":

<AssignMessage name="assign>to-<2"
  AssignTo createNew="true" transport=&&quot;http" ty&pe="req>u<est"gt;My>RequestObjectlt;/AssignTo
/AssignMessage

Quando crei un nuovo oggetto richiesta o risposta, gli altri elementi del criterio AssignMessage (come <Add>, <Set> e <Copy>) agiscono su questo nuovo oggetto richiesta.

Puoi accedere al nuovo oggetto richiesta in altre norme più avanti nel flusso o inviare il nuovo oggetto richiesta a un servizio esterno con un'norma ServiceCallout.

La tabella seguente descrive gli attributi di <AssignTo>:

Attributo Descrizione Obbligatorio? Tipo
createNew

Determina se questo criterio crea un nuovo messaggio durante l'assegnazione dei valori.

Se "true", il criterio crea una nuova variabile del tipo specificato da type ("request" o "response"). Se non specifichi il nome della nuova variabile, le norme creano un nuovo oggetto richiesta o risposta in base al valore di type.

Se il valore è "false", la norma risponde in uno dei due modi seguenti:

  • Se <AssignTo> può risolvere il nome della variabile in una richiesta o una risposta, continua l'elaborazione. Ad esempio, se il criterio si trova in un flusso di richieste, la variabile è l'oggetto richiesta. Se il criterio è in una risposta, la variabile è l'oggetto della risposta.
  • Se <AssignTo> non può essere risolto o viene risolto in un tipo non di messaggio, il criterio genera un errore.

Se createNew non è specificato, la policy risponde in uno dei due modi seguenti:

  • Se il valore di testo di <AssignTo> viene risolto in un messaggio, l'elaborazione passa al passaggio successivo.
  • Se il valore di testo di <AssignTo> non può essere risolto o viene risolto in un tipo non di messaggio, viene creata una nuova variabile del tipo specificato in type.
Facoltativo Booleano
transport

Specifica il tipo di trasporto per il tipo di messaggio di richiesta o risposta.

Il valore predefinito è "http" (l'unico valore supportato).

Facoltativo Stringa
type Specifica il tipo del nuovo messaggio quando createNew è "true". I valori validi sono "request" o "response".

Se ometti questo attributo, Edge crea una richiesta o una risposta, a seconda del punto del flusso in cui viene eseguita questa norma.

Facoltativo Stringa

<AssignVariable>

Assegna un valore a una variabile di flusso. Se la variabile di flusso non esiste, <AssignVariable> la crea.

Valore predefinito n/a
Obbligatorio? Facoltativo
Tipo Tipo complesso
Elemento principale <AssignMessage>
Elementi secondari <Name> (obbligatorio)
<Ref>
<Template>
<Value>

Il valore che assegni alla variabile di flusso può essere uno dei seguenti:

  • Stringa letterale: utilizza l'elemento secondario <Value> per specificare un valore di stringa letterale per la variabile di flusso.
  • Variabile di flusso: utilizza l'elemento secondario <Ref> per specificare il valore di una variabile di flusso esistente per la variabile di flusso di destinazione. Per un elenco completo delle variabili di flusso che possono essere utilizzate come origine, consulta Riferimento alle variabili di flusso.
  • Modello di messaggio: utilizza l'elemento secondario <Template> per specificare un modello di messaggio da interpolare per ottenere il valore da inserire nella variabile di flusso di destinazione.

L'elemento <AssignVariable> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="polic>y_nam<e&qu>ot; 
  Assign<Varia>ble
 <   >Namevariable_na<me/N>ame
 <   Refso>urce_variable/Re<f
    Tem>platemessage<_template/Template
    or
    Te><mplate re>f=<9;tem>plate_variable<'/>Tem<plate
    Value>v<ariable_value/>Value
  /AssignVariable
/AssignMessage

Utilizza l'elemento <Ref> per specificare la variabile di origine. Se la variabile a cui fa riferimento <Ref> non è accessibile, Edge utilizza il valore specificato dall'elemento <Value>. Se definisci <Template>, questo ha la precedenza sugli altri elementi secondari.

L'esempio seguente imposta il valore di una nuova variabile, myvar, sul valore letterale "42":

<AssignMessage name="assignvariab>le-<1"
  Assi>gnVar<iabl>e
   < Name>myvar</Name>
 <   Val>ue4<2/Value
  /Assi>g<nVariable
/Ass>ignMessage

Il seguente esempio assegna il valore della variabile di flusso request.header.user-agent alla variabile di flusso di destinazione myvar e il valore del parametro di ricerca country alla variabile di flusso di destinazione Country:

<AssignMessage name="assignvariab>le-<2"
  Assi>gnVar<iabl>e
   < Name>myvar</Na>me
    Refrequest.header.<user>-agen<t/Ref>
    ValueE<rrorOn>Cop<y/Value
  /Assi>gnV<ariable
  Assi>gnVar<iabl>e
    N<ameCo>untry</Na>me
    Refrequest.querypar<am.c>ountr<y/Ref>
    ValueE<rrorOn>Cop<y/Value
  /Assi>g<nVariable
/Ass>ignMessage

Se uno dei due assegnamenti non riesce, Edge assegna invece il valore "ErrorOnCopy" alla variabile di flusso di destinazione.

Se le variabili di flusso myvar o Country non esistono, <AssignVariable> le crea.

L'esempio seguente utilizza l'elemento secondario <Template> per concatenare due variabili di contesto con una stringa letterale (un trattino) tra loro:

<AssignMessage name='AV-via-templat>e-1<'
  IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables
  Assign>Varia<ble<>/span>
    Namemy_destination_<varia>ble/N<ame
 >   Value<BADDBE>EF/Va<lue
    >Template{system.uuid}-{me<ssageid}/>Tem<plate
  /Assign>V<ariable
/Assig>nMessage

Un utilizzo comune di <AssignVariable> è impostare un valore predefinito per un parametro di query, un'intestazione o un altro valore che può essere trasmesso con la richiesta. A tale scopo, utilizza una combinazione degli elementi secondari <Ref> e <Value>. Per ulteriori informazioni, consulta gli esempi per <Ref>.

<Name> (figlio di <AssignVariable>)

Specifica il nome della variabile di flusso di destinazione (ad es. la variabile il cui valore è impostato dal criterio AssignMessage). Se la variabile denominata in <AssignVariable> non esiste, il criterio ne crea una con quel nome.

Valore predefinito n/a
Obbligatorio? Obbligatorio
Tipo Stringa
Elemento principale <AssignVariable>
Elementi secondari Nessuno

L'elemento <Name> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="polic>y_nam<e&qu>ot; 
  Assign<Varia>ble<
    Namevariab>l<e_name/Name
  >/AssignVariable
/AssignMessage

L'esempio seguente specifica la variabile di destinazione come myvar e la imposta sul valore letterale "42":

<AssignMessage name="assignvariab>le-<1"
  Assi>gnVar<iabl>e
   < Name>myvar</Name>
 <   Val>ue4<2/Value
  /Assi>g<nVariable
/Ass>ignMessage

Se myvar non esiste, <AssignVariable> lo crea.

<Ref> (figlio di <AssignVariable>)

Specifica l'origine dell'assegnazione come variabile di flusso. La variabile di flusso può essere una delle variabili di flusso predefinite (elencate nel riferimento alle variabili di flusso) o una variabile di flusso personalizzata che hai creato.

Il valore di <Ref> viene sempre interpretato come una variabile di flusso; non puoi specificare una stringa letterale come valore. Per assegnare un valore stringa letterale, utilizza invece l'elemento <Value>.

Valore predefinito n/a
Obbligatorio? Facoltativo
Tipo Stringa
Elemento principale <AssignVariable>
Elementi secondari Nessuno

Quando specifichi una variabile di flusso con <Ref>, ometti le parentesi graffe "{}" che normalmente utilizzeresti per fare riferimento a una variabile di flusso. Ad esempio, per impostare il valore della nuova variabile sul valore della variabile di flusso client.host:

Do this (no brackets):
  <Ref>client.host</Ref>

Do NOT do this (brackets):
  <Ref>{client.host}</Ref>

Per definire un valore predefinito per la variabile di flusso di destinazione, utilizza <Value> in combinazione con <Ref>. Se la variabile di flusso specificata da <Ref> non esiste, non può essere letta o è nulla, Edge assegna invece il valore di <Value> alla variabile di flusso di destinazione.

L'elemento <Ref> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="polic>y_nam<e&qu>ot; 
  Assign<Varia>ble
 <   >Namevariable_na<me/N>ame<
    Refsource_>v<ariable/Ref
  >/AssignVariable
/AssignMessage

Il seguente esempio assegna il valore della variabile di flusso request.header.user-agent alla variabile di flusso di destinazione myvar e il valore del parametro di ricerca country alla variabile Country:

<AssignMessage name="assignvariab>le-<4"
  Assi>gnVar<iabl>e
   < Name>myvar</Na>me
    Refrequest.header.<user>-ag<ent/Ref
  /Assi>gnV<ariable
  Assi>gnVar<iabl>e
    N<ameCo>untry</Na>me
    Refrequest.querypar<am.c>oun<try/Ref
  /Assi>g<nVariable
/Ass>ignMessage

In questo esempio, Edge non ha un valore predefinito (o di riserva) specificato per nessuno dei due compiti.

L'esempio seguente assegna il valore della variabile di flusso request.header.user-agent alla variabile di flusso di destinazione myvar e il valore del parametro di ricerca country alla variabile Country:

<AssignMessage name="assignvariab>le-<2"
  Assi>gnVar<iabl>e
   < Name>myvar</Na>me
    Refrequest.header.<user>-agen<t/Ref>
    ValueE<rrorOn>Cop<y/Value
  /Assi>gnV<ariable
  Assi>gnVar<iabl>e
    N<ameCo>untry</Na>me
    Refrequest.querypar<am.c>ountr<y/Ref>
    ValueE<rrorOn>Cop<y/Value
  /Assi>g<nVariable
/Ass>ignMessage

In questo esempio, se i valori della variabile di flusso request.header.user-agent o del parametro di query Country sono nulli, illeggibili o non validi, Edge assegna il valore "ErrorOnCopy" alle nuove variabili.

Un caso d'uso comune per <AssignVariable> è impostare il valore predefinito di un parametro di query, un'intestazione o un altro valore che può essere trasmesso con la richiesta. Ad esempio, crei un proxy API meteo in cui la richiesta accetta un singolo parametro di query denominato "w". Questo parametro contiene l'ID della città per cui vuoi conoscere le condizioni meteo. L'URL della richiesta ha il formato:

http://myCO.com/v1/weather/forecastrss?w=city_ID

Per definire un valore predefinito per "w", crea una policy AssignMessage come la seguente:

<AssignMessage continueOnError="false" enabled="true" nam>e=&<quot;assignvariable-3"
  AssignTo createNew="fals>e&q<uot; transport="http>" <type="request"/
>  I<gnoreUnresolve>dVari<able>strue
  /IgnoreUnres<olved>Varia<ble>s
  AssignVariable
 <   N>amere<quest>.querypa<ram.w/>Nam<e
    Refreques>t<.queryparam.w/>Ref
    Value12797282/Value
  /AssignVariable
/AssignMessage

In questo esempio, <AssignVariable> riceve il valore di request.queryparam.w e lo assegna a se stesso. Se la variabile di flusso è null, il che significa che il parametro di query "w" è stato omesso dalla richiesta, questo esempio utilizza il valore predefinito dell'elemento <Value>. Pertanto, puoi effettuare una richiesta a questo proxy API che omette il parametro di query "w":

http://myCO.com/v1/weather/forecastrss

e che il proxy API restituisca comunque un risultato valido.

A differenza di quando utilizzi <Value>, il valore di <Ref> deve essere una variabile di flusso, ad esempio una proprietà di un oggetto request, response o target. Il valore può anche essere una variabile di flusso personalizzata che hai creato.

Se specifichi una variabile di flusso che non esiste per il valore di <Ref>, e il valore di <IgnoreUnresolvedVariables> è "true", Edge genera un errore.

<Template> (figlio di <AssignVariable>)

Specifica un modello di messaggio. Un modello di messaggio consente di eseguire la sostituzione di stringhe variabili durante l'esecuzione del criterio e può combinare stringhe letterali con nomi di variabili racchiusi tra parentesi graffe. Inoltre, i modelli di messaggio supportano funzioni come l'escape e la conversione di maiuscole e minuscole.

Utilizza l'attributo ref per specificare una variabile di flusso in cui il valore della variabile è un modello di messaggio. Ad esempio, puoi memorizzare un modello di messaggio come attributo personalizzato in un'app per sviluppatori. Quando Edge identifica l'app per sviluppatori dopo aver verificato la chiave API o il token di sicurezza (tramite un criterio aggiuntivo), l'elemento <AssignVariable> potrebbe utilizzare il modello di messaggio dall'attributo personalizzato dell'app, disponibile come variabile di flusso dal criterio di sicurezza.

Valore predefinito n/a
Obbligatorio? Facoltativo
Tipo Stringa
Elemento principale <AssignVariable>
Elementi secondari Nessuno

L'elemento <Template> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="polic>y_nam<e" >
  AssignVariabl<e
    Tem>platemessage<_template/Template
    or
    Te><mplate re>f=&<#39;template_va>r<iable'/Tem>plate
  /AssignVariable
/AssignMessage

Il seguente esempio utilizza la sintassi dei modelli di messaggi per concatenare due variabili di contesto con una stringa letterale (un trattino) tra le due:

<AssignMessage name='AV-via-templat>e-1<'
  IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables
  Assign>Varia<ble<>/span>
    Namemy_destination_<varia>ble/N<ame
 >   Value<BADDBE>EF/Va<lue
    >Template{system.uuid}-{me<ssageid}/>Tem<plate
  /Assign>V<ariable
/Assig>nMessage

L'esempio seguente specifica una variabile di flusso, in cui il valore della variabile è un modello di messaggio predefinito. Utilizza questa opzione se vuoi inserire un modello predefinito in fase di runtime senza dover modificare il criterio:

<AssignMessage name='AV-via-template-indirec>tly&#<39;  
  IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables
  Assign>Varia<ble<>/span>
    Namemy_destination_<varia>ble/N<ame
 >   Value<BADDBE>EF/Va<lue
    Template ref='my_templat>e_v<ariable'/
 > </AssignVariabl>e
/AssignMessage

L'esempio seguente specifica una variabile di flusso e un valore di testo. In questo caso, se la variabile a cui viene fatto riferimento non è nulla, questo valore viene utilizzato come modello. Se il valore di riferimento è nullo, viene utilizzato il valore di testo (in questo caso, {system.uuid}-{messageid}) come modello. Questo pattern è utile per fornire un valore di "override", dove in alcuni casi vuoi sostituire il modello predefinito (la parte di testo) con valori impostati in modo dinamico. Ad esempio, un'istruzione condizionale potrebbe recuperare un valore da una mappa chiave-valore e impostare la variabile a cui viene fatto riferimento su quel valore:

<AssignMessage name='AV-template-with-fallb>ack<' 
 IgnoreUnresolvedV>ariab<lesfalse/IgnoreUnresolvedV>ari<ables
  Assign>Varia<ble<>/span>
    Namemy_destination_<varia>ble/N<ame
 >   Value<BADDBE>EF/Va<lue
    Template ref='>my_variable'{system.u<uid}-{mes>sag<eid}/Template
 > </AssignVariabl>e
/AssignMessage

<Value> (figlio di <AssignVariable>)

Definisce il valore della variabile di flusso di destinazione impostata con <AssignVariable>. Il valore viene sempre interpretato come una stringa letterale; non puoi utilizzare una variabile di flusso come valore, anche se racchiudi il valore tra parentesi ("{}"). Per utilizzare una variabile di flusso, utilizza <Ref> in alternativa.

Valore predefinito n/a
Obbligatorio? Facoltativo
Tipo Stringa
Elemento principale <AssignVariable>
Elementi secondari Nessuno

Se utilizzato in combinazione con l'elemento <Ref>, <Value> funge da valore predefinito (o di riserva). Se <Ref> non è specificato, non è risolvibile o è nullo, viene utilizzato il valore di <Value>.

L'elemento <Value> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="polic>y_nam<e&qu>ot; 
  Assign<Varia>ble
 <   Na>mevariable_nam<e/Name>
  <  Valuevariable>_<value/Value
  >/AssignVariable
/AssignMessage

Il seguente esempio imposta il valore della variabile di flusso di destinazione, myvar, sul valore letterale "42":

<AssignMessage name="assignvariab>le-<1"
  Assi>gnVar<iabl>e
   < Name>myvar</Name>
 <   Val>ue4<2/Value
  /Assi>g<nVariable
/Ass>ignMessage

L'esempio seguente assegna il valore della variabile di flusso request.header.user-agent alla variabile di flusso myvar e il valore del parametro di ricerca country alla variabile Country:

<AssignMessage name="assignvariab>le-<2"
  Assi>gnVar<iabl>e
   < Name>myvar</Na>me
    Refrequest.header.<user>-agen<t/Ref>
    ValueE<rrorOn>Cop<y/Value
  /Assi>gnV<ariable
  Assi>gnVar<iabl>e
    N<ameCo>untry</Na>me
    Refrequest.querypar<am.c>ountr<y/Ref>
    ValueE<rrorOn>Cop<y/Value
  /Assi>g<nVariable
/Ass>ignMessage

Se una delle assegnazioni non riesce, <AssignVariable> assegna invece il valore "ErrorOnCopy" alla variabile di flusso di destinazione.

<Copy>

Copia i valori dal messaggio specificato dall'attributo source al messaggio specificato dall'elemento <AssignTo>. Se non specifichi una destinazione con <AssignTo>, queste norme copiano i valori nella richiesta o nella risposta, a seconda di dove vengono eseguite nel flusso.

Valore predefinito n/a
Obbligatorio? Facoltativo
Tipo Stringa
Elemento principale <AssignMessage>
Elementi secondari <FormParams>
<Headers>
<Path>
<Payload>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

Se non specifichi elementi secondari sotto l'elemento <Copy>, verranno copiate tutte le parti del messaggio di origine designato.

L'elemento <Copy> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > name<="policy_name" 
    Co>py so<urce="[request|response]&qu<ot;
    !--> Can also <be an empt>y array< (FormParams/) -->
    FormP>arams
      For<mParam nam>e="formpar<am_name&quo>t;for<mparam_value/FormParam
      ...<
    /Fo>rmParams
 <   !-- >Can als<o be an empty array (Head>ers/) --><
    He>aders
      Hea<der name>=&quo<t;he>ader_name&qu<ot;he>ader_<value/H>eader
      <...
    >/Head<ers
    Path[false|true]/Path
  <  Payload[fa>lse|true]/<Payload
   > !-- Ca<n also be an empty array (QueryPa>rams/) -->
  <  QueryPara>ms
      QueryP<aram name=&q>uot;q<ueryparam_na>me"quer<yparam_value/>Query<Param
    >  ...
    /Q<ueryParams<>/span>
    R<easo>nPhrase[fals<e|tru>e]/Re<asonPhr>ase
    Stat<usCode[f>als<e|tru>e]/<StatusCode
    Verb[false|true]/Verb<
   > Version[f>als<e|true]/Version
  /Copy
  !-- Used as the destination for the Copy values --
  A>ssignTo createNew="[<true|fals>e<]" transp>ort="http"
    type="[request|response]"destination_variable_name/AssignTo
/AssignMessage
  

Il seguente esempio copia un'intestazione, tre parametri del modulo, il percorso e tutti i parametri di query dal messaggio request a una nuova richiesta personalizzata denominata newRequest:

<AssignMessage name="AM-co>py-<1"
  AssignTo createNew="true" transport=&>quot;http&<quot; typ>e=&<quot;request"new>Reque<st/Assi>gnTo
  <Copy source="request&qu>ot;
 <   Heade>rs
  <    Header> name=&<quot;Header_Name_1"/
    /Head>ers
   < FormParams
      FormParam name=&q>uot;For<m_Param_Name_1"/
      FormPar>am na<me="Fo>rm_Pa<ram_>Name<_2&qu>ot;/
<      FormPa>ram< name>=<"Form_Par>am_Name_3"/
    /FormParams
    Pathtrue/Path
    QueryParams/
  /Copy
/AssignMessage

Poiché elementi come <Payload> e <Verb> non sono presenti, le norme non copiano queste parti del messaggio.

Il seguente esempio rimuove innanzitutto tutto ciò che è presente nel messaggio response esistente, quindi copia tutti i valori di un altro messaggio chiamato secondResponse nel messaggio response:

<AssignMessage name='AM-Copy-Respo>nse<'
  AssignTo createNew="false" transport=&quo>t;http&q<uot; type>=&q<uot;response"response/AssignTo
  !>-- <first r>emo<ve any existing values --
  Remove/
  !-- then copy eve>ryt<hing from the designated mess>a<ge --
  Copy s>ource="secondResponse"/
/AssignMessage

L'elemento <Copy> ha un solo attributo:

Attributo Descrizione Obbligatorio? Tipo
origine

Specifica l'oggetto di origine della copia.

  • Se source non è specificato, il valore predefinito è message, che assume un valore diverso a seconda del flusso in cui viene eseguito il criterio. Se il criterio viene eseguito nel flusso della richiesta, la variabile message fa riferimento all'oggetto request. Se la policy viene eseguita all'interno del flusso di risposta, la variabile message fa riferimento all'oggetto response.
  • Se la variabile di origine non può essere risolta o viene risolta in un tipo diverso da messaggio, <Copy> non risponde.
Facoltativo Stringa

<FormParams> (figlio di <Copy>)

Copia i parametri del modulo dalla richiesta specificata dall'attributo source dell'elemento <Copy> alla richiesta specificata dall'elemento <AssignTo>. Questo elemento non ha alcun effetto su una risposta.

Valore predefinito n/a
Obbligatorio? Facoltativo
Tipo Array di elementi <FormParam> o un array vuoto
Elemento principale <Copy>
Elementi secondari <FormParam>

L'elemento <FormParams> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce="[request|response]&qu<ot;
    !--> Can also <be an empt>y array< (FormParams/) -->
    FormP>arams
      For<mParam nam>e="formpar<am_name&quo>t;f<ormpa>r<am_value/FormP>aram
      ...
    /FormParams
  /Copy
/AssignMessage

Il seguente esempio copia un singolo parametro del modulo dalla richiesta alla richiesta personalizzata "MyCustomRequest":

<AssignMessage name="copy-formpara>ms-<1"
  Copy source>=&quo<t;request&>quot;
 <   FormParams
      FormPa>ram name="par<amName&quo>t;For<m param val>ue <1/For>mPa<ram
    /FormParams
  /Copy
  AssignTo createNew="tr>ue" transp<ort=">;<http" typ>e="request"MyCustomRequest/AssignTo
/AssignMessage

L'esempio seguente copia tutti i parametri del modulo nella richiesta personalizzata "MyCustomRequest":

<AssignMessage name="copy-formpara>ms-<2"
  Copy source>=&quo<t;request&q>uot<;
   > Fo<rmParams/
  /Copy
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo
/AssignMessage

Il seguente esempio copia tre parametri del modulo nella richiesta personalizzata "MyCustomRequest":

<AssignMessage name="copy-formpara>ms-<3"
  Copy source>=&quo<t;request&>quot;
 <   FormParams
      FormPara>m name=<"paramName1"/
    >  FormP<aram name="paramName2&q>uot;/<
      Form>Par<am na>me=<"paramName3"/
    /FormParams
  /Copy
  AssignT>o createNew=&qu<ot;true&q>u<ot; transport=>"http" type="request"MyCustomRequest/AssignTo
/AssignMessage

Se sono presenti più parametri del modulo con lo stesso nome, utilizza la seguente sintassi:

<AssignMessage name="copy-formpara>ms-<4"
  Copy source>=&quo<t;request&>quot;
 <   FormParams
      >FormPar<am name="f1&quo>t;/
   <   FormParam name=&quo>t;f2&<quot;/
    >  F<ormPa>ram< name="f3.2"/
    /FormParams
  /Copy
  AssignT>o createNew=&qu<ot;true&q>u<ot; transport=>"http" type="request"MyCustomRequest/AssignTo
/AssignMessage

Questo esempio copia "f1", "f2" e il secondo valore di "f3". Se "f3" ha un solo valore, non viene copiato.

Puoi utilizzare <FormParams> solo se sono soddisfatti i seguenti criteri:

  • Verbo HTTP: POST
  • Tipo di messaggio: risposta
  • Uno (o entrambi) dei seguenti elementi:
    • Dati del modulo: impostato su un valore o su "" (la stringa vuota). Ad esempio, con curl, aggiungi -d "" alla richiesta.
    • Intestazione Content-Length:impostata su 0 (se non sono presenti dati nella richiesta originale; altrimenti, la lunghezza corrente). Ad esempio, con curl aggiungi -H "Content-Length: 0" alla richiesta.

Quando copi <FormParams>, <Copy> imposta Content-Type del messaggio su "application/x-www-form-urlencoded" prima di inviarlo al servizio di destinazione.

<Headers> (figlio di <Copy>)

Copia le intestazioni HTTP da il messaggio di richiesta o risposta specificato dall'attributo source dell'elemento <Copy> a il messaggio di richiesta o risposta specificato dall'elemento <AssignTo>.

Valore predefinito n/a
Obbligatorio? Facoltativo
Tipo Un array di elementi <Header> o un array vuoto
Elemento principale <Copy>
Elementi secondari <Header>

L'elemento <Headers> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce="[request|response]&qu<ot;
    >!-- Can al<so be a>n empty< array (Headers/) -->
>    Headers
<      H>eader name=&quo<t;header>_na<me&qu>o<t;header_value>/Header
      ...
    /Headers
  /Copy
/AssignMessage

L'esempio seguente copia l'intestazione user-agent dalla richiesta al nuovo oggetto richiesta personalizzato:

<AssignMessage name="copy-heade>rs-<1"
  Copy source>=&quo<t;reque>st"<;
    Headers
      Heade>r nam<e=">use<r-age>nt&<quot;/
    /Headers
  /Copy
  AssignTo createNew="tr>ue" transp<ort=">;<http" typ>e="request"MyCustomRequest/AssignTo
/AssignMessage

Per copiare tutte le intestazioni, utilizza un elemento <Headers> vuoto, come mostrato nell'esempio seguente:

<AssignMessage name="copy-heade>rs-<2"
  Copy source>=&quo<t;reques>t&q<uot;<>/span>
   < Headers/
  /Copy
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo
/AssignMessage

Se sono presenti più intestazioni con lo stesso nome, utilizza la seguente sintassi:

<AssignMessage name="copy-heade>rs-<3"
  Copy source>=&quo<t;reque>st"<;
    Headers
   >   Head<er name="h1&>quot;/
<      Header name=&>quot;<h2">/
 <     >Hea<der name="h3.2"/
    /Headers
  /Copy
  AssignT>o createNew=&qu<ot;true&q>u<ot; transport=>"http" type="request"MyCustomRequest/AssignTo
/AssignMessage

Questo esempio copia "h1", "h2" e il secondo valore di "h3". Se "h3" ha un solo valore, non viene copiato.

<Path> (figlio di <Copy>)

Determina se il percorso deve essere copiato dalla richiesta di origine alla richiesta di destinazione. Questo elemento non ha alcun effetto su una risposta.

Se "true", questa norma copia il percorso da il messaggio di richiesta specificato dall'attributo source dell'elemento <Copy> a il messaggio di richiesta specificato dall'elemento <AssignTo>.

Valore predefinito Falso
Obbligatorio? Facoltativo
Tipo Booleano
Elemento principale <Copy>
Elementi secondari Nessuno

L'elemento <Path> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce>="[requ<est|r>esp<onse]>&<quot;
    Path>[false|true]/Path
  /Copy
/AssignMessage

L'esempio seguente indica che il criterio AssignMessage deve copiare il percorso dalla richiesta di origine al nuovo oggetto richiesta personalizzato:

<AssignMessage name="copy-pa>th-<1"
  Copy source>=&quo<t;re>ques<t&quo>t;
<    P>ath<true/Path
  /Copy
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo
/AssignMessage

Puoi utilizzare <Path> solo se sono soddisfatti i seguenti criteri:

  • Tipo di messaggio: richiesta

<Payload> (figlio di <Copy>)

Determina se il payload deve essere copiato dall'origine alla destinazione. L'origine e la destinazione possono essere richieste o risposte.

Se il valore è "true", questa norma copia il payload da il messaggio specificato dall'attributo source dell'elemento <Copy> a il messaggio specificato dall'elemento <AssignTo>.

Valore predefinito Falso
Obbligatorio? Facoltativo
Tipo Booleano
Elemento principale <Copy>
Elementi secondari Nessuno

L'elemento <Payload> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce=&q>uot;[request<|respons>e]&<quot;>
<    Payload[fa>lse|true]/Payload
  /Copy
/AssignMessage

L'esempio seguente imposta <Payload> su "true" in modo che il payload della richiesta venga copiato dalla richiesta alla risposta:

<AssignMessage name="AM-copy-paylo>ad-<1"
  Copy source>=&quo<t;reque>st&q<uot;
   > Pa<yload>tru<e/Payloa>d
  /Cop<y
  Assig>n<Toresponse/Ass>ignTo
/AssignMessage

<QueryParams> (figlio di <Copy>)

Copia i parametri della stringa di query da una richiesta specificata dall'attributo source dell'elemento <Copy> a una richiesta specificata dall'elemento <AssignTo>. Questo elemento non ha alcun effetto su una risposta.

Valore predefinito n/a
Obbligatorio? Facoltativo
Tipo Un array di elementi <QueryParam> o un array vuoto
Elemento principale <QueryParam>
Elementi secondari Nessuno

L'elemento <QueryParams> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce="[request|response]&qu<ot;
    !-- >Can also b<e an empty >array (<QueryParams/) --&gt;
    QueryPar>ams
      QueryP<aram name=&>quot;queryparam<_name"q>uer<ypara>m<_value/QueryPa>ram
      ...
    /QueryParams
  /Copy
/AssignMessage

Il seguente esempio copia il parametro di query "my_param" dalla richiesta in un nuovo oggetto richiesta personalizzato:

<AssignMessage name="copy-querypara>ms-<1"
  Copy source>=&quo<t;request&q>uot;
  <  QueryParams
      QueryPa>ram n<ame="my>_pa<ram&q>uot<;/
    /QueryParams
  /Copy
  AssignTo createNew="tr>ue" transp<ort=">;<http" typ>e="request"MyCustomRequest/AssignTo
/AssignMessage

L'esempio seguente copia tutti i parametri della query dalla richiesta in un nuovo oggetto richiesta personalizzato:

<AssignMessage name="copy-querypara>ms-<2"
  Copy source>=&quo<t;request&qu>ot;<
    >Que<ryParams/
  /Copy
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo
/AssignMessage

Se sono presenti più parametri di query con lo stesso nome, utilizza la seguente sintassi:

<AssignMessage name="copy-querypara>ms-<3"
  Copy source>=&quo<t;request&q>uot;
  <  QueryParams
      Qu>eryPara<m name="qp1">/
     < QueryParam name="q>p2&qu<ot;/
      Q>uer<yPara>m n<ame="qp3.2"/
    /QueryParams
  /Copy
  AssignT>o createNew=&qu<ot;true&q>u<ot; transport=>"http" type="request"MyCustomRequest/AssignTo
/AssignMessage

Questo esempio copia "qp1", "qp2" e il secondo valore di "qp3". Se "qp3" ha un solo valore, non viene copiato.

Puoi utilizzare <QueryParams> solo se sono soddisfatti i seguenti criteri:

  • Verbo HTTP: GET
  • Tipo di messaggio: richiesta

<ReasonPhrase> (figlio di <Copy>)

Determina se la frase del motivo deve essere copiata dalla risposta di origine alla risposta di destinazione. Questo elemento non ha alcun effetto su una richiesta.

Se "true", questa norma copia ReasonPhrase da la risposta specificata dall'attributo source dell'elemento <Copy> a la risposta specificata dall'elemento <AssignTo>.

Valore predefinito Falso
Obbligatorio? Facoltativo
Tipo Booleano
Elemento principale <Copy>
Elementi secondari Nessuno

L'elemento <ReasonPhrase> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce="[>request|resp<onse]"
 >   <Reaso>n<Phrase[false|t>rue]/ReasonPhrase
  /Copy
/AssignMessage

L'esempio seguente imposta <ReasonPhrase> su true. Con l'elemento di origine e <AssignTo> come specificato, <Copy> copia la frase motivo dal messaggio di risposta denominato nell'oggetto response:

<AssignMessage name="AM-copy-reasonphra>se-<1"
  Copy source="serviceC>allou<tResponse&qu>ot;
<    ReasonPhr>ase<true/>Rea<sonPhras>e
  /Cop<y
  Assig>n<Toresponse/Ass>ignTo
/AssignMessage

Puoi utilizzare <ReasonPhrase> solo quando i messaggi di origine e di destinazione sono di tipo Risposta.

<StatusCode> (figlio di <Copy>)

Determina se il codice di stato viene copiato dalla risposta di origine alla risposta di destinazione. Questo elemento non ha alcun effetto su una richiesta.

Se "true", questo criterio copia il codice di stato dal messaggio di risposta specificato dall'attributo source dell'elemento <Copy> al messaggio di risposta specificato dall'elemento <AssignTo>.

Valore predefinito Falso
Obbligatorio? Facoltativo
Tipo Booleano
Elemento principale <Copy>
Elementi secondari Nessuno

L'elemento <StatusCode> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce=">;[request|re<sponse]&quo>t;
<    S>t<atusCode[false>|true]/StatusCode
  /Copy
/AssignMessage

L'esempio seguente imposta <StatusCode> su "true", che copia il codice di stato dall'oggetto risposta predefinito a un nuovo oggetto risposta personalizzato:

<AssignMessage name="copy-statusco>de-<1"
  Copy source=>"<;response&>quot<;
    Statu>sCo<detru>e/S<tatusCode
  /Copy
  AssignTo createNew="true" tr>ansport="ht<tp" >t<ype="resp>onse"MyCustomResponse/AssignTo
/AssignMessage

Puoi utilizzare <StatusCode> solo quando i messaggi di origine e di destinazione sono di tipo Risposta.

Un utilizzo comune di <StatusCode> è impostare il codice di stato della risposta del proxy su un valore diverso da quello ricevuto dalla destinazione.

<Verb> (figlio di <Copy>)

Determina se il verbo HTTP viene copiato dalla richiesta di origine alla richiesta di destinazione. Questo elemento non ha alcun effetto su una risposta.

Se "true", copia il verbo trovato nell'attributo source dell'elemento <Copy> nella richiesta specificata nell'elemento <AssignTo>.

Valore predefinito Falso
Obbligatorio? Facoltativo
Tipo Booleano
Elemento principale <Copy>
Elementi secondari Nessuno

L'elemento <Verb> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce>="[requ<est|r>esp<onse]>&<quot;
    Verb>[false|true]/Verb
  /Copy
/AssignMessage

L'esempio seguente imposta <Verb> su "true", che copia il verbo dalla richiesta predefinita a una nuova richiesta personalizzata:

<AssignMessage name="copy-ve>rb-<1"
  Copy source>=&quo<t;re>ques<t&quo>t;
<    V>erb<true/Verb
  /Copy
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo
/AssignMessage

Puoi utilizzare <Verb> solo se sono soddisfatti i seguenti criteri:

  • Tipo di messaggio: richiesta

<Version> (figlio di <Copy>)

Determina se la versione HTTP viene copiata dalla richiesta di origine alla richiesta di destinazione. Questo elemento non ha alcun effetto su una risposta.

Se "true", copia la versione HTTP trovata nell'attributo source dell'elemento <Copy> nell'oggetto specificato dall'elemento <AssignTo>.

Valore predefinito Falso
Obbligatorio? Facoltativo
Tipo Booleano
Elemento principale <Copy>
Elementi secondari Nessuno

L'elemento <Version> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name" 
  Co>py so<urce=&q>uot;[request<|respons>e]&<quot;>
<    Version[fa>lse|true]/Version
  /Copy
/AssignMessage

L'esempio seguente imposta <Version> su "true" nella richiesta, che copia la versione dall'oggetto richiesta predefinito a un nuovo oggetto richiesta personalizzato:

<AssignMessage name="copy-versi>on-<1"
  Copy source>=&quo<t;reque>st&q<uot;
   > Ve<rsion>tru<e/Version
  /Copy
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo
/AssignMessage

Puoi utilizzare <Version> solo se sono soddisfatti i seguenti criteri:

  • Tipo di messaggio: richiesta

<DisplayName>

Da utilizzare insieme all'attributo name per etichettare il criterio nell'editor proxy dell'interfaccia utente di gestione con un nome diverso e più naturale.

L'elemento <DisplayName> è comune a tutti i criteri.

Valore predefinito n/a
Obbligatorio? Facoltativo. Se ometti <DisplayName>, viene utilizzato il valore dell'attributo name del criterio
Tipo Stringa
Elemento principale <PolicyElement>
Elementi secondari Nessuno

La sintassi dell'elemento <DisplayName> è la seguente:

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

L'elemento <DisplayName> non ha attributi o elementi secondari.

<IgnoreUnresolvedVariables>

Determina se l'elaborazione si interrompe quando viene rilevata una variabile non risolta.

Valore predefinito Falso
Obbligatorio? Facoltativo
Tipo Booleano
Elemento principale <AssignMessage>
Elementi secondari Nessuno

Imposta su true per ignorare le variabili non risolte e continuare l'elaborazione; altrimenti false. Il valore predefinito è false.

L'impostazione di <IgnoreUnresolvedVariables> su true è diversa dall'impostazione di continueOnError di <AssignMessage> su true, in quanto è specifica per l'impostazione e l'ottenimento dei valori delle variabili. Se imposti continueOnError su true, Edge ignora tutti gli errori, non solo quelli riscontrati durante l'utilizzo delle variabili.

L'elemento <IgnoreUnresolvedVariables> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me="policy_name">; 
  IgnoreUnre<solvedVariables[true|false>]<
  /IgnoreUnre>solvedVariables
/AssignMessage

Nell'esempio riportato di seguito, <IgnoreUnresolvedVariables> è impostato su "true":

<AssignMessage name="AM-Set-Hea>der<s&q>uot;
<  Set
 >   Head<ers
      Header name=&#>39;new-header'{possibly<-defin>ed-va<riable}H>ead<er
 >   </Headers
  /Set
  IgnoreU>nresolv<edVariablestrue
  /IgnoreU>n<resolvedVariab>les
/AssignMessage

Poiché <IgnoreUnresolvedVariables> è impostato su true, se la variabile possibly-defined-variable non è definita, questo criterio non genererà un errore.

<Remove>

Rimuove le intestazioni, i parametri di query, i parametri del modulo e/o il payload del messaggio da un messaggio. Il messaggio può essere una richiesta o una risposta. Specifica su quale messaggio <Remove> agisce utilizzando l'elemento <AssignTo>.

Valore predefinito n/a
Obbligatorio? Facoltativo
Tipo Tipo complesso
Elemento principale <AssignMessage>
Elementi secondari <FormParams>
<Headers>
<Payload>
<QueryParams>

Un caso d'uso comune per <Remove> è eliminare un parametro di query o un'intestazione che contiene informazioni sensibili dall'oggetto richiesta in entrata, per evitare di passarlo al server di backend.

L'elemento <Remove> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=&qu>ot;po<licy_name" 
  Remove
    !-<- Can also >be an empt<y array (F>ormPara<ms/) -->
    FormParams
    >  FormParam nam<e="fo>rmparam_name&qu<ot;formpara>m_val<ue/FormParam
      ...
    /Form<Params
 >   !-- Can< also b>e an em<pty array (Headers/) --&g>t;
    Heade<rs
    >  Header name=&<quot;hea>der_n<ame&quo>t;header_val<ue/Heade>r
   <   ...
    /Headers
    Payload[<false|true]/>Payload
  <  !-- Can a>lso be <an empty array (QueryParams/) --&>gt;
    QueryPar<ams
      Q>ueryParam name=<"queryp>ara<m_name&>q<uot;queryparam>_value/QueryParam
      ...
    /QueryParams
  /Remove
/AssignMessage

Il seguente esempio rimuove il corpo del messaggio dalla risposta:

<AssignMessage name="AM-remo>ve-<1"
  D>isplayNa<meremove-1/D>isp<layNam>e
  R<emove
 >   P<ayloadtr>ue/<Payload>
  </Remove
>  Assign<Torespons>e</AssignTo
/Ass>ignMessage

Nel flusso di risposta, questo criterio rimuove il corpo della risposta, restituendo al client solo le intestazioni HTTP.

L'esempio seguente rimuove tutti i parametri del modulo e un parametro di query dall'oggetto request:

<AssignMessage name="AM-remo>ve-<2">;
  R<emove
    !<-- Empty (F>ormParams/) removes all form par>amete<rs --
    F>ormPa<rams/
    Q>ueryPar<ams
      QueryParam n>ame=&<quot;qp1&quo>t;/<
    /Q>uer<yParams
>  /Remo<ve
  Assi>g<nTorequest/Ass>ignTo
/AssignMessage

L'esempio seguente rimuove tutto da un oggetto messaggio:

<AssignMessage name="AM-remo>ve-<3">
  <Remove/
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

In genere, questa operazione viene eseguita solo se si intende utilizzare l'elemento <Set> o l'elemento <Copy> per impostare alcuni valori di sostituzione nel messaggio.

<FormParams> (figlio di <Remove>)

Rimuove i parametri del modulo specificati dalla richiesta. Questo elemento non ha alcun effetto su una risposta.

Valore predefinito n/a
Obbligatorio? Facoltativo
Tipo Array di elementi <FormParam> o un array vuoto
Elemento principale <Remove>
Elementi secondari <FormParam>

L'elemento <FormParams> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=&qu>ot;po<licy_name" 
  Remove
    !-<- Can also >be an empt<y array (F>ormPara<ms/) -->
    FormParams
    >  FormParam nam<e="fo>rmparam_name&qu<ot;formpara>m_v<alue/Fo>r<mParam
      .>..
    /FormParams
  /Remove
/AssignMessage

L'esempio seguente rimuove tre parametri del modulo dalla richiesta:

<AssignMessage name="AM-remove-formpara>ms-<1">;
  R<emove
    >FormPar<ams
      FormParam name=">;form_p<aram_1"/
      FormParam >name=&q<uot;form_param_2"/
      >FormP<aram name=&>quo<t;form_>par<am_3&quo>t;/
   < /FormPar>a<ms
  /Remove
 > AssignTorequest/AssignTo
/AssignMessage

Il seguente esempio rimuove tutti i parametri del modulo dalla richiesta:

<AssignMessage name="AM-remove-formpara>ms-<2">;
  R<emove
    F>orm<Params/>
  </Remove
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

Se sono presenti più parametri del modulo con lo stesso nome, utilizza la seguente sintassi:

<AssignMessage name="AM-remove-formpara>ms-<3">;
  R<emove
    >FormPar<ams
      FormParam >name=&q<uot;f1"/
      >FormPar<am name="f2">/
   <   FormPara>m n<ame=&qu>ot;<f3.2&quo>t;/
   < /FormPar>a<ms
  /Remove
 > AssignTorequest/AssignTo
/AssignMessage

Questo esempio rimuove "f1", "f2" e il secondo valore di "f3". Se "f3" ha un solo valore, non viene rimosso.

Puoi utilizzare <FormParams> solo se sono soddisfatti i seguenti criteri:

  • Tipo di messaggio: richiesta
  • Content-Type: "application/x-www-form-urlencoded"

<Headers> (figlio di <Remove>)

Rimuove le intestazioni HTTP specificate dalla richiesta o dalla risposta, specificate dall'elemento <AssignTo>.

Valore predefinito n/a
Obbligatorio? Facoltativo
Tipo Array di elementi <Header> o un array vuoto
Elemento principale <Remove>
Elementi secondari <Header>

L'elemento <Headers> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=&qu>ot;po<licy_name" 
  Remove
    !-<- Can al>so be an e<mpty ar>ray (He<aders/) -->;
    Header>s
      Head<er name>="header_n<ame">;he<ader_va>l<ue/Header
    >  ...
    /Headers
  /Remove
/AssignMessage

L'esempio seguente rimuove l'intestazione user-agent dalla richiesta:

<AssignMessage name="AM-remove-one-he>ade<r">;
  R<emove
 >   Head<ers
      Header name=&qu>ot;us<er-agent>&qu<ot;/
  >  /<Headers
>  /Remo<ve
  Assi>g<nTorequest/Ass>ignTo
/AssignMessage

L'esempio seguente rimuove tutte le intestazioni dalla richiesta:

<AssignMessage name="AM-remove-all-hea>der<s">;
  R<emove
  >  H<eaders/>
  </Remove
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

Se sono presenti più intestazioni con lo stesso nome, utilizza la seguente sintassi:

<AssignMessage name="AM-remove-heade>rs-<3">;
  R<emove
 >   Head<ers
      Header >name=&q<uot;h1"/
   >   Head<er name="h2&qu>ot;/
<      He>ade<r name=>&qu<ot;h3.2&>quot;/
<    /Head>e<rs
  /Remove
 > AssignTorequest/AssignTo
/AssignMessage

Questo esempio rimuove "h1", "h2" e il secondo valore di "h3" dalla richiesta. Se "h3" ha un solo valore, non viene rimosso.

<Payload> (figlio di <Remove>)

Determina se <Remove> elimina il payload nella richiesta o nella risposta, che è specificato dall'elemento <AssignTo>. Imposta il valore su "true" per cancellare il payload; altrimenti, imposta il valore su "false". Il valore predefinito è "false".

Valore predefinito Falso
Obbligatorio? Facoltativo
Tipo Booleano
Elemento principale <Remove>
Elementi secondari Nessuno

L'elemento <Payload> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=&qu>ot;po<licy_na>me" 
  <Remove
 >   <Payload>[<false|true]/Pa>yload
  /Remove
/AssignMessage

L'esempio seguente imposta <Payload> su "true" in modo che il payload della richiesta venga cancellato:

<AssignMessage name="AM-remove-paylo>ad-<1">;
  R<emove
 >   P<ayloadtr>ue/<Payload>
  </Remove
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

<QueryParams> (figlio di <Remove>)

Rimuove i parametri di query specificati dalla richiesta. Questo elemento non ha alcun effetto su una risposta.

Valore predefinito n/a
Obbligatorio? Facoltativo
Tipo Array di elementi <QueryParam> o un array vuoto
Elemento principale <Remove>
Elementi secondari <QueryParam>

L'elemento <QueryParams> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=&qu>ot;po<licy_name" 
  Remove
    !-<- Can also b>e an empty< array (Que>ryParam<s/) -->
    QueryParams
      >QueryParam name=<"query>param_name"<;queryparam_>val<ue/Quer>y<Param
      ..>.
    /QueryParams
  /Remove
/AssignMessage

L'esempio seguente rimuove un singolo parametro di query dalla richiesta:

<AssignMessage name="AM-remove-querypara>ms-<1">;
  Rem<ove
      Q>ueryParam<s
        QueryParam n>ame=&qu<ot;qp1">/
 <     /Q>uer<yParams
>  /Remo<ve
  Assi>g<nTorequest/Ass>ignTo
/AssignMessage

Il seguente esempio rimuove tutti i parametri di query dalla richiesta:

<AssignMessage name="AM-remove-querypara>ms-<2">;
  Rem<ove
      Qu>ery<Params/>
  </Remove
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

Se sono presenti più parametri di query con lo stesso nome, utilizza la seguente sintassi:

<AssignMessage name="AM-remove-querypara>ms-<3">;
  Rem<ove
      Q>ueryParam<s
        QueryParam n>ame="<;qp1"/
        Qu>eryParam <name="qp2"/
  >      Q<ueryParam na>me=<"q>p3.<2"/>
      </QueryPar>a<ms
  /Remove
 > AssignTorequest/AssignTo
/AssignMessage

Questo esempio rimuove "qp1", "qp2" e il secondo valore di "qp3" dalla richiesta. Se "qp3" ha un solo valore, non viene rimosso.

Il seguente esempio rimuove il parametro di query apikey dalla richiesta:

<AssignMessage name="AM-remove-query-p>ara<m">;
  R<emove
    Q>ueryPar<ams
      QueryParam name>=&quo<t;apikey&quo>t;/<
    /Q>uer<yParams
>  /Remo<ve
  Assi>g<nTorequest/Ass>ignTo
/AssignMessage

Puoi utilizzare <QueryParams> solo se sono soddisfatti i seguenti criteri:

  • Verbo HTTP: GET
  • Tipo di messaggio: richiesta

<Set>

Imposta le informazioni nel messaggio di richiesta o risposta, specificate dall'elemento <AssignTo>. <Set> sovrascrive le intestazioni o i parametri di query o del modulo già esistenti nel messaggio originale. Le intestazioni e i parametri di query e modulo in un messaggio HTTP possono contenere più valori. Per aggiungere valori aggiuntivi per un'intestazione o un parametro, utilizza l'elemento <Add>.

Valore predefinito n/a
Obbligatorio? Facoltativo
Tipo Tipo complesso
Elemento principale <AssignMessage>
Elementi secondari <FormParams>
<Headers>
<Payload>
<Path>
<QueryParams>
<ReasonPhrase>
<StatusCode>
<Verb>
<Version>

L'elemento <Set> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>"<;policy_na>me"<; 
  Set
    FormParams
      F>ormParam name=&<quot;formp>aram_name"<formparam_v>alue/<FormPar>am
    <  ...
    /FormParams
   > Headers
   <   Head>er name="h<eader_na>me&qu<ot;h>eade<r_val>ue/He<ader
      ...
    /Headers
    Pathpath/Path
    Payload contentType="content_type&q>uot; variab<lePrefix>=&quo<t;prefix&qu>ot;
   <     variableSuffix="suffix&>quot;new_payload</Payload
  >  QueryParams
 <     QueryPa>ram n<ame="qu>eryparam_name&quot;queryparam_<value/QueryPa>ram
 <     ...
 >   /QueryParams
    ReasonPhra<sereason_fo>r_err<or o>r {variable}/ReasonPhrase
    StatusCo<deHTT>P_sta<tus_cod>e or {variable}/Stat<usCod>e
 <   V>e<rb[GET|POST|PU>T|PATCH|DELETE|{variable}]/Verb
    Version[1.0|1.1|{variable}]/Verb
  /Set
/AssignMessage

L'esempio seguente imposta un'intestazione specifica. Quando questo criterio viene allegato al flusso di richiesta, il sistema upstream potrà ricevere un'intestazione aggiuntiva non inclusa nella richiesta in entrata originale.

<AssignMessage name="AM-Set-He>ade<r&q>uot;
<  Set
 >   Header<s
        Header name="authentic>ated-developer"{verifyapikey<.VAK-1.>devel<oper.id}>/He<ader>
  <  /Heade>rs
  /S<et
  Assi>g<nTorequest/Ass>ignTo
/AssignMessage

L'esempio seguente sovrascrive il payload per una risposta, nonché l'intestazione Content-Type.

<AssignMessage name="AM-Overwrite-Pay>loa<d&q>uot;
<  Set
    Payload contentType="ap>plication/json&qu<ot;{ &qu>ot;<stat>us&<quot; : >42 }/Pay<load
  /S>e<t
  AssignTore>sponse/AssignTo
/AssignMessage

<FormParams> (figlio di <Set>)

Sovrascrive i parametri del modulo esistenti in una richiesta e li sostituisce con i nuovi valori che specifichi con questo elemento. Questo elemento non ha alcun effetto su una risposta.

Valore predefinito n/a
Obbligatorio? Facoltativo
Tipo Array di elementi <FormParam>
Elemento principale <Set>
Elementi secondari <FormParam>

L'elemento <FormParams> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy_na>me"<; 
  Set
    FormParams
      F>ormParam name=&<quot;formp>aram_name"<formparam_v>alu<e/Fo>r<mParam
      .>..
    /FormParams
  /Set
/AssignMessage

Il seguente esempio imposta un parametro del modulo denominato "myparam" sul valore della variabile request.header.myparam in una nuova richiesta personalizzata:

<AssignMessage name="AM-set-formpara>ms-<1&q>uot;
<  Set
    >FormPar<ams
      FormParam name>="myparam"{req<uest.heade>r.myp<aram}/FormP>ara<m
  >  /<FormParams
  /Set
  AssignTo createNew="true" t>ransport="<http">;< type="re>quest"MyCustomRequest/AssignTo
/AssignMessage

Puoi utilizzare <FormParams> solo se sono soddisfatti i seguenti criteri:

  • Verbo HTTP: POST
  • Tipo di messaggio: richiesta

Se definisci parametri del modulo vuoti nelle norme (<Add><FormParams/></Add>), le norme non aggiungono parametri del modulo. Equivale a omettere <FormParams>.

<Set> modifica il Content-Type del messaggio in "application/x-www-form-urlencoded" prima di inviarlo all'endpoint di destinazione.

<Headers> (figlio di <Set>)

Sovrascrive le intestazioni HTTP esistenti nella richiesta o nella risposta, specificate dall'elemento <AssignTo>.

Valore predefinito n/a
Obbligatorio? Facoltativo
Tipo Array di elementi <Header>
Elemento principale <Set>
Elementi secondari <Header>

L'elemento <Headers> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy>_name&q<uot; 
  Set
    Headers
 >     Header <name=&q>uot;header_name<"he>ade<r_va>l<ue/Header
    >  ...
    /Headers
  /Set
/AssignMessage

L'esempio seguente imposta l'intestazione x-ratelimit-remaining sul valore della variabile ratelimit.Quota-1.available.count:

<AssignMessage name="AM-Set-RateLimit-He>ade<r&q>uot;
<  Set
 >   Head<ers
      Header name="X-RateL>imit-Remaining"{ratelimit.Quot<a-1.ava>ilabl<e.count}>/He<ader>
  <  /Heade>rs
  /Se<t
  Assig>n<Toresponse/Ass>ignTo
/AssignMessage

Se definisci intestazioni vuote nel criterio (<Set><Headers/></Set>), il criterio non imposta alcuna intestazione. Questa operazione avrà lo stesso effetto dell'omissione di <Headers>.

<Path> (figlio di <Set>)

<Payload> (figlio di <Set>)

Definisce il corpo del messaggio per una richiesta o una risposta, specificato dall'elemento <AssignTo>. Il payload può essere qualsiasi tipo di contenuto valido, ad esempio testo normale, JSON o XML.

Valore predefinito stringa vuota
Obbligatorio? Facoltativo
Tipo Stringa
Elemento principale <Set>
Elementi secondari Nessuno

L'elemento <Payload> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy_name" 
  Set
    Payload contentType=&quot;content_type" variablePrefix=>"prefi<x"<>/span>
   <    > <variableSuffix>="suffix"new_payload/Payload
  /Set
/AssignMessage

L'esempio seguente imposta un payload di testo normale:

<AssignMessage name="set-paylo>ad-<1&q>uot;
<  Set
    Payload contentType=&q>uo<t;text/p>lai<n&qu>o<t;42/Payload
 > /Set
/AssignMessage

L'esempio seguente imposta un payload JSON:

<AssignMessage name="set-paylo>ad-<2&q>uot;
<  Set
    Payload contentType="ap>plication/json"
      {"name&q<uot;:&qu>ot;<foo&>q<uot;, "ty>pe":"bar"}
    /Payload
  /Set
/AssignMessage

L'esempio seguente inserisce i valori delle variabili nel payload racchiudendo i nomi delle variabili tra parentesi graffe:

<AssignMessage name="set-paylo>ad-<3&q>uot;
<  Set
    Payload contentType="ap>plication/json"
      {"name":"f<oo">, &<quot>;<type":&qu>ot;{variable_name}"}
    /Payload
  /Set
/AssignMessage

Nelle versioni precedenti di Apigee, non era possibile utilizzare le parentesi graffe per indicare i riferimenti alle variabili all'interno dei payload JSON. In queste versioni, devi utilizzare gli attributi variablePrefix e variableSuffix per specificare i caratteri delimitatori e utilizzarli per racchiudere i nomi delle variabili, come segue:

<AssignMessage name="set-payloa>d-3<b&q>uot;
<  Set
    Payload contentType="application/json" variablePrefix=&q>uot;@" variableSuffix="#"
      {&quo<t;name&q>uot<;:&q>u<ot;foo", >"type":"@variable_name#"}
    /Payload
  /Set
/AssignMessage

Questa sintassi precedente funziona ancora.

I contenuti di <Payload> vengono trattati come un modello di messaggio. Ciò significa che il criterio AssignMessage sostituisce le variabili racchiuse tra parentesi graffe con il valore delle variabili a cui viene fatto riferimento in fase di runtime.

L'esempio seguente utilizza la sintassi delle parentesi graffe per impostare parte del payload su un valore variabile:

<AssignMessage name="set-paylo>ad-<4&q>uot;
<  Set
    Payload contentType=>"t<ext/>xml"<
 >     r<oot>
        <e1>sunday</e1>
        <e2>funday</e2>
      <  e3{>var1}</e3
    >  /<root>
<    /Payload
 > /Set
/AssignMessage

La tabella seguente descrive gli attributi di <Payload>:

Attributo Descrizione Presenza Tipo
contentType

Se specificato, il valore di contentType viene assegnato all'intestazione HTTP Content-Type.

Facoltativo Stringa
variablePrefix Specifica facoltativamente il delimitatore iniziale di una variabile di flusso. Il valore predefinito è "{". Per maggiori informazioni, vedi Riferimento alle variabili di flusso. Facoltativo Char
variableSuffix Specifica facoltativamente il delimitatore finale di una variabile di flusso. Il valore predefinito è "}". Per ulteriori informazioni, consulta Riferimento alle variabili di flusso. Facoltativo Char

<QueryParams> (figlio di <Set>)

Sovrascrive i parametri di query esistenti nella richiesta con nuovi valori. Questo elemento non ha alcun effetto su una risposta.

Valore predefinito n/a
Obbligatorio? Facoltativo
Tipo Array di elementi <QueryParam>
Elemento principale <Set>
Elementi secondari <QueryParam>

L'elemento <QueryParams> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy_nam>e"< 
  Set
    QueryParams
      Que>ryParam name=&qu<ot;querypar>am_name"qu<eryparam_val>ue/<Quer>y<Param
      ..>.
    /QueryParams
  /Set
/AssignMessage

L'esempio seguente imposta il parametro di query "address" sul valore della variabile request.header.address:

<AssignMessage name="AM-set-querypara>ms<-1&>quot;<  Set
    Q>ueryPar<ams
      QueryParam name>="address"{req<uest.header>.addr<ess}/QueryPa>ram<
   > </QueryParams
 > /Set
/AssignMessage

Puoi utilizzare <QueryParams> solo se sono soddisfatti i seguenti criteri:

  • Verbo HTTP: GET
  • Tipo di messaggio: richiesta

Se definisci parametri di query vuoti nella policy (<Set><QueryParams/></Set>), la policy non imposta alcun parametro di query. È come omettere <QueryParams>.

<ReasonPhrase> (figlio di <Set>)

Imposta la frase di motivo nella risposta. Questa operazione viene normalmente eseguita per il debug in combinazione con <StatusCode>. Questo elemento non ha alcun effetto su una richiesta.

Valore predefinito n/a
Obbligatorio? Facoltativo
Tipo Stringa
Elemento principale <Set>
Elementi secondari Nessuno

L'elemento <ReasonPhrase> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy_name>" 
  Set
    ReasonPhrase<reason_for_er>ror< or >{<variable}/Reas>onPhrase
  /Set
/AssignMessage

L'esempio seguente definisce una semplice frase di motivo:

<AssignMessage name="set-reasonphra>se-<1&q>uot;
<  Set
    Re>asonPhraseBa<d medicine/Re>aso<nPhr>ase<
  /Set
  AssignTo createNew="true" transport=&qu>o<t;http" t>ype="response"/
/AssignMessage

I contenuti di <ReasonPhrase> vengono trattati come un modello di messaggio. Ciò significa che un nome di variabile racchiuso tra parentesi graffe verrà sostituito in fase di runtime con il valore della variabile a cui viene fatto riferimento, come mostrato nell'esempio seguente:

<AssignMessage name="AM-set-reasonphra>se-<2&q>uot;
<  Set
    Re>asonPhrase{calloutresponse.reas<on.phrase}/Re>aso<nPhr>ase<
  /Set
>  Assign<Torespons>e</AssignTo
/Ass>ignMessage

Puoi utilizzare <ReasonPhrase> solo se sono soddisfatti i seguenti criteri:

  • Tipo di messaggio: risposta

<StatusCode> (figlio di <Set>)

Imposta il codice di stato nella risposta. Questo elemento non ha alcun effetto su una richiesta.

Valore predefinito "200" (quando l'attributo createNew di <AssignTo> è impostato su "true")
Obbligatorio? Facoltativo
Tipo Stringa o variable
Elemento principale <Set>
Elementi secondari Nessuno

L'elemento <StatusCode> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy_na>me" 
  Set
    StatusCode<HTTP_status>_co<de o>r< {variable}/St>atusCode
  /Set
/AssignMessage

L'esempio seguente imposta un semplice codice di stato:

<AssignMessage name="AM-set-statuscode>-40<4&q>uot;
<  Set
    >Sta<tusCode404/>Sta<tusC>ode<
  /Set
>  Assign<Torespons>e</AssignTo
/Ass>ignMessage

I contenuti di <StatusCode> vengono trattati come un modello di messaggio. Ciò significa che un nome di variabile racchiuso tra parentesi graffe verrà sostituito in fase di runtime con il valore della variabile a cui viene fatto riferimento, come mostrato nell'esempio seguente:

<AssignMessage name="set-statusco>de-<2&q>uot;
<  Set
    >StatusCode{calloutresponse.st<atus.code}/>Sta<tusC>ode<
  /Set
>  Assign<Torespons>e</AssignTo
/Ass>ignMessage

Puoi utilizzare <StatusCode> solo se sono soddisfatti i seguenti criteri:

  • Tipo di messaggio: risposta

<Verb> (figlio di <Set>)

Imposta il verbo HTTP nella richiesta. Questo elemento non ha alcun effetto su una risposta.

Valore predefinito n/a
Obbligatorio? Facoltativo
Tipo Stringa o variable
Elemento principale <Set>
Elementi secondari Nessuno

L'elemento <Verb> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;pol>icy_name" 
  Set
    Verb[GET|POS<T|PUT>|PA<TCH|>D<ELETE|{variabl>e}]/Verb
  /Set
/AssignMessage

L'esempio seguente imposta un verbo semplice nella richiesta:

<AssignMessage name="AM-set-ve>rb-<1&q>uot;
<  Se>t
  <  Ver>bPO<ST/V>erb<
  /Set
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

I contenuti di <Verb> vengono trattati come un modello di messaggio. Ciò significa che un nome di variabile racchiuso tra parentesi graffe verrà sostituito in fase di runtime con il valore della variabile a cui viene fatto riferimento.

L'esempio seguente utilizza una variabile per compilare un verbo:

<AssignMessage name="AM-set-verb-to-dynamic-v>alu<e&q>uot;
<  Se>t
    Verb{my<_vari>abl<e}/V>erb<
  /Set
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

Puoi utilizzare <Verb> solo se sono soddisfatti i seguenti criteri:

  • Tipo di messaggio: richiesta

<Version> (figlio di <Set>)

Imposta la versione HTTP su una richiesta. Questo elemento non ha alcun effetto su una risposta.

Valore predefinito n/a
Obbligatorio? Facoltativo
Tipo Stringa o variable
Elemento principale <Set>
Elementi secondari Nessuno

L'elemento <Version> utilizza la seguente sintassi:

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
   > na<me=>&quot<;policy>_name" 
  Set
 <   Ve>rsi<on[1>.<0|1.1|{variabl>e}]/Verb
  /Set
/AssignMessage

L'esempio seguente imposta il numero di versione su "1.1":

<AssignMessage name="AM-set-versi>on-<1&q>uot;
<  Set
 >   <Version1>.1/<Vers>io<n
  /Set
 /Ass>ignMessage

Il seguente esempio utilizza una variabile tra parentesi graffe per impostare il numero di versione:

<AssignMessage name="AM-set-versi>on-<2&q>uot;
<  Set
 >   Version{m<y_versio>n}/<Vers>ion<
  /Set
>  Assig<nToreques>t</AssignTo
/Ass>ignMessage

I contenuti di <Version> vengono trattati come un modello di messaggio. Ciò significa che un nome di variabile racchiuso tra parentesi graffe verrà sostituito in fase di runtime con il valore della variabile a cui viene fatto riferimento.

Puoi utilizzare <Version> solo se sono soddisfatti i seguenti criteri:

  • Tipo di messaggio: richiesta

Creare messaggi di richiesta personalizzati

Puoi utilizzare il criterio AssignMessage per creare un messaggio di richiesta personalizzato. Dopo aver creato una richiesta personalizzata, puoi utilizzarla nei seguenti modi:

  • Accedere alle relative variabili in altre policy
  • Trasferiscilo a un servizio esterno

Per creare un messaggio di richiesta personalizzato, utilizza l'elemento <AssignTo> nel criterio AssignMessage. Imposta createNew su "true" e specifica il nome del nuovo messaggio nel corpo dell'elemento, come mostrato nell'esempio seguente:

<AssignMessage name="AM-assign>to-2<" 
  AssignTo createNew="true" transport=&>quot;http" <type=&quo>t;<request"N>ameOfNewMessage/AssignTo 
/AssignMessage

Per impostazione predefinita, Edge non esegue alcuna operazione con il messaggio di richiesta personalizzato. Dopo averlo creato, Edge continuerà il flusso con la richiesta originale. Per utilizzare la richiesta personalizzata, aggiungi un criterio come il criterio ServiceCallout al proxy in grado di trasmettere la richiesta personalizzata a un servizio esterno.

Gli esempi seguenti creano messaggi di richiesta personalizzati:

L'esempio seguente crea un oggetto richiesta personalizzato con Assign Message:

<AssignMessage name="AssignMessa>ge-<3"
  AssignTo createNew="true&>quot; type=&quo<t;request>&qu<ot;M>yCust<omReque>st/Ass<ignTo
  Copy
    Headers
>     <Header n>ame<=&quo>t;u<ser>-agen<t"/
  >  /Head<ers
  /Copy
  Set
    Que>ryParams
      QueryParam< name=">;addr<ess"{re>quest<.que>ryp<aram.>add<y}/Q>uer<yParam
    /QueryParams
 >   VerbG<ET/Verb
  /Set
  IgnoreUnr>e<solvedVariable>sfalse
  /IgnoreUnresolvedVariables
/AssignMessage

In questo esempio:

  • Crea un nuovo oggetto messaggio di richiesta chiamato "MyCustomRequest".
  • Su MyCustomRequest, queste norme:
    • Copia il valore dell'intestazione HTTP user-agent dalla richiesta in entrata al nuovo messaggio. Poiché <Copy> utilizza un riferimento assoluto alla variabile di flusso user-agent, non è necessario specificare l'attributo source per <Copy>.
    • Imposta il parametro di query address nel messaggio personalizzato sul valore del parametro di query addy della richiesta in entrata.
    • Imposta il verbo HTTP su GET.
  • Imposta <IgnoreUnresolvedVariables> su "false". Quando <IgnoreUnresolvedVariables> è "false", se una delle variabili che il criterio tenta di aggiungere non esiste, Edge interromperà l'elaborazione nel flusso API.

Ecco un altro esempio che mostra come creare un oggetto richiesta personalizzato con Assign Message:

<AssignMessage name="AssignMessa>ge-<2"
  AssignTo createNew="true&>quot; type=&quo<t;request>&qu<ot;>partn<er.r>eque<st/As>signT<o
  Set
    VerbPOST/Verb
    >Payload< conten><tType=&qu>ot;<text/xml&q><uot;
   >   re<questope>rat<ion1>0<5/operation/re>quest
    /Payload
  /Set
/AssignMessage

Questo esempio crea una nuova richiesta personalizzata chiamata "partner.request". Imposta quindi <Verb> e <Payload> nella nuova richiesta.

Puoi accedere a un messaggio di richiesta personalizzato in un'altra policy AssignMessage che si verifica più avanti nel flusso. L'esempio seguente recupera il valore dell'intestazione user-agent del messaggio di richiesta personalizzato:

<AssignMessage name="custom-request-1-ac>ces<s"
  D>isplayNamecustom-reques<t-1-access/D>isp<layName
>  AssignTopartn<er.reques>t/A<ssi>gnTo
<  Set
 >   Head<ers
      Header name="user-agentCop>yCustomRequest"{MyCustomReques<t.heade>r.use<r-agent}>/He<ader>
<    /Headers
 > /Set
/AssignMessage

Video

Guarda i seguenti video per scoprire di più sul criterio AssignMessage.

Video Descrizione
Perché assegnare norme per i messaggi? Scopri i vantaggi dell'utilizzo del criterio AssignMessage per modificare la richiesta API o la risposta senza modificare il codice di backend.
Copiare elementi API utilizzando il criterio AssignMessage Copia gli elementi da una richiesta o risposta API e crea un nuovo oggetto richiesta o risposta utilizzando il criterio AssignMessage.
Rimuovi elementi API utilizzando il criterio AssignMessage Rimuovi gli elementi API e modifica l'API prima che raggiunga il backend di destinazione utilizzando il criterio AssignMessage.
Aggiungere e impostare elementi API utilizzando il criterio AssignMessage Modifica la richiesta o la risposta API aggiungendo parametri di query, intestazioni, parametri del modulo o payload utilizzando il criterio AssignMessage.
Creare variabili personalizzate utilizzando il criterio AssignMessage Imposta variabili di flusso personalizzate utilizzando il criterio AssignMessage e sfrutta le variabili in altri criteri nel proxy API.
Crea nuovi oggetti di richiesta o risposta utilizzando il criterio AssignMessage Crea nuovi oggetti di richiesta o risposta API utilizzando il criterio AssignMessage in fase di runtime dell'API.
Crea un'API simulata utilizzando il criterio AssignMessage Crea una semplice API REST simulata aggiungendo il criterio AssignMessage nel flusso di risposta.
Impostare o modificare il payload utilizzando il criterio AssignMessage Converti la richiesta REST in richiesta SOAP impostando il payload SOAP utilizzando il criterio AssignMessage in fase di runtime dell'API.

Codici di errore

Questa sezione descrive i codici e i messaggi di errore restituiti, nonché le variabili di errore impostate da Edge quando questo criterio attiva un errore. È importante sapere se stai sviluppando regole di errore per per gestire gli errori. Per saperne di più, consulta Cosa devi sapere sugli errori relativi ai criteri e sulla gestione di errore.

Errori di runtime

Questi errori possono verificarsi quando il criterio viene eseguito.

Codice di errore Stato HTTP Causa Correggi
steps.assignmessage.SetVariableFailed 500 Il criterio non è stato in grado di impostare una variabile. Controlla la stringa di errore per il nome del non risolta.
steps.assignmessage.VariableOfNonMsgType 500

Questo errore si verifica se l'attributo source nell'elemento <Copy> è impostato su una variabile che non è di tipo message.

Le variabili del tipo di messaggio rappresentano intere richieste e risposte HTTP. Il dispositivo Edge integrato le variabili di flusso request, response e message sono di tipo message. Per scoprire di più sulle variabili dei messaggi, consulta Riferimento per le variabili.

steps.assignmessage.UnresolvedVariable 500

Questo errore si verifica se una variabile specificata nel criterio Assegna messaggio è:

  • fuori ambito (non disponibile nel flusso specifico in cui viene eseguito il criterio)
  • o
  • non può essere risolto (non è definito)

Errori di deployment

Questi errori possono verificarsi quando esegui il deployment di un proxy contenente questo criterio.

Nome errore Causa Correggi
InvalidIndex Se l'indice specificato negli elementi <Copy> e/o <Remove> della sezione Assegna messaggio è 0 o un numero negativo, il deployment del proxy API non va a buon fine.
InvalidVariableName Se l'elemento secondario <Name> è vuoto o non specificato nell'elemento <AssignVariable>, il deployment del proxy API non riesce perché non esiste un nome di variabile valido in a cui assegnare un valore. È richiesto un nome di variabile valido.
InvalidPayload Un payload specificato nel criterio non è valido.

Variabili di errore

Queste variabili vengono impostate quando il criterio attiva un errore in fase di runtime. Per ulteriori informazioni, consulta Cosa che devi conoscere sugli errori relativi alle norme.

Variabili Dove Esempio
fault.name="fault_name" fault_name è il nome dell'errore, come elencato nella precedente tabella Errori di runtime. Il nome dell'errore è l'ultima parte del codice di errore. fault.name Matches "UnresolvedVariable"
assignmessage.policy_name.failed policy_name è il nome specificato dall'utente del criterio che ha generato l'errore. assignmessage.AM-SetResponse.failed = true

Esempio di risposta di errore

{  
   "fault":{  
      "detail":{  
         "errorcode":"steps.assignmessage.VariableOfNonMsgType"
      },
      "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message"
   }
}

Esempio di regola di errore

    <FaultRule name="Assign Message Faults">    <Step>
        <Name>AM-CustomNonMessageTypeErrorResponse</Name>
        <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition>
    </Step>
    <Step>
        <Name>AM-CustomSetVariableErrorResponse</Name>
        <Condition>(fault.name = "SetVariableFailed")</Condition>
    </Step>
    <Condition>(assignmessage.failed = true) </Condition>
</FaultRule>

Schemi

Ogni tipo di policy è definito da uno schema XML (.xsd). Per riferimento, gli schemi delle policy sono disponibili su GitHub.

Argomenti correlati

Esempi funzionanti del criterio AssignMessage sono disponibili negli esempi della piattaforma API.

Per un esempio più avanzato di come eseguire l'override di target.url da ProxyEndpoint, consulta questo articolo della community Apigee.

Per vedere un "set path" in azione in un ServiceCallout policy, consulta questo esempio di Learn by doing negli esempi di GitHub di Apigee. Basta clonare il repository e seguire le istruzioni riportate in questo argomento. L'esempio utilizza il criterio AssignMessage per impostare un percorso della richiesta, quindi utilizza un criterio Service Callout per effettuare la richiesta a un servizio esterno.