Norme di HTTPModifier

Cosa

Il criterio HTTPModifier può modificare un messaggio di richiesta o risposta esistente.

Le norme ti consentono di eseguire le seguenti azioni sui messaggi:

  • Aggiungere nuovi parametri di modulo, intestazioni o parametri di ricerca a un messaggio
  • Rimuovere intestazioni, parametri di ricerca e parametri di modulo da un messaggio
  • Imposta il valore delle proprietà esistenti in un messaggio

Con HTTPModifier, puoi aggiungere, modificare o rimuovere le proprietà della richiesta o della risposta. In alternativa, puoi utilizzare HTTPModifier per creare un messaggio di richiesta o risposta personalizzato e passarlo a un target alternativo, come descritto in Creare messaggi di richiesta personalizzati.

Il criterio HTTPModifier può creare variabili di flusso con i seguenti elementi secondari:

L'ordine in cui organizzi gli elementi <Add>, <Set> e <Remove> è importante. Il criterio esegue queste azioni nell'ordine in cui appaiono nella configurazione del criterio. Se devi rimuovere tutte le intestazioni e impostarne una specifica, devi includere l'elemento <Remove> prima dell'elemento <Set>.

Questo criterio è un criterio standard e può essere implementato in qualsiasi tipo di ambiente. Per informazioni sui tipi di criteri e sulla loro disponibilità in base a ciascun tipo di ambiente, consulta Tipi di criteri.

Elemento <HTTPModifier>

Definisce un criterio HTTPModifier.

Valore predefinito Consulta la scheda Criterio predefinito di seguito
Obbligatorio? Obbligatorio
Tipo Oggetto complesso
Elemento principale N/D
Elementi secondari <Add>
<AssignTo>
<DisplayName>
<IgnoreUnresolvedVariables>
<Remove>
<Set>

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

