Criterio Compiti

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

Cosa

Il criterio AttributionMessage modifica o crea nuovi messaggi di richiesta e risposta durante il flusso del proxy API. Il criterio consente di eseguire le seguenti azioni sui messaggi:

  • Aggiungere nuovi parametri di modulo, intestazioni o parametri di query a un messaggio.
  • Copiare le proprietà esistenti da un messaggio all'altro
  • Rimuovi intestazioni, parametri di query, parametri di modulo e/o payload dei messaggi da un messaggio
  • Impostare il valore delle proprietà esistenti in un messaggio

Con il criterio di AttributionMessage, in genere puoi aggiungere, modificare o rimuovere le proprietà della richiesta o della risposta. Tuttavia, puoi utilizzare anche il criterio AttributionMessage per creare un messaggio di richiesta o risposta personalizzato e passarlo a una destinazione alternativa, come descritto in Creare messaggi di richiesta personalizzati.

Il criterio di AttributionMessage può creare o modificare variabili di flusso con i seguenti elementi secondari:

<AssignMessage> elemento

Definisce un criterio di AttributionMessage.

Valore predefinito Consulta la scheda Criterio predefinito di seguito
Obbligatorio? Obbligatorio
Digitare Oggetto complesso
Elemento principale n/d
Elementi secondari <Add>
<AssignTo>
<AssignVariable>
<Copy>
<DisplayName>
<IgnoreUnresolvedVariables>
<Remove>
<Set>

L'elemento <AssignMessage> utilizza la seguente sintassi:

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>

Criterio predefinito

L'esempio seguente mostra le impostazioni predefinite quando aggiungi un criterio AssegnaMessage al flusso nella UI 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 un nuovo criterio AttributionMessage nell'interfaccia utente Edge, il modello contiene stub per tutte le possibili operazioni. In genere, devi selezionare le operazioni che vuoi eseguire con questo criterio e rimuovere il resto degli elementi secondari. Ad esempio, se vuoi eseguire un'operazione di copia, usa 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 Campo obbligatorio? Descrizione
Operazioni comuni
<Add> Facoltativo Aggiunge informazioni all'oggetto del messaggio specificato dall'elemento <AssignTo>.

<Add> aggiunge al messaggio intestazioni o parametri 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 all'oggetto messaggio specificato dall'elemento <AssignTo>.
<Remove> Facoltativo Elimina gli elementi specificati dalla variabile messaggio specificata nell'elemento <AssignTo>.
<Set> Facoltativo Sostituisce i valori delle proprietà esistenti nella richiesta o nella risposta, specificata dall'elemento <AssignTo>.

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

Altri elementi secondari
<AssignTo> Facoltativo Specifica il messaggio su cui funziona il criterio AttributionMessage. Può essere la richiesta o la risposta standard o un nuovo messaggio personalizzato.
<AssignVariable> Facoltativo Assegna un valore a una variabile di flusso. Se la variabile non esiste, viene creata da <AssignVariable>.
<IgnoreUnresolvedVariables> Facoltativo Determina se l'elaborazione si interrompe quando viene rilevata una variabile non risolta.

Ciascuno di questi elementi secondari è descritto nelle sezioni seguenti.

Esempi

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

1: aggiungi intestazione

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

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

2: rimuovi il payload

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

<AssignMessage continueOnError="false" enabled="true" name="remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

3. Modifica la risposta

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

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

In questo esempio non viene creato un nuovo messaggio. Modifica un messaggio di risposta esistente aggiungendo un'intestazione HTTP.

Poiché questo esempio omette un nome di variabile nell'elemento <AssignTo> e specifica type come "response", questo criterio modifica l'oggetto risposta restituito dal server di destinazione.

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

4. Imposta i contenuti dinamici

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

Per incorporare le variabili di flusso Edge in un payload XML, inserisci la variabile designata tra parentesi graffe, come segue: {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="set-dynamic-content">
  <AssignTo createNew="false" type="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 di delimitazione, come mostrato nell'esempio seguente:

<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 la documentazione di riferimento sulle variabili di flusso.

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

5. Rimuovi parametro di query

Nell'esempio seguente il parametro di query apikey viene rimosso dalla richiesta:

<AssignMessage name="remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Una best practice consiste nello eliminare il parametro di query apikey dal messaggio di richiesta quando utilizzi il criterio VerificationAPIKey per l'autenticazione utente. in modo da impedire che informazioni chiave sensibili vengano trasmesse alla destinazione del backend.

6. Imposta/ottieni variabili

Nell'esempio seguente vengono utilizzati tre criteri di assegnazione dei messaggi:

  1. Crea tre variabili di flusso nella richiesta, con valori statici
  2. Restituisce le variabili di flusso in modo dinamico in un secondo criterio nel flusso di richiesta
  3. La imposta nel payload della risposta
<!-- Policy #1: Set variables in the request -->
<AssignMessage continueOnError="false" enabled="true" name="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>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Nel primo criterio, l'elemento <AssignVariable> crea e imposta tre variabili nella richiesta. Ogni elemento <Name> specifica un nome della 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>

Nel secondo criterio, 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 criteri:

  1. Aggiungi i criteri 1 e 2 al flusso di richiesta. Assicurati di inserire il criterio n. 1 prima del criterio 2.
  2. Aggiungi il terzo criterio 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 l'aggregazione tra parentesi graffe.

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

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

    Facoltativamente, puoi visualizzare i risultati tramite un'utilità come xmllint, in modo che il codice XML venga visualizzato in una struttura formattata correttamente:

    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>

7: ottieni le intestazioni delle risposte di callout di servizio

Nel seguente esempio, supponiamo che nella richiesta proxy API sia presente una norma Callout di servizio e che la risposta callout contenga più intestazioni con lo stesso nome (Set-Cookie). Supponendo che la variabile di risposta del callout di servizio sia la variabile predefinita calloutResponse, la seguente norma ottiene il secondo valore di intestazione Set-Cookie.

<AssignMessage continueOnError="false" enabled="true" name="get-header">
  <Set>
    <Payload contentType="application/json">
      {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"}
    </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

{calloutResponse.header.Set-Cookie.values}

Ogni elemento secondario in questo riferimento contiene ulteriori esempi. Per ulteriori esempi, consulta l'esempio diAssignMessage su GitHub.

Riferimento elemento secondario

In questa sezione vengono descritti gli elementi secondari di <AssignMessage>.

<Add>

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

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

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

L'elemento <Add> utilizza la seguente sintassi:

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>

Esempio 1

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

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="name">{request.queryparam.name}</FormParam>
      <FormParam name="zip">{request.queryparam.zipCode}</FormParam>
      <FormParam name="lang">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"/>
</AssignMessage>

Esempio 2

L'esempio seguente utilizza l'elemento <Headers> per aggiungere l'intestazione User-Agent alla richiesta dell'endpoint di destinazione:

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Esempio 3

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

<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Questo esempio utilizza <Add> nel pre-flusso della richiesta. Se guardi i risultati in uno strumento come Trace tool, la richiesta a "http://httpbin.org/get" diventa "http://httpbin.org/get?myParam=42".

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

<FormParams> (secondario di <Add>)

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

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

L'elemento <FormParams> utilizza la seguente sintassi:

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>

Esempio 1

L'esempio seguente aggiunge un singolo parametro di modulo ("answer") e un valore statico ("42") alla richiesta:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-1">
  <Add>
    <FormParams>
      <FormParam name="answer">42</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"></AssignTo>
</AssignMessage>

Esempio 2

L'esempio seguente recupera il valore del parametro della stringa di query name e lo aggiunge alla richiesta come parametro del modulo:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-2">
  <Add>
    <FormParam name="name">{request.queryparam.name}</FormParam>
  </Add>
</AssignMessage>

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

Esempio 3

Nell'esempio seguente vengono aggiunti più parametri del modulo alla richiesta:

<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3">
  <Add>
    <FormParams>
      <FormParam name="name">{request.queryparam.name}</FormParam>
      <FormParam name="zip">{request.queryparam.zipCode}</FormParam>
      <FormParam name="lang">{request.queryparam.lang}</FormParam>
    </FormParams>
  </Add>
  <AssignTo transport="http" type="request"/>
</AssignMessage>

Questo esempio recupera i parametri della stringa di query dalla richiesta di origine e li aggiunge come parametri del modulo alla richiesta inviata all'endpoint di destinazione.

Puoi utilizzare lo strumento Traccia per osservare il flusso. Vedrai che il corpo della richiesta contiene i dati del modulo con codifica URL, che sono stati originariamente trasmessi come parametri della stringa di query:

%7Busername%7D=nick&%7Bzip_code%7D=90210&%7Bdefault_language%7D=en

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

  • Verbo HTTP: POST
  • Tipo di messaggio: richiesta
  • Uno (o entrambi) dei seguenti elementi:
    • Dati del modulo: imposta un valore o "" (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 attuale, 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-urlcoded" prima di inviare il messaggio al servizio di destinazione.

<Headers> (secondario di <Add>)

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

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

L'elemento <Headers> utilizza la seguente sintassi:

Sintassi

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

Esempio 1

Nell'esempio seguente viene aggiunta l'intestazione user-agent al messaggio di richiesta e viene assegnato il valore della variabile di flusso request.user.agent a questa intestazione.

<AssignMessage continueOnError="false" enabled="true" name="add-headers-1">
  <Add>
    <Headers>
      <Header name="user-agent">{request.user.agent}</Header>
    </Headers>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<QueryParams> (secondario di <Add>)

Aggiunge nuovi parametri di query alla richiesta. Questo elemento non ha effetto sulla risposta.

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

L'elemento <QueryParams> utilizza la seguente sintassi:

Sintassi

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

Esempio 1

Nell'esempio seguente, il parametro di query "myParam" viene aggiunto alla richiesta e viene assegnato il valore "42":

<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1">
  <Add>
    <QueryParams>
      <QueryParam name="myParam">42</QueryParam>
    </QueryParams>
  </Add>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

  • Verbo HTTP: GET
  • Tipo di messaggio: richiesta

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

Se definisci un array vuoto di parametri di query nel criterio (<Add><QueryParams/></Add>), il criterio non aggiunge parametri di query. Equivale a omettere <QueryParams>.

<AssignTo>

Determina l'oggetto su cui opera il criterioAssignMessage. Le opzioni sono:

  • Messaggio di richiesta:il valore request ricevuto dal proxy API.
  • Messaggio di risposta: il valore 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 il criterioAssignMessage. 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 i parametri di query e i parametri del modulo solo nella richiesta.

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

Se non specifichi <AssignTo>, il criterio agisce sulla richiesta o sulla risposta predefinita, a seconda di dove viene eseguito il criterio. Se il criterio viene eseguito nel flusso di 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:

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>

Esempio 1

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

<AssignMessage name="assignto-1">
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Se imposti createNew su "false" (valore predefinito), in questo esempio non viene creata una nuova richiesta. Tutte le operazioni in questo criterio influiscono sulla richiesta originale.

Esempio 2

L'esempio seguente crea un nuovo oggetto richiesta:

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

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

Puoi accedere al nuovo oggetto richiesta in altri criteri in un secondo momento nel flusso oppure inviare il nuovo oggetto richiesta a un servizio esterno con un criterio Callout di servizio.

Esempio 3

Nell'esempio seguente viene creato un nuovo oggetto richiesta denominato "MyRequestObject":

<AssignMessage name="assignto-2">
  <AssignTo createNew="true" transport="http" type="request"&gt;MyRequestObject&lt;/AssignTo>
</AssignMessage>

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

Puoi accedere al nuovo oggetto richiesta in altri criteri in un secondo momento nel flusso oppure inviare il nuovo oggetto richiesta a un servizio esterno con un criterio Callout di servizio.

La tabella seguente descrive gli attributi di <AssignTo>:

Attributo Descrizione Campo obbligatorio? Tipo
createNew

Consente di stabilire se questo criterio crea un nuovo messaggio durante l'assegnazione dei valori.

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

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

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

Se createNew non viene specificato, il criterio risponde in uno dei due seguenti modi:

  • Se <AssignTo> restituisce un messaggio, l'elaborazione passa al passaggio successivo.
  • Se <AssignTo> non può essere risolto o si risolve in un tipo non di messaggio, viene creata una nuova variabile di tipo specificata 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".

Il valore predefinito è "request". Se ometti questo attributo, Edge crea una richiesta o una risposta, a seconda di dove viene eseguito questo criterio nel flusso.

Facoltativo Stringa

<AssignVariable>

Assegna un valore a una variabile di flusso di destinazione (ad es. una variabile il cui valore è impostato dal criterio AttributionMessage). Se la variabile di flusso non esiste, viene creata da <AssignVariable>.

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

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

  • Stringa letterale: utilizza l'elemento secondario <Value> per specificare un valore stringa letterale per la variabile di flusso di destinazione.
  • 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 la documentazione di riferimento sulle variabili di flusso.
  • Modello di messaggio: utilizza l'elemento secondario <Template> per specificare un modello di messaggio per la variabile di flusso di destinazione.

L'elemento <AssignVariable> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
    <Value>variable_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>, ha la precedenza sugli altri elementi secondari.

Esempio 1

Nell'esempio seguente il valore di una nuova variabile, myvar, viene impostato sul valore letterale "42":

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

Esempio 2

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 query country alla variabile di flusso di destinazione Country:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

Se una delle assegnazioni non riesce, Edge assegna invece il valore "ErrorOnCopy" alla variabile del flusso di destinazione.

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

Esempio 3

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

<AssignMessage name='template-1'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

Un uso 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. Per farlo, puoi utilizzare una combinazione di entrambi gli elementi secondari <Ref> e <Value>. Per ulteriori informazioni, consulta gli esempi relativi a <Ref>.

<Name> (secondario di <AssignVariable>)

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

Valore predefinito n/d
Obbligatorio? Obbligatorio
Digitare Stringa
Elemento principale <AssignVariable>
Elementi secondari Nessuno

L'elemento <Name> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
  </AssignVariable>
</AssignMessage>

Esempio 1

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

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

Se myvar non esiste, viene creato da <AssignVariable>.

<Ref> (secondario di <AssignVariable>)

Specifica l'origine dell'assegnazione come variabile di flusso. La variabile di flusso può essere una delle variabili di flusso predefinite (come elencate nel Riferimento alle variabili di flusso) o una variabile di flusso personalizzata creata da te.

Il valore di <Ref> viene sempre interpretato come 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/d
Obbligatorio? Facoltativo
Digitare Stringa
Elemento principale <AssignVariable>
Elementi secondari Nessuno

Quando specifichi una variabile di flusso con <Ref>, ometti le parentesi quadre "{}" 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 <Value> alla variabile di flusso di destinazione.

L'elemento <Ref> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Ref>source_variable</Ref>
  </AssignVariable>
</AssignMessage>

Esempio 1

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 query country alla variabile Country:

<AssignMessage name="assignvariable-4">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
  </AssignVariable>
</AssignMessage>

In questo esempio, Edge non ha un valore predefinito (o di riserva) specificato per nessuna delle assegnazioni.

Esempio 2

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 query country alla variabile Country:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

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

Esempio 3

Un caso d'uso comune per <AssignVariable> è impostare il valore predefinito di un parametro di query, di un'intestazione o di 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 che sia visualizzato il 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 un criterio AssegnaMessage come il seguente:

<AssignMessage continueOnError="false" enabled="true" name="assignvariable-3">
  <AssignTo createNew="false" transport="http" type="request"/>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>request.queryparam.w</Name>
    <Ref>request.queryparam.w</Ref>
    <Value>12797282</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 è nulla, ovvero il parametro di query "w" è stato omesso dalla richiesta, questo esempio utilizza il valore predefinito dell'elemento <Value>. Di conseguenza, puoi inviare una richiesta a questo proxy API che omette il parametro di query "w":

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

...e fanno comunque in modo che il proxy API restituisca 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 creata da te.

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> (secondario di <AssignVariable>)

Specifica un modello di messaggio. Un modello di messaggio consente di sostituire le stringhe delle variabili quando il criterio viene eseguito e può combinare stringhe letterali con nomi di variabili inseriti tra parentesi graffe. Inoltre, i modelli di messaggi supportano funzioni come l'escape e la conversione delle maiuscole.

Utilizza l'attributo ref per specificare una variabile di flusso in cui il valore della variabile è un modello di messaggio. Ad esempio, puoi archiviare un modello di messaggio come attributo personalizzato in un'app dello sviluppatore. Quando Edge identifica l'app dello sviluppatore 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 del criterio di sicurezza. L'esempio seguente presuppone che il modello di messaggio sia disponibile in un attributo del cliente denominato message_template nell'app dello sviluppatore che effettua la chiamata API, dove è stato utilizzato il criterio VerificationAPIKey per verificare la chiave API dell'app:

<AssignVariable ref='verifyapikey.myVerifyAPIKeyPolicy.app.name.message_template'/>

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

L'elemento <Template> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Template>message_template</Template>
    or
    <Template ref='template_variable'></Template>
  </AssignVariable>
</AssignMessage>

Esempio 1

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

<AssignMessage name='template-1'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

Esempio 2

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 doverlo modificare:

<AssignMessage name='template-2'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template ref='my_template_variable'/>

  </AssignVariable>
</AssignMessage>

Esempio 3

L'esempio seguente specifica una variabile di flusso e un valore di testo. In questo caso, se la variabile di riferimento è un valore non null, quel valore viene utilizzato come modello. Se il valore di riferimento è nullo, il valore di testo (in questo caso, {system.uuid}-{messageid}) viene utilizzato 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 di riferimento su quel valore:

<AssignMessage name='template-2'>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
  <AssignVariable>
    <Name>my_destination_variable</Name>
    <Value>BADDBEEF</Value>
    <Template ref='my_variable'>{system.uuid}-{messageid}</Template>
  </AssignVariable>
</AssignMessage>

<Value> (secondario di <AssignVariable>)

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

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

Se utilizzato in combinazione con l'elemento <Ref>, <Value> agisce come 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:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <AssignVariable>
    <Name>variable_name</Name>
    <Value>variable_value</Value>
  </AssignVariable>
</AssignMessage>

Esempio 1

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

<AssignMessage name="assignvariable-1">
  <AssignVariable>
    <Name>myvar</Name>
    <Value>42</Value>
  </AssignVariable>
</AssignMessage>

Esempio 2

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 query country alla variabile Country:

<AssignMessage name="assignvariable-2">
  <AssignVariable>
    <Name>myvar</Name>
    <Ref>request.header.user-agent</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
  <AssignVariable>
    <Name>Country</Name>
    <Ref>request.queryparam.country</Ref>
    <Value>ErrorOnCopy</Value>
  </AssignVariable>
</AssignMessage>

Se una delle assegnazioni non riesce, <AssignVariable> assegna invece il valore "ErrorOnCopy" alla variabile del 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>, questo criterio copia i valori nella richiesta o nella risposta, a seconda di dove viene eseguito questo criterio nel flusso.

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

L'elemento <Copy> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
    <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>
  <!-- Used as the destination for the <Copy> values -->
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>
  

Esempio 1

L'esempio seguente copia un'intestazione, tre parametri di modulo, il percorso e tutti i parametri di query dalla richiesta a una nuova richiesta personalizzata:

<AssignMessage continueOnError="false" enabled="true" name="copy-1">
  <Copy source="request">
    <Headers>
      <Header name="Header_Name_1">Header value 1</Header>
    </Headers>
    <FormParams>
      <FormParam name="Form_Param_Name_1">Form param value 1</FormParam>
      <FormParam name="Form_Param_Name_2">Form param value 1</FormParam>
      <FormParam name="Form_Param_Name_3">Form param value 1</FormParam>
    </FormParams>
    <Payload>false</Payload>
    <Path>true</Path>
    <QueryParams/>
    <ReasonPhrase>false</ReasonPhrase>
    <StatusCode>false</StatusCode>
    <Verb>false</Verb>
    <Version>false</Version>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

L'elemento <Copy> ha i seguenti attributi:

Attributo Descrizione Campo obbligatorio? Tipo
origine

Specifica l'oggetto di origine della copia.

  • Se source non è specificato, viene considerato come un semplice messaggio. Ad esempio, se il criterio si trova nel flusso di richiesta, l'origine predefinita utilizzerà l'oggetto request. Se il criterio è nel flusso di risposta, per impostazione predefinita viene utilizzato l'oggetto response. Se ometti source, puoi utilizzare un riferimento assoluto a una variabile di flusso come origine della copia. Ad esempio, specifica il valore come {request.header.user-agent}.
  • Se la variabile di origine non può essere risolta o se si risolve in un tipo non messaggio, <Copy> non risponde.
Facoltativo Stringa

<FormParams> (secondario 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 effetto sulla risposta.

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

L'elemento <FormParams> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Copy>
</AssignMessage>

Esempio 1

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

<AssignMessage name="copy-formparams-1">
  <Copy source="request">
    <FormParams>
      <FormParam name="paramName">Form param value 1</FormParam>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Esempio 2

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

<AssignMessage name="copy-formparams-2">
  <Copy source="request">
    <FormParams/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Esempio 3

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

<AssignMessage name="copy-formparams-3">
  <Copy source="request">
    <FormParams>
      <FormParam name="paramName1"/>
      <FormParam name="paramName2"/>
      <FormParam name="paramName3"/>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Esempio 4

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

<AssignMessage name="copy-formparams-4">
  <Copy source="request">
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

In questo esempio viene copiato "f1", "f2" e il secondo valore "f3". Se "f3" ha un solo valore, non viene copiato.

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

  • Verbo HTTP: POST
  • Tipo di messaggio: risposta
  • Uno (o entrambi) dei seguenti elementi:
    • Dati del modulo: imposta un valore o "" (stringa vuota). Ad esempio, con curl, aggiungi -d "" alla richiesta.
    • Intestazione Content-Length: impostata su 0 (se non sono presenti dati nella richiesta originale; in caso contrario, la lunghezza attuale. 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-urlcoded" prima di inviare il messaggio al servizio di destinazione.

<Headers> (secondario di <Copy>)

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

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

L'elemento <Headers> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Copy>
</AssignMessage>

Esempio 1

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

<AssignMessage name="copy-headers-1">
  <Copy source="request">
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Esempio 2

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

<AssignMessage name="copy-headers-2">
  <Copy source="request">
    <Headers/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Esempio 3

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

<AssignMessage name="copy-headers-3">
  <Copy source="request">
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

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

<Path> (secondario di <Copy>)

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

Se il valore è "true", questo criterio copia il percorso dal messaggio di richiesta specificato dall'attributo source dell'elemento <Copy> al messaggio di richiesta specificato dall'elemento <AssignTo>.

Valore predefinito falso
Obbligatorio? Facoltativo
Digitare Booleano
Elemento principale <Copy>
Elementi secondari Nessuno

L'elemento <Path> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Path>[false|true]</Path>
  </Copy>
</AssignMessage>

Esempio 1

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

<AssignMessage name="copy-path-1">
  <Copy source="request">
    <Path>true</Path>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

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

  • Tipo di messaggio: richiesta

<Payload> (secondario di <Copy>)

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

Se "true", questo criterio copia il payload dal messaggio specificato dall'attributo source dell'elemento <Copy> nel messaggio specificato dall'elemento <AssignTo>.

Valore predefinito falso
Obbligatorio? Facoltativo
Digitare Booleano
Elemento principale <Copy>
Elementi secondari Nessuno

L'elemento <Payload> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Payload>[false|true]</Payload>
  </Copy>
</AssignMessage>

Esempio 1

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

<AssignMessage name="copy-payload-1">
  <Copy source="request">
    <Payload>true</Payload>
  </Copy>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

<QueryParams> (secondario di <Copy>)

Copia i parametri della stringa di query dalla richiesta specificata dall'attributo source dell'elemento <Copy> alla richiesta specificata dall'elemento <AssignTo>. Questo elemento non ha effetto sulla risposta.

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

L'elemento <QueryParams> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Copy>
</AssignMessage>

Esempio 1

L'esempio seguente copia il parametro di query "my_param" dalla richiesta a un nuovo oggetto di richiesta personalizzato:

<AssignMessage name="copy-queryparams-1">
  <Copy source="request">
    <QueryParams>
      <QueryParam name="my_param"/>
    </QueryParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Esempio 2

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

<AssignMessage name="copy-queryparams-2">
  <Copy source="request">
    <QueryParams/>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

Esempio 3

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

<AssignMessage name="copy-queryparams-3">
  <Copy source="request">
    <QueryParams>
      <QueryParam name="qp1"/>
      <QueryParam name="qp2"/>
      <QueryParam name="qp3.2"/>
    </QueryParams>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

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

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

  • Verbo HTTP: GET
  • Tipo di messaggio: richiesta

<ReasonPhrase> (secondario di <Copy>)

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

Se il valore è "true", questo criterio copia ReasonPhrase dalla risposta specificata dall'attributo source dell'elemento <Copy> alla risposta specificata dall'elemento <AssignTo>.

Valore predefinito falso
Obbligatorio? Facoltativo
Digitare Booleano
Elemento principale <Copy>
Elementi secondari Nessuno

L'elemento <ReasonPhrase> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <ReasonPhrase>[false|true]</ReasonPhrase>
  </Copy>
</AssignMessage>

Esempio 1

Nell'esempio seguente, <ReasonPhrase> viene impostato su "true", il che fa sì che <Copy> copi la frase di motivazione dalla risposta predefinita a un oggetto risposta personalizzato:

<AssignMessage name="copy-reasonphrase-1">
  <Copy source="response">
    <ReasonPhrase>true</ReasonPhrase>
  </Copy>
  <AssignTo createNew="trie" transport="http" type="response">MyCustomResponse</AssignTo>
</AssignMessage>

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

  • Tipo di messaggio: risposta

<StatusCode> (secondario di <Copy>)

Determina se il codice di stato viene copiato dalla risposta di origine alla risposta di destinazione. Questo elemento non ha 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
Digitare Booleano
Elemento principale <Copy>
Elementi secondari Nessuno

L'elemento <StatusCode> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <StatusCode>[false|true]</StatusCode>
  </Copy>
</AssignMessage>

Esempio 1

Nell'esempio seguente, <StatusCode> viene impostato su "true", in modo da copiare il codice di stato dall'oggetto risposta predefinito a un nuovo oggetto risposta personalizzato:

<AssignMessage name="copy-statuscode-1">
  <Copy source="response">
    <StatusCode>true</StatusCode>
  </Copy>
  <AssignTo createNew="true" transport="http" type="response">MyCustomResponse</AssignTo>
</AssignMessage>

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

  • Tipo di messaggio: risposta

Un uso comune di <StatusCode> è garantire che la risposta proxy abbia lo stesso stato della risposta ricevuta dal target quando l'attributo createNew di <AssignTo> è impostato su "true".

<Verb> (secondario di <Copy>)

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

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

Valore predefinito falso
Obbligatorio? Facoltativo
Digitare Booleano
Elemento principale <Copy>
Elementi secondari Nessuno

L'elemento <Verb> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Verb>[false|true]</Verb>
  </Copy>
</AssignMessage>

Esempio 1

L'esempio seguente imposta <Verb> su "true", in modo da copiare il verbo dalla richiesta predefinita a una nuova richiesta personalizzata:

<AssignMessage name="copy-verb-1">
  <Copy source="request">
    <Verb>true</Verb>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

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

  • Tipo di messaggio: richiesta

<Version> (secondario di <Copy>)

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

Se il valore è "true", la versione HTTP viene copiata nell'attributo source dell'elemento <Copy> nell'oggetto specificato dall'elemento <AssignTo>.

Valore predefinito falso
Obbligatorio? Facoltativo
Digitare Booleano
Elemento principale <Copy>
Elementi secondari Nessuno

L'elemento <Version> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Copy source="[request|response]">
    <Version>[false|true]</Version>
  </Copy>
</AssignMessage>

Esempio 1

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

<AssignMessage name="copy-version-1">
  <Copy source="request">
    <Version>true</Version>
  </Copy>
  <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

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

  • Tipo di messaggio: richiesta

<DisplayName>

Utilizzalo in aggiunta all'attributo name per etichettare il criterio nell'editor proxy dell'interfaccia utente di gestione con un nome diverso e dal suono più naturale.

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

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

L'elemento <DisplayName> utilizza la seguente sintassi:

Sintassi

<PolicyElement>
  <DisplayName>policy_display_name</DisplayName>
  ...
</PolicyElement>

Esempio

<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
Digitare Booleano
Elemento principale <AssignMessage>
Elementi secondari Nessuno

Impostalo 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 su true per <AssignMessage> perché è specifica per l'impostazione e il recupero 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:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>
</AssignMessage>

Esempio 1

L'esempio seguente imposta <IgnoreUnresolvedVariables> su "true":

<AssignMessage name="ignoreunresolvedvariables">
  <Copy source="response">
    ...
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  </Copy>
</AssignMessage>

<Remove>

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

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

Un caso d'uso comune per <Remove> consiste nell'eliminare un parametro di query contenente informazioni sensibili dall'oggetto della richiesta in entrata, per evitare di passarlo al server di backend.

L'elemento <Remove> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <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>
</AssignMessage>

Esempio 1

L'esempio seguente rimuove il corpo del messaggio dalla risposta:

<AssignMessage continueOnError="false" enabled="true" name="remove-1">
  <DisplayName>remove-1</DisplayName>
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

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

Esempio 2

L'esempio seguente rimuove tutti i parametri del modulo e un parametro di ricerca dalla richiesta in entrata:

<AssignMessage continueOnError="false" enabled="true" name="remove-2">
  <Remove>
    <!-- Empty (<FormParams/>) removes all form parameters -->
    <FormParams/>
    <QueryParams>
      <QueryParam name="qp1"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<FormParams> (secondario di <Remove>)

Rimuove dalla richiesta i parametri del modulo specificati. Questo elemento non ha effetto sulla risposta.

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

L'elemento <FormParams> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<FormParams/>) -->
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Remove>
</AssignMessage>

Esempio 1

Nell'esempio seguente vengono rimossi tre parametri modulo dalla richiesta:

<AssignMessage name="remove-formparams-1">
  <Remove>
    <FormParams>
      <FormParam name="form_param_1"/>
      <FormParam name="form_param_2"/>
      <FormParam name="form_param_3"/>
    </FormParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

Esempio 2

L'esempio seguente rimuove tutti i parametri del modulo dalla richiesta:

<AssignMessage name="remove-formparams-2">
  <Remove>
    <FormParams/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</AssignMessage>

Esempio 3

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

<AssignMessage name="remove-formparams-3">
  <Remove>
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/>
</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 vengono soddisfatti i seguenti criteri:

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

<Headers> (secondario di <Remove>)

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

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

L'elemento <Headers> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<Headers/>) -->
    <Headers>
      <Header name="header_name">header_value</Header>
      ...
    </Headers>
  </Remove>
</AssignMessage>

Esempio 1

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

<AssignMessage name="remove-headers-1">
  <Remove>
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Esempio 2

Nell'esempio seguente vengono rimosse tutte le intestazioni dalla richiesta:

<AssignMessage name="remove-headers-2">
  <Remove>
    <Headers/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Esempio 3

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

<AssignMessage name="remove-headers-3">
  <Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

<Payload> (secondario di <Remove>)

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

Valore predefinito falso
Obbligatorio? Facoltativo
Digitare Booleano
Elemento principale <Remove>
Elementi secondari Nessuno

L'elemento <Payload> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <Payload>[false|true]</Payload>
  </Remove>
</AssignMessage>

Esempio 1

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

<AssignMessage name="remove-payload-1">
  <Remove>
    <Payload>true</Payload>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

<QueryParams> (secondario di <Remove>)

Rimuove i parametri di query specificati dalla richiesta. Questo elemento non ha effetto sulla risposta.

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

L'elemento <QueryParams> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Remove>
    <!-- Can also be an empty array (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="queryparam_name">queryparam_value</QueryParam>
      ...
    </QueryParams>
  </Remove>
</AssignMessage>

Esempio 1

Nell'esempio seguente viene rimosso un singolo parametro di query dalla richiesta:

<AssignMessage name="remove-queryparams-1">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
      </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Esempio 2

L'esempio seguente rimuove tutti i parametri di query dalla richiesta:

<AssignMessage name="remove-queryparams-2">
  <Remove>
      <QueryParams/>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Esempio 3

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

<AssignMessage name="remove-queryparams-3">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
        <QueryParam name="qp2"/>
        <QueryParam name="qp3.2"/>
      </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

Esempio 4

Nell'esempio seguente il parametro di query apikey viene rimosso dalla richiesta:

<AssignMessage name="remove-query-param">
  <Remove>
    <QueryParams>
      <QueryParam name="apikey"/>
    </QueryParams>
  </Remove>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

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

  • Verbo HTTP: GET
  • Tipo di messaggio: richiesta

<Set>

Imposta le informazioni nel messaggio di richiesta o risposta, che vengono specificate dall'elemento <AssignTo>. <Set> sovrascrive le intestazioni o i parametri già presenti nel messaggio originale. Per creare una nuova intestazione o un nuovo parametro, utilizza invece l'elemento <Add>.

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

L'elemento <Set> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <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>

Esempio 1

L'esempio seguente mostra l'elemento <Set>:

<AssignMessage continueOnError="false" enabled="true" name="set-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
    <Headers>
        <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
    <QueryParams>
      <QueryParam name="name">{request.header.name}</QueryParam>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
    <!-- <Verb>GET</Verb> -->
    <Payload contentType="text/plain">42</Payload>
    <Path/>
    <ReasonPhrase>Bad request</ReasonPhrase>
    <StatusCode>400</StatusCode>
    <Verb>POST</Verb>
    <Verb>{my_variable}</Verb>
    <Version>1.1</Version>
  </Set>
  <AssignTo createNew="false" transport="http" type="response"/>
</AssignMessage>

<FormParams> (secondario di <Set>)

Sovrascrive i parametri del modulo esistenti su una richiesta e li sostituisce con i nuovi valori specificati con questo elemento. Questo elemento non ha effetto sulla risposta.

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

L'elemento <FormParams> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <FormParams>
      <FormParam name="formparam_name">formparam_value</FormParam>
      ...
    </FormParams>
  </Set>
</AssignMessage>

Esempio 1

L'esempio seguente imposta un parametro di modulo chiamato "myparam" sul valore della variabile request.header.myparam in una nuova richiesta personalizzata:

<AssignMessage name="set-formparams-1">
  <Set>
    <FormParams>
      <FormParam name="myparam">{request.header.myparam}</FormParam>
    </FormParams>
  </Set>
    <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo>
</AssignMessage>

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

  • Verbo HTTP: POST
  • Tipo di messaggio: richiesta

Se definisci parametri di modulo vuoti nel criterio (<Add><FormParams/></Add>), il criterio non aggiunge alcun parametro del modulo. Equivale a omettere <FormParams>.

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

<Headers> (secondario di <Set>)

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

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

L'elemento <Headers> utilizza la seguente sintassi:

Sintassi

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

Esempio 1

L'esempio seguente imposta l'intestazione user-agent sul valore della variabile request.header.user-agent:

<AssignMessage name="set-headers-1">
  <Set>
    <Headers>
      <Header name="user-agent">{request.header.user-agent}</Header>
    </Headers>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Se definisci intestazioni vuote nel criterio (<Add><Headers/></Add>), il criterio non aggiunge alcuna intestazione. Equivale a omettere <Headers>.

<Path> (secondario di <Set>)

<Payload> (secondario di <Set>)

Definisce il corpo del messaggio per una richiesta o una risposta, che viene 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
Digitare Stringa
Elemento principale <Set>
Elementi secondari Nessuno

L'elemento <Payload> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Payload contentType="content_type" variablePrefix="prefix"
        variableSuffix="suffix">new_payload</Payload>
  </Set>
</AssignMessage>

Esempio 1

Nell'esempio seguente viene impostato un payload in testo normale:

<AssignMessage name="set-payload-1">
  <Set>
    <Payload contentType="text/plain">42</Payload>
  </Set>
</AssignMessage>

Esempio 2

Nell'esempio seguente viene impostato un payload JSON:

<AssignMessage name="set-payload-2">
  <Set>
    <Payload contentType="application/json">
      {"name":"foo", "type":"bar"}
    </Payload>
  </Set>
</AssignMessage>

Esempio 3

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

<AssignMessage name="set-payload-3">
  <Set>
    <Payload contentType="application/json">
      {"name":"foo", "type":"{variable_name}"}
    </Payload>
  </Set>
</AssignMessage>

Nelle versioni precedenti di Apigee Edge, ad esempio prima del rilascio del cloud 16.08.17, non era possibile utilizzare le parentesi graffe per indicare i riferimenti alle variabili all'interno dei payload JSON. In queste release, dovevi utilizzare gli attributi variablePrefix e variableSuffix per specificare i caratteri di delimitazione e utilizzarli per mandare a capo i nomi delle variabili, in questo modo:

<AssignMessage name="set-payload-3b">
  <Set>
    <Payload contentType="application/json" variablePrefix="@" variableSuffix="#">
      {"name":"foo", "type":"@variable_name#"}
    </Payload>
  </Set>
</AssignMessage>

La sintassi precedente è ancora valida.

Esempio 4

I contenuti di <Payload> vengono trattati come un modello di messaggio. Ciò significa che il criterio AssignMessage sostituisce le variabili sottoposte a wrapping in parentesi graffe con il valore delle variabili di 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-payload-4">
  <Set>
    <Payload contentType="text/xml">
      <root>
        <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 Facoltativamente, specifica il delimitatore iniziale su una variabile di flusso. Il valore predefinito è "{". Per ulteriori informazioni, consulta la documentazione di riferimento sulle variabili di flusso. Facoltativo Carbone
variableSuffix Facoltativamente, specifica il delimitatore finale su una variabile di flusso. Il valore predefinito è "}". Per ulteriori informazioni, consulta la sezione Riferimento alle variabili di flusso. Facoltativo Carbone

<QueryParams> (secondario di <Set>)

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

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

L'elemento <QueryParams> utilizza la seguente sintassi:

Sintassi

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

Esempio 1

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

<AssignMessage continueOnError="false" enabled="true" name="set-queryparams-1">
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
  </Set>
</AssignMessage>

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

  • Verbo HTTP: GET
  • Tipo di messaggio: richiesta

Se definisci parametri di query vuoti nel criterio (<Set><QueryParams/></Set>), il criterio non imposta alcun parametro di query. Equivale a omettere <QueryParams>.

<ReasonPhrase> (secondario di <Set>)

Imposta la frase del motivo nella risposta. In genere, questa operazione viene eseguita per il debug in combinazione con <StatusCode>. Questo elemento non ha effetto su una richiesta.

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

L'elemento <ReasonPhrase> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase>
  </Set>
</AssignMessage>

Esempio 1

L'esempio seguente definisce una semplice frase di motivazione:

<AssignMessage name="set-reasonphrase-1">
  <Set>
    <ReasonPhrase>Bad medicine</ReasonPhrase>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Esempio 2

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 di riferimento, come mostra l'esempio seguente:

<AssignMessage name="set-reasonphrase-2">
  <Set>
    <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

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

  • Tipo di messaggio: risposta

<StatusCode> (secondario di <Set>)

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

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

L'elemento <StatusCode> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <StatusCode>HTTP_status_code or {variable}</StatusCode>
  </Set>
</AssignMessage>

Esempio 1

L'esempio seguente imposta un codice di stato semplice:

<AssignMessage name="set-statuscode-1">
  <Set>
    <StatusCode>404</StatusCode>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

Esempio 2

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 di riferimento, come mostra l'esempio seguente:

<AssignMessage name="set-statuscode-2">
  <Set>
    <StatusCode>{calloutresponse.status.code}</StatusCode>
  </Set>
  <AssignTo createNew="true" transport="http" type="response"/>
</AssignMessage>

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

  • Tipo di messaggio: risposta

<Verb> (secondario di <Set>)

Imposta il verbo HTTP nella richiesta. Questo elemento non ha effetto sulla risposta.

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

L'elemento <Verb> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
  </Set>
</AssignMessage>

Esempio 1

L'esempio seguente imposta un verbo semplice nella richiesta:

<AssignMessage name="set-verb-1">
  <Set>
    <Verb>POST</Verb>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Esempio 2

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 di riferimento.

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

<AssignMessage name="set-verb-2">
  <Set>
    <Verb>{my_variable}</Verb>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

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

  • Tipo di messaggio: richiesta

<Version> (secondario di <Set>)

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

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

L'elemento <Version> utilizza la seguente sintassi:

Sintassi

<AssignMessage
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="policy_name" >
  <Set>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</AssignMessage>

Esempio 1

Nell'esempio seguente il numero di versione è impostato su "1.1":

<AssignMessage name="set-version-1">
  <Set>
    <Version>1.1</Version>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

Esempio 2

Quanto segue utilizza una variabile tra parentesi graffe per impostare il numero di versione:

<AssignMessage name="set-version-2">
  <Set>
    <Version>{my_version}</Version>
  </Set>
  <AssignTo createNew="true" transport="http" type="request"/>
</AssignMessage>

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 di riferimento.

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

  • Tipo di messaggio: richiesta

Crea messaggi di richiesta personalizzati

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

  • Accedi alle relative variabili in altri criteri
  • Passarlo a un servizio esterno

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

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

Per impostazione predefinita, Edge non interviene in alcun modo sul messaggio di richiesta personalizzato. Dopo la creazione, Edge continuerà il flusso con la richiesta originale. Per utilizzare la richiesta personalizzata, aggiungi al proxy un criterio come le norme sui callout di servizio che possa passare la richiesta personalizzata a un servizio esterno.

I seguenti esempi creano messaggi di richiesta personalizzati:

Esempio 1

L'esempio seguente crea un oggetto di richiesta personalizzato con Assegna messaggio:

<AssignMessage name="AssignMessage-3">
  <AssignTo createNew="true" type="request">MyCustomRequest</AssignTo>
  <Copy>
    <Headers>
     <Header name="user-agent"/>
    </Headers>
  </Copy>
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.queryparam.addy}</QueryParam>
    </QueryParams>
    <Verb>GET</Verb>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</AssignMessage>

In questo esempio:

  • Crea un nuovo oggetto messaggio di richiesta denominato "MyCustomRequest".
  • Su MyCustomRequest, questo criterio:
    • 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 smetterà di elaborare il flusso API.

Esempio 2

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

<AssignMessage name="AssignMessage-2">
  <AssignTo createNew="true" type="request">partner.request</AssignTo>
  <Set>
    <Verb>POST</Verb>
    <Payload contentType="text/xml">
      <request><operation>105</operation></request>
    </Payload>
  </Set>
</AssignMessage>

In questo esempio viene creata una nuova richiesta personalizzata denominata "partner.request". Quindi, imposta <Verb> e <Payload> sulla nuova richiesta.

Puoi accedere a un messaggio di richiesta personalizzato in un altro criterio di AttributionMessage che si verifica in una fase successiva del flusso. L'esempio seguente restituisce il valore dell'intestazione user-agent del messaggio di richiesta personalizzato:

<AssignMessage name="custom-request-1-access">
  <DisplayName>custom-request-1-access</DisplayName>
  <AssignTo createNew="false" type="request"></AssignTo>
  <Set>
    <Headers>
      <Header name="user-agentCopyCustomRequest">{MyCustomRequest.header.user-agent}</Header>
    </Headers>
  </Set>
</AssignMessage>

Video

Guarda i video che seguono per scoprire di più sulle norme di AttributionMessage.

Video Descrizione
Perché assegnare un criterio ai messaggi? Scopri i vantaggi dell'utilizzo del criterio AssegnaMessage per modificare la richiesta o la risposta API senza modificare il codice di backend.
Copia gli elementi API utilizzando il criterio AssegnaMessage Copia elementi da una richiesta o una risposta API e crea un nuovo oggetto di richiesta o risposta utilizzando il criterio AssegnaMessage.
Rimuovi gli elementi API utilizzando il criterio AssegnaMessage Rimuovi gli elementi dell'API e modifica l'API prima che raggiunga il backend di destinazione utilizzando il criterio AttributionMessage.
Aggiungi e imposta gli elementi API utilizzando il criterio di AttributionMessage Modifica la richiesta o la risposta dell'API aggiungendo parametri di query, intestazioni, parametri del modulo o payload tramite il criterio AssegnaMessage.
Crea variabili personalizzate utilizzando il criterio AssegnaMessage Imposta variabili di flusso personalizzate utilizzando il criterio AssegnaMessage e utilizza le variabili in altri criteri nel proxy API.
Crea nuovi oggetti di richiesta o risposta utilizzando il criterio di AssegnaMessage Crea nuovi oggetti di richieste API o risposte utilizzando il criterio AttributionMessage durante il runtime dell'API.
Crea un'API simulata utilizzando il criterio AssegnaMessage Crea una semplice API REST fittizia aggiungendo il criterio AttributionMessage nel flusso di risposta.
Imposta o modifica il payload utilizzando il criterio di AssegnaMessage Converti le richieste REST in richieste SOAP impostando il payload SOAP tramite il criterio AttributionMessage in fase di runtime API.

Codici di errore

Questa sezione descrive i codici e i messaggi di errore restituiti e le variabili di errore impostate da Edge quando questo criterio attiva un errore. Queste informazioni sono importanti per sapere se si stanno sviluppando regole di errore per gestire gli errori. Per scoprire di più, consulta gli articoli Cosa devi sapere sugli errori relativi alle norme e Gestione degli errori.

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 trovare il nome della variabile non risolta.
steps.assignmessage.VariableOfNonMsgType 500

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

Le variabili del tipo di messaggio rappresentano intere richieste e risposte HTTP. Le variabili di flusso Edge integrate request, response e message sono di tipo messaggio. Per scoprire di più sulle variabili messaggio, consulta la documentazione di riferimento sulle 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> del criterio 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 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 questo criterio attiva un errore in fase di runtime. Per maggiori informazioni, consulta la sezione Cosa devi sapere sugli errori dei criteri.

Variabili Dove Esempio
fault.name="fault_name" fault_name è il nome dell'errore, come indicato nella tabella Errori di runtime riportata sopra. Il nome del guasto è 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="VariableOfNonMsgType"></faultrule><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>

Schema

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

Argomenti correlati

Negli esempi di piattaforma API sono disponibili esempi funzionanti del criterio AttributionMessage.

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

Per vedere un "percorso impostato" in azione in un criterio Callout di servizio, consulta questo esempio di Impara facendo un esempio negli esempi di GitHub di Apigee. Basta clonare il repository e seguire le istruzioni relative all'argomento. L'esempio utilizza il criterio AttributionMessage per impostare un percorso di richiesta e, successivamente, un criterio Callout di servizio per effettuare la richiesta a un servizio esterno.