Sintassi

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

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- All HTTPModifier 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>

  <DisplayName>POLICY_DISPLAY_NAME</DisplayName>

  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>

  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Can also be an empty array to remove all FormParams (<FormParams/>) -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array to remove all Headers (<Headers/>) -->
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
    <!-- Can also be an empty array to remove all QueryParams (<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>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
    <StatusCode>HTTP_STATUS_CODE or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>

</HTTPModifier>

Norme predefinite

L'esempio seguente mostra le impostazioni predefinite quando aggiungi un criterio HTTPModifier al flusso nell'interfaccia utente di Apigee:

<HTTPModifier continueOnError="false" enabled="true" name="http-modifier-default">
  <DisplayName>HTTP Modifier-1</DisplayName>
  <Properties/>
  <Remove>
    <Headers>
      <Header name="h1"/>
    </Headers>
    <QueryParams>
      <QueryParam name="q1"/>
    </QueryParams>
    <FormParams>
      <FormParam name="f1"/>
    </FormParams>
  </Remove>
  <Add>
    <Headers/>
    <QueryParams/>
    <FormParams/>
  </Add>
  <Set>
    <Headers/>
    <QueryParams/>
    <FormParams/>
    <!-- <Verb>GET</Verb> -->
    <Path/>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</HTTPModifier>

Quando inserisci un nuovo criterio HTTPModifier nell'interfaccia utente di Apigee, il modello contiene stub per tutte le operazioni possibili. In genere, selezioni le operazioni da eseguire con questo criterio e rimuovi il resto degli elementi secondari. Ad esempio, se vuoi eseguire un'operazione di aggiunta, utilizza l'elemento <Add> e rimuovi <Remove> e gli altri elementi secondari dal criterio per renderlo più leggibile.

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

Attributo Predefinito Obbligatorio? Descrizione
name N/D 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ò superare i 255 caratteri.

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

continueOnError falso Facoltativo Imposta su false per restituire un errore quando un criterio non va a buon fine. Questo è un comportamento previsto per la maggior parte dei criteri. Imposta su true per continuare l'esecuzione del flusso anche dopo un fallimento del criterio. Vedi anche:
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   falso Ritirato Questo attributo è stato ritirato.

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

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

<Add> aggiunge al messaggio intestazioni o parametri non esistenti nel messaggio originale. Tieni presente che anche <Set> offre questa funzionalità.

Per sovrascrivere intestazioni o parametri esistenti, utilizza l'elemento <Set>.

<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, specificati dall'elemento <AssignTo>.

<Set> sovrascrive le intestazioni o i parametri esistenti nel messaggio originale o ne aggiunge di nuovi se non sono presenti.

Altri elementi secondari
<AssignTo> Facoltativo Specifica il messaggio su cui opera il criterio HTTPModifier. Può trattarsi della richiesta o della risposta standard oppure di un nuovo messaggio personalizzato.
<IgnoreUnresolvedVariables> Facoltativo Determina se l'elaborazione si interrompe quando viene rilevata una variabile non risolta.

Ciascuno di questi elementi secondari è descritto nelle sezioni che seguono.

Esempi

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

1: aggiungi l'intestazione

L'esempio seguente aggiunge un'intestazione alla richiesta con l'elemento <Add>. La variabile VerifyAPIKey in questo esempio viene generata dal regolamento VerifyAPIKey:

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

2: Modifica risposta

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

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

Questo esempio non crea un nuovo messaggio. Modifica invece un messaggio di risposta esistente aggiungendo un'intestazione HTTP.

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

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

3: rimuovi il parametro di query

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

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

È buona norma rimuovere il parametro di query apikey dal messaggio di richiesta quando utilizzi il criterio VerifyAPIKey per l'autenticazione dell'utente. Questo per impedire che informazioni chiave sensibili vengano trasmesse al target di backend.

Riferimento all'elemento secondario

Questa sezione descrive gli elementi secondari di <HTTPModifier>.

<Add>

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

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

Valore predefinito N/D
Obbligatorio? Facoltativo
Tipo Tipo complesso
Elemento principale <HTTPModifier>
Elementi secondari <FormParams>
<Headers>
<QueryParams>

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

Sintassi

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

Esempio 1

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

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

Esempio 2

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

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

Esempio 3

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

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

In questo esempio viene utilizzato <Add> nel preflow della richiesta. Se esamini i risultati in uno strumento come lo strumento di debug, la richiesta a https://example-target.com/get diventa https://example-target.com/get?myParam=42.

Gli elementi secondari di <Add> supportano la sostituzione di stringhe dinamiche, nota come testimonianze dei messaggi.

<FormParams> (elemento secondario di <Add>)

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

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

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

Sintassi

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

Esempio 1

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

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

Esempio 2

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

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

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 di modulo alla richiesta:

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

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

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

username=nick&zip_code=90210&default_language=en

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

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

Ad esempio:

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

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

<Headers> (elemento secondario di <Add>)

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

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

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

Sintassi

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Add>
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
  </Add>
</HTTPModifier>

Esempio 1

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

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

<QueryParams> (elemento secondario di <Add>)

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

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

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

Sintassi

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Add>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Add>
</HTTPModifier>

Esempio 1

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

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

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

  • Verbi HTTP: GET, POST
  • Tipo di messaggio: richiesta

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

Se nella norma definisci un array vuoto di parametri di ricerca (<Add><QueryParams/></Add>), la norma non aggiunge parametri di query. È lo stesso che omettere <QueryParams>.

<AssignTo>

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

  • Messaggio di richiesta: l'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 criterio HTTPModifier. Ad esempio, non puoi utilizzare <Add> o <Set> per aggiungere o modificare parametri di ricerca (<QueryParams>) o i parametri del modulo (<FormParams>) nella risposta. Puoi solo manipulare parametri di ricerca e i parametri del modulo nella richiesta.

Valore predefinito N/D
Obbligatorio? Facoltativo
Tipo Stringa
Elemento principale <HTTPModifier>
Elementi secondari Nessuno

Se non specifichi <AssignTo> o se specifichi l'elemento <AssignTo>, ma non specifichi un valore di testo per l'elemento, il criterio agisce sulla richiesta o sulla risposta predefinita, in base al punto in cui viene eseguito. 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.

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

Sintassi

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <AssignTo createNew="[true|false]" transport="http"
    type="[request|response]">DESTINATION_VARIABLE_NAME</AssignTo>
</HTTPModifier>

Esempio 1

L'esempio seguente non specifica alcun messaggio nel testo del <AssignTo>. Ciò implica che il criterio agirà sul messaggio request o response, a seconda di dove viene eseguito.

<HTTPModifier name="assignto-1">
  <AssignTo createNew="false" transport="http" type="request"/>-- no-op -->
  ...
</HTTPModifier>

Se specifichi createNew="false" e non fornisci esplicitamente un nome del messaggio, gli altri attributi di <AssignTo> sono irrilevanti. In questo caso, potresti omettere completamente l'elemento <AssignTo>.

Esempio 2

L'esempio seguente crea un nuovo oggetto request, sovrascrivendo l'oggetto esistente:

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

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

Puoi accedere al nuovo oggetto richiesta in altri criteri più avanti nel flusso oppure inviare il nuovo oggetto richiesta a un servizio esterno con un criterio ServiceCallout.

Esempio 3

Il seguente esempio crea un nuovo oggetto request denominato MyRequestObject:

<HTTPModifier name="assignto-3">
  <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo>
  ...
</HTTPModifier>

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

Puoi accedere al nuovo oggetto richiesta per nome in altri criteri più avanti nel flusso oppure inviare il nuovo oggetto richiesta a un servizio esterno con un criterio ServiceCallout.

La tabella seguente descrive gli attributi di <AssignTo>:

Attributo Descrizione Obbligatorio? Tipo
createNew

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

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

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

  • Se <AssignTo> riesce a 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 richieste, la variabile è l'oggetto richiesta. Se il criterio si trova in una risposta, la variabile è l'oggetto risposta.
  • Se <AssignTo> non può essere risolto o se si risolve in un tipo di messaggio diverso, il criterio genera un errore.

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

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

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

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

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

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

Facoltativo Stringa

<DisplayName>

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

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

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

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

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
Tipo Booleano
Elemento principale <HTTPModifier>
Elementi secondari Nessuno

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

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

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

Sintassi

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables>
</HTTPModifier>

Esempio 1

Nell'esempio seguente, <IgnoreUnresolvedVariables> viene impostato su true:

<HTTPModifier name="HM-Set-Headers">
  <Set>
    <Headers>
      <Header name='new-header'>{possibly-defined-variable}<Header>
    </Headers>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</HTTPModifier>

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

<Remove>

Rimuove intestazioni, parametri di ricerca o parametri di modulo da un messaggio. Un tag vuoto rimuove tutti i parametri corrispondenti, inclusi headers, formparams e queryparams.

Il messaggio interessato può essere una richiesta o una risposta. Specifica su quale messaggio <Remove> agisce utilizzando l'elemento <AssignTo>.

Valore predefinito N/D
Obbligatorio? Facoltativo
Tipo Tipo complesso
Elemento principale <HTTPModifier>
Elementi secondari <FormParams>
<Headers>
<QueryParams>

Un caso d'uso comune per <Remove> è eliminare un parametro di query o un'intestazione contenente informazioni sensibili dall'oggetto della richiesta in arrivo, per evitare di trasmetterle al server di backend.

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

Sintassi

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Can also be an empty array to remove all FormParams (<FormParams/>) -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
    <!-- Can also be an empty array to remove all Headers (<Headers/>) -->
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
    <!-- Can also be an empty array to remove all QueryParams (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Remove>
</HTTPModifier>

Esempio 1

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

<HTTPModifier name="HM-remove-2">
  <Remove>
    <!-- Empty (<FormParams/>) removes all form parameters -->
    <FormParams/>
    <QueryParams>
      <QueryParam name="qp1"/>
    </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Esempio 2

L'esempio seguente rimuove tutto da un oggetto messaggio:

<HTTPModifier name="HM-remove-3">
  <Remove/>
  <AssignTo>request</AssignTo>
</HTTPModifier>

In genere, esegui questa operazione solo se intendi utilizzare l'elemento <Set> per impostare alcuni valori di sostituzione nel messaggio.

<FormParams> (elemento secondario di <Remove>)

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

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

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

Sintassi

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Can also be an empty array to remove all FormParams (<FormParams/>) -->
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
  </Remove>
</HTTPModifier>

Esempio 1

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

<HTTPModifier name="HM-remove-formparams-1">
  <Remove>
    <FormParams>
      <FormParam name="form_param_1"/>
      <FormParam name="form_param_2"/>
      <FormParam name="form_param_3"/>
    </FormParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Esempio 2

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

<HTTPModifier name="HM-remove-formparams-2">
  <Remove>
    <FormParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Esempio 3

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

<HTTPModifier name="HM-remove-formparams-3">
  <Remove>
    <FormParams>
      <FormParam name="f1"/>
      <FormParam name="f2"/>
      <FormParam name="f3.2"/>
    </FormParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

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

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

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

<Headers> (elemento secondario di <Remove>)

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

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

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

Sintassi

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Can also be an empty array to remove all Headers (<Headers/>) -->
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
  </Remove>
</HTTPModifier>

Esempio 1

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

<HTTPModifier name="HM-remove-one-header">
  <Remove>
    <Headers>
      <Header name="user-agent"/>
    </Headers>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Esempio 2

L'esempio seguente rimuove tutte le intestazioni dalla richiesta:

<HTTPModifier name="HM-remove-all-headers">
  <Remove>
    <Headers/>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Esempio 3

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

<HTTPModifier name="HM-remove-headers-3">
  <Remove>
    <Headers>
      <Header name="h1"/>
      <Header name="h2"/>
      <Header name="h3.2"/>
    </Headers>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

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

<QueryParams> (elemento secondario di <Remove>)

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

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

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

Sintassi

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <!-- Can also be empty to remove everything from the message (<Remove/>) -->
  <Remove>
    <!-- Can also be an empty array to remove all QueryParams (<QueryParams/>) -->
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Remove>
</HTTPModifier>

Esempio 1

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

<HTTPModifier name="HM-remove-queryparams-1">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
      </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Esempio 2

L'esempio seguente rimuove tutti parametri di ricerca dalla richiesta:

<HTTPModifier name="HM-remove-queryparams-2">
  &tl;Remove>
      <QueryParams/>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Esempio 3

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

<HTTPModifier name="HM-remove-queryparams-3">
  <Remove>
      <QueryParams>
        <QueryParam name="qp1"/>
        <QueryParam name="qp2"/>
        <QueryParam name="qp3.2"/>
      </QueryParams>
  </Remove>
  <AssignTo>request</AssignTo>
</HTTPModifier>

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

Esempio 4

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

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

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

  • Verbi HTTP: GET, POST
  • Tipo di messaggio: richiesta

<Set>

Imposta le informazioni nel messaggio di richiesta o risposta, specificate dall'elemento <AssignTo>. <Set> sovrascrive le intestazioni o i parametri di query o del modulo esistenti nel messaggio originale o ne aggiunge di nuovi se non sono presenti.

Le intestazioni e i parametri di query e del modulo in un messaggio HTTP possono contenere più valori. Per aggiungere valori aggiuntivi per un'intestazione o un parametro, utilizza l'elemento <Add>.

Valore predefinito N/D
Obbligatorio? Facoltativo
Tipo Tipo complesso
Elemento principale <HTTPModifier>
Elementi secondari <FormParams>
<Headers>
<Path>
<QueryParams>
<StatusCode>
<Verb>
<Version>

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

Sintassi

<HTTPModifier
    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>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
    <StatusCode>HTTP_STATUS_CODE or {variable}</StatusCode>
    <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb>
    <Version>[1.0|1.1|{variable}]</Verb>
  </Set>
</HTTPModifier>

Esempio

L'esempio seguente imposta un'intestazione specifica. Quando questo criterio viene allegato nel flusso di richieste, consente al sistema a monte di ricevere un'intestazione aggiuntiva non inclusa nella richiesta in entrata originale.

<HTTPModifier name="HM-Set-Header">
  <Set>
    <Headers>
        <Header name="authenticated-developer">{verifyapikey.VAK-1.developer.id}</Header>
    </Headers>
  </Set>
  <AssignTo>request</AssignTo>
</HTTPModifier>

<FormParams> (elemento secondario di <Set>)

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

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

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

Sintassi

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <FormParams>
      <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
      ...
    </FormParams>
  </Set>
</HTTPModifier>

Esempio 1

Nell'esempio seguente, un parametro del modulo chiamato myparam viene impostato sul valore della variabile request.header.myparam in una nuova richiesta personalizzata:

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

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

  • Verbo HTTP: POST
  • Tipo di messaggio: richiesta

Se nel criterio (<Add><FormParams/></Add>) definisci parametri di modulo vuoti, il criterio non aggiunge parametri di modulo. È lo stesso che omettere <FormParams>.

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

<Headers> (elemento secondario di <Set>)

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

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

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

Sintassi

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <Headers>
      <Header name="HEADER_NAME">HEADER_VALUE</Header>
      ...
    </Headers>
  </Set>
</HTTPModifier>

Esempio 1

Nell'esempio seguente, l'intestazione x-ratelimit-remaining viene impostata sul valore della variabile ratelimit.Quota-1.available.count:

<HTTPModifier name="HM-Set-RateLimit-Header">
  <Set>
    <Headers>
      <Header name="X-RateLimit-Remaining">{ratelimit.Quota-1.available.count}</Header>
    </Headers>
  </Set>
  <AssignTo>response</AssignTo>
</HTTPModifier>

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

<Path> (elemento secondario di <Set>)

<QueryParams> (elemento secondario di <Set>)

Sostituisce parametri di ricerca esistenti nella richiesta con nuovi valori. Questo elemento non ha alcun effetto su una risposta.

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

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

Sintassi

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <QueryParams>
      <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
      ...
    </QueryParams>
  </Set>
</HTTPModifier>

Esempio 1

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

<HTTPModifier name="HM-set-queryparams-1">
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.header.address}</QueryParam>
    </QueryParams>
  </Set>
</HTTPModifier>

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

  • Verbi HTTP: GET, POST
  • Tipo di messaggio: richiesta

Se nella norma (<Set><QueryParams/></Set>) definisci parametri di ricerca vuoti, la norma non ne imposta nessuno. È lo stesso che omettere <QueryParams>.

<StatusCode> (elemento secondario di <Set>)

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

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

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

Sintassi

<HTTPModifier
    continueOnError="[false|true]"
    enabled="[true|false]"
    name="POLICY_NAME" >
  <Set>
    <StatusCode>HTTP_STATUS_CODE or {variable}</StatusCode>
  </Set>
</HTTPModifier>

Esempio 1

L'esempio seguente imposta un codice di stato semplice:

<HTTPModifier name="HM-set-statuscode-404">
  <Set>
    <StatusCode>404<<StatusCode>
  </Set>
  <AssignTo>response</AssignTo>
</HTTPModifier>

Esempio 2

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

<HTTPModifier name="set-statuscode-2">
  <Set>
    <StatusCode>{calloutresponse.status.code}</StatusCode>
  </Set>
  <AssignTo>response</AssignTo>
</HTTPModifier>

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

  • Tipo di messaggio: risposta

<Verb> (elemento secondario di <Set>)

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

Valore predefinito N/D
Obbligatorio? Facoltativo
Tipo Stringa o VARIABLE
Elemento principale <Set>
Elementi secondari Nessuno

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

Sintassi

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

Esempio 1

L'esempio seguente imposta un verbo semplice sulla richiesta:

<HTTPModifier name="HM-set-verb-1">
  <Set>
    <Verb>POST</Verb>
  </Set>
  <AssignTo>request</AssignTo>
</HTTPModifier>

Esempio 2

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

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

<HTTPModifier name="HM-set-verb-to-dynamic-value">
  <Set>
    <Verb>{my_variable}</Verb>
  </Set>
  <AssignTo>request</AssignTo>
</HTTPModifier>

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

  • Tipo di messaggio: richiesta

<Version> (elemento secondario di <Set>)

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

Valore predefinito N/D
Obbligatorio? Facoltativo
Tipo Stringa o VARIABLE
Elemento principale <Set>
Elementi secondari Nessuno

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

Sintassi

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

Esempio 1

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

<HTTPModifier name="HM-set-version-1">
  <Set>
    <Version>1.1</Version>
  </Set>
</HTTPModifier>

Esempio 2

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

<HTTPModifier name="HM-set-version-2">
  <Set>
    <Version>{my_version}</Version>
  </Set>
  <AssignTo>request</AssignTo>
</HTTPModifier>

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

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

  • Tipo di messaggio: richiesta

Creare messaggi di richiesta personalizzati

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

  • Accedere alle relative variabili in altri criteri
  • Trasmetterlo a un servizio esterno

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

<HTTPModifier name="assignto-3">
    <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo>
    ...
  </HTTPModifier>

Per impostazione predefinita, Apigee non fa nulla con il messaggio di richiesta personalizzato. Dopo averlo creato, Apigee continuerà con il flusso con la richiesta originale. Per utilizzare la richiesta personalizzata, aggiungi una norma che utilizzi il messaggio di richiesta e fai esplicitamente riferimento al messaggio di richiesta appena creato nella configurazione della norma. In questo modo potrai passare la richiesta personalizzata a un endpoint di servizio esterno.

I seguenti esempi creano messaggi di richiesta personalizzati:

Esempio 1

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

<HTTPModifier name="HTTPModifier-3">
  <AssignTo createNew="true" type="request">MyCustomRequest</AssignTo>
  <Set>
    <QueryParams>
      <QueryParam name="address">{request.queryparam.addy}</QueryParam>
    </QueryParams>
    <Verb>GET</Verb>
  </Set>
  <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
</HTTPModifier>

Questo esempio:

  • Crea un nuovo oggetto messaggio di richiesta denominato MyCustomRequest.
  • In MyCustomRequest, queste norme:
    • Imposta il parametro di query address nel messaggio personalizzato sul valore del parametro di query addy della richiesta in arrivo.
    • Imposta il verbo HTTP su GET.
  • Imposta <IgnoreUnresolvedVariables> su false. Quando <IgnoreUnresolvedVariables> è false, se una delle variabili a cui si fa riferimento nella configurazione del criterio non esiste, Apigee entrerà nello stato di errore nel flusso dell'API.

Esempio 2

Di seguito è riportato un altro esempio che mostra come creare un oggetto di richiesta personalizzato con HTTPModifier:

<HTTPModifier name="HTTPModifier-2">
  <AssignTo createNew="true" type="request">partner.request</AssignTo>
  <Set>
    <Verb>POST</Verb>
  </Set>
</HTTPModifier>

Questo esempio crea una nuova richiesta personalizzata denominata partner.request. Imposta quindi <Verb> sulla nuova richiesta.

Puoi accedere alle varie proprietà di un messaggio personalizzato in un altro criterio HTTPModifier che si verifica più avanti nel flusso. L'esempio seguente recupera il valore di un'intestazione da una risposta personalizzata etichettata e la inserisce in una nuova intestazione nel messaggio di richiesta:

<HTTPModifier name="HM-Set-Header">
  <AssignTo>request</AssignTo>
  <Set>
    <Headers>
      <Header name="injected-approval-id">{MyCalloutResponse.header.approval-id}</Header>
    </Headers>
  </Set>
</HTTPModifier>

Codici di errore

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

Errori di runtime

Questi errori possono verificarsi durante l'esecuzione del criterio.

Codice guasto Stato HTTP Causa Correggi
entities.UnresolvedVariable 500 La variabile del modello di messaggio è in Undefined o fuori ambito.
steps.httpmodifier.InvalidStatusCode 500 Il valore risolto del codice di stato non è valido. Per ulteriori informazioni, consulta la stringa di errore.

Errori di deployment

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

Nome dell'errore Causa Correggi
InvalidIndex Se l'indice specificato negli elementi <Remove> del criterio HTTPModifier è 0 o un numero negativo, il deployment del proxy API non va a buon fine.

Variabili di errore

Queste variabili vengono impostate quando questo criterio attiva un errore in fase di runtime. Per ulteriori informazioni, consulta Informazioni importanti sugli errori relativi alle norme.

Variabili Dove Esempio
httpmodifier.POLICY_NAME.failed POLICY_NAME è il nome specificato dall'utente del criterio che ha generato l'errore. httpmodifier.HM-SetResponse.failed = true

Esempio di risposta di errore

{
   "fault":{
      "detail":{
         "errorcode":"steps.httpmodifier.InvalidStatusCode"
      },
      "faultstring":"HTTPModifier[HM-SetResponse]: Invalid status code bad_request"
   }
}

Esempio di regola di errore

<FaultRule name="HTTPModifier Faults">
    <Step>
        <Name>HM-CustomNonMessageTypeErrorResponse</Name>
        <Condition>(fault.name Matches "InvalidStatusCode")</Condition>
    </Step>
    <Condition>(httpmodifier.failed = true)</Condition>
</FaultRule>

Schemi

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