Questa pagina si applica ad Apigee e Apigee hybrid.
Visualizza la documentazione di Apigee Edge.
Cosa
Il criterio di AttributionMessage consente di modificare una richiesta o un messaggio di risposta esistente oppure di creare una nuova richiesta o un nuovo messaggio di 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 ricerca a un messaggio.
- Copiare le proprietà esistenti da un messaggio all'altro
- Rimuovi intestazioni, parametri di ricerca, parametri di modulo e payload dei messaggi da un messaggio
- Impostare il valore delle proprietà in un messaggio
AttributionMessage consente inoltre di impostare variabili di contesto arbitrarie, indipendentemente dalle operazioni precedenti applicabili a un messaggio.
Con AttributionMessage puoi aggiungere, modificare o rimuovere le proprietà della richiesta o della risposta. In alternativa, puoi utilizzare AttributionMessage per creare un messaggio di richiesta o risposta personalizzato e passarlo a una destinazione alternativa, come descritto in Creare messaggi di richiesta personalizzati.
Questo criterio è un criterio estendibile e il suo utilizzo potrebbe avere implicazioni in termini di costi o utilizzo, a seconda della licenza Apigee. Per informazioni sui tipi di criteri e sulle implicazioni di utilizzo, consulta Tipi di criteri.
Il criterio di AttributionMessage può creare o modificare variabili di flusso con i seguenti elementi secondari:
L'ordine in cui organizzare gli elementi <Add>
, <Copy>
, <Set>
e <Remove>
è importante. Il criterio esegue queste azioni nell'ordine in cui vengono visualizzate nella relativa configurazione. Se devi rimuovere tutte le intestazioni, quindi impostare un'intestazione specifica, devi includere l'elemento <Remove>
prima dell'elemento <Set>
.
<AssignMessage>
elemento
Definisce un criterio di AttributionMessage.
Valore predefinito | Consulta la scheda Criterio predefinito di seguito |
Obbligatorio? | Obbligatorio |
Tipo | 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> <PropertySetRef>SOURCE_VARIABLE</PropertySetRef> <Ref>SOURCE_VARIABLE</Ref> <ResourceURL>RESOURCE_URL_OR_TEMPLATE</ResourceURL> <Template>MESSAGE_TEMPLATE</Template> or <Template ref='TEMPLATE_VARIABLE'></Template> <Value>VARIABLE_VALUE</Value> </AssignVariable> <Copy source="VARIABLE_NAME"> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam> ... </FormParams> <!-- Copy all headers --> <Headers/> <!-- or, copy specific headers by name --> <Headers> <Header name="HEADER_NAME"/> <!-- or --> <Header name="HEADER_NAME">[false|true]</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> <StatusCode>[false|true]</StatusCode> <Verb>[false|true]</Verb> <Version>[false|true]</Version> </Copy> <DisplayName>POLICY_DISPLAY_NAME</DisplayName> <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables> <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Remove all form parameters --> <FormParams/> <!-- or, remove specific form parameters by name --> <FormParams> <FormParam name="FORMPARAM_NAME"/> <!-- or --> <FormParam name="FORMPARAM_NAME">[false|true]</FormParam> ... </FormParams> <!-- Remove all headers --> <Headers/> <!-- or, remove specific headers by name --> <Headers> <Header name="HEADER_NAME"/> <!-- or --> <Header name="HEADER_NAME">[false|true]</Header> ... </Headers> <Payload>[false|true]</Payload> <!-- Remove all query parameters --> <QueryParams/> <!-- or, remove specific query parameters by name --> <QueryParams> <QueryParam name="QUERYPARAM_NAME"/> <!-- or --> <QueryParam name="QUERYPARAM_NAME">[false|true]</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> <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 AttributionMessage al flusso nell'interfaccia utente di Apigee:
<AssignMessage continueOnError="false" enabled="true" name="assign-message-default"> <DisplayName>Assign Message-1</DisplayName> <Properties/> <Copy source="request"> <Headers/> <QueryParams/> <FormParams/> <Payload/> <Verb/> <StatusCode/> <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 AssegnaMessage nell'interfaccia utente di Apigee, il modello contiene stub per tutte le operazioni possibili. 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 | Predefinito | Obbligatorio? | Descrizione |
---|---|---|---|
name |
N/A | Obbligatorio |
Il nome interno del criterio. Il valore dell'attributo Facoltativamente, utilizza l'elemento |
continueOnError |
falso | Facoltativo | Imposta su false per restituire un errore in caso di errore del criterio. Questo è un comportamento previsto per
la maggior parte dei criteri. Imposta su true per continuare l'esecuzione del flusso anche dopo un errore nel 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 | Deprecato | Questo attributo è stato ritirato. |
La tabella seguente fornisce una descrizione generale degli elementi secondari di <AssignMessage>
:
Elemento secondario | Obbligatorio? | Descrizione |
---|---|---|
Operazioni comuni | ||
<Add> |
Facoltativo | Aggiunge informazioni all'oggetto del messaggio specificato dall'elemento
<AssignTo> .
Per sovrascrivere intestazioni o parametri esistenti, utilizza l'elemento |
<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> .
|
Altri elementi secondari | ||
<AssignTo> |
Facoltativo | Specifica il messaggio su cui funziona il criterio AttributionMessage. Può essere una richiesta o una 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 name="AM-add-headers-1"> <Add> <Headers> <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header> </Headers> </Add> <AssignTo>request</AssignTo> </AssignMessage>
2: rimuovi il payload
L'esempio seguente elimina il payload dalla risposta con l'elemento <Remove>
:
<AssignMessage name="AM-remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo>response</AssignTo> </AssignMessage>
3. Modifica la risposta
L'esempio seguente modifica un oggetto risposta esistente aggiungendo un'intestazione:
<AssignMessage name="AM-modify-response"> <Set> <Headers> <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo>response</AssignTo> </AssignMessage>
In questo esempio non viene creato un nuovo messaggio. Modifica un messaggio di risposta esistente aggiungendo un'intestazione HTTP.
Poiché in questo esempio viene specificato response
come nome della variabile nell'elemento
<AssignTo>
, questo criterio modifica l'oggetto di risposta originariamente impostato
con i dati restituiti 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 di assegnazione dei messaggi 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.
4. Imposta i contenuti dinamici
Puoi utilizzare AttributionMessage per incorporare contenuti dinamici nel payload dei messaggi di risposta e di richiesta.
Per incorporare le variabili di flusso 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="AM-set-dynamic-content"> <AssignTo>response</AssignTo> <Set> <Payload contentType="text/xml"> <User-agent>{request.header.user-agent}</User-agent> </Payload> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </AssignMessage>
Per i payload JSON, puoi inserire variabili utilizzando gli attributi variablePrefix
e variableSuffix
con caratteri 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.
Puoi anche utilizzare parentesi graffe per inserire variabili.
5. Rimuovi parametro di query
Nell'esempio seguente il parametro di query apikey
viene rimosso dalla richiesta:
<AssignMessage name="AM-remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Una best practice consiste nel rimuovere 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
L'esempio seguente utilizza tre criteri di AssegnaMessage:
- Crea tre variabili di flusso nella richiesta, con valori statici
- Restituisce le variabili di flusso in modo dinamico in un secondo criterio nel flusso di richiesta
- La imposta nel payload della risposta
<!-- Policy #1: Set variables in the request --> <AssignMessage name="AM-set-variables"> <!-- Create a variable named myAppSecret --> <AssignVariable> <Name>myAppSecret</Name> <Value>42</Value> </AssignVariable> <!-- Create a variable named config.environment --> <AssignVariable> <Name>config.environment</Name> <Value>test</Value> </AssignVariable> <!-- Create a variable named config.protocol --> <AssignVariable> <Name>config.protocol</Name> <Value>gopher</Value> </AssignVariable> </AssignMessage>
Nel primo criterio, l'elemento <AssignVariable>
crea e imposta tre variabili nella richiesta. Ogni elemento <Name>
specifica un nome 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:
- Aggiungi i criteri 1 e 2 al flusso di richiesta. Assicurati di inserire il criterio n. 1 prima del criterio 2.
- Aggiungi il terzo criterio nel flusso di risposta.
- 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>
suapplication/xml
. - 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: recupero delle intestazioni della risposta ServiceCallout
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 il valore predefinito calloutResponse
, la seguente norma ottiene il secondo valore di intestazione Set-Cookie
.
<AssignMessage name="AM-Payload-from-SC-header"> <Set> <Payload contentType="application/json"> {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"} </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo>response</AssignTo> </AssignMessage>
Per elencare tutti i valori dell'intestazione, utilizza invece la seguente variabile:
{calloutResponse.header.Set-Cookie.values}
8. Archiviazione e rimozione di parametri di modulo, intestazioni e parametri di query
Se vuoi utilizzare <Remove>
per eliminare intestazioni, parametri di ricerca o parametri del modulo, ma mantenere l'accesso ai relativi valori in un secondo momento nel flusso dei criteri, puoi archiviare i valori utilizzando <AssignVariable>
.
<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-StoreAndRemove"> <DisplayName>AM-StoreAndRemove</DisplayName> <AssignVariable> <Name>var_grant_type</Name> <Ref>request.formparam.grant_type</Ref> </AssignVariable> <Remove> <Headers/> <FormParams/> <Payload/> </Remove> <Set> <Headers> <Header name="Content-Type">application/x-www-form-urlencoded</Header> <Header name="Accept">application/json</Header> <Header name="Grant-Type">{var_grant_type}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
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. Tieni presente che anche <Set>
fornisce questa funzionalità. Per modificare i valori delle proprietà esistenti, utilizza l'elemento <Set>
.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | 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 name="AM-add-formparams-3"> <Add> <FormParams> <FormParam name="username">{request.queryparam.name}</FormParam> <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam> <FormParam name="default_language">{request.queryparam.lang}</FormParam> </FormParams> </Add> <Remove> <QueryParams/> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Esempio 2
L'esempio seguente utilizza l'elemento <Headers>
per aggiungere un'intestazione partner-id
alla richiesta che verrà inviata all'endpoint di destinazione:
<AssignMessage name="AM-add-headers-1"> <Add> <Headers> <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header> </Headers> </Add> <AssignTo>request</AssignTo> </AssignMessage>
Esempio 3
L'esempio seguente utilizza l'elemento <QueryParams>
per aggiungere alla richiesta un singolo parametro
di query con un valore statico:
<AssignMessage name="AM-add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo>request</AssignTo> </AssignMessage>
Questo esempio utilizza <Add>
nel pre-flusso della richiesta. Se esamini i risultati in uno strumento come Panoramica del 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 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 |
Tipo | 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 name="AM-add-formparams-1"> <Add> <FormParams> <FormParam name="answer">42</FormParam> </FormParams> </Add> <AssignTo>request</AssignTo> </AssignMessage>
Esempio 2
L'esempio seguente recupera il valore del parametro di query name
e
lo aggiunge alla richiesta come parametro del modulo, poi lo rimuove:
<AssignMessage name="AM-Swap-QueryParam-to-FormParams"> <Add> <FormParam name="name">{request.queryparam.name}</FormParam> </Add> <Remove> <QueryParam name="name"/> </Remove> </AssignMessage>
Tieni presente che questo esempio non specifica un target con <AssignTo>
. Questo criterio aggiunge il parametro solo alla richiesta.
Esempio 3
Nell'esempio seguente vengono aggiunti più parametri del modulo alla richiesta:
<AssignMessage name="AM-add-formparams-3"> <Add> <FormParams> <FormParam name="username">{request.queryparam.name}</FormParam> <FormParam name="zip_code">{request.queryparam.zipCode}</FormParam> <FormParam name="default_language">{request.queryparam.lang}</FormParam> </FormParams> </Add> <Remove> <QueryParams/> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Questo esempio recupera i parametri della stringa di query dalla richiesta di origine e li aggiunge come parametri del modulo con nomi diversi. quindi rimuove i parametri di ricerca originali. Apigee invierà la richiesta modificata all'endpoint di destinazione.
Puoi utilizzare la panoramica del debug per esaminare 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:
username=nick&zip_code=90210&default_language=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, concurl
aggiungi-H "Content-Length: 0"
alla richiesta.
- Dati del modulo: imposta un valore o "" (stringa vuota). Ad esempio, con
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>
(secondario di <Add>
)
Aggiunge nuove intestazioni alla richiesta o risposta specificata, che è specificata dall'elemento
<AssignTo>
.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | 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 un'intestazione partner-id
al messaggio di richiesta e viene assegnato il valore della variabile di flusso verifyapikey.VAK-1.developer.app.partner-id
a questa intestazione.
<AssignMessage name="AM-add-headers-1"> <Add> <Headers> <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header> </Headers> </Add> <AssignTo>request</AssignTo> </AssignMessage>
<QueryParams>
(secondario di <Add>
)
Aggiunge nuovi parametri di ricerca alla richiesta. Questo elemento non ha effetto sulla risposta.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | 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 viene aggiunto il parametro di query myParam
alla richiesta e viene assegnato il valore 42
:
<AssignMessage name="AM-add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo>request</AssignTo> </AssignMessage>
Puoi utilizzare <QueryParams>
solo se vengono soddisfatti i seguenti criteri:
- Verbi HTTP:
GET
,POST
,PATCH
,DELETE
- Tipo di messaggio: richiesta
Inoltre, puoi impostare parametri di ricerca 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 ricerca 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 parametri di ricerca
(<QueryParams>
) o i parametri del modulo (<FormParams>
) nella risposta. Puoi manipolare parametri di ricerca e i parametri del modulo solo nella richiesta.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<AssignMessage>
|
Elementi secondari | Nessuna |
Se non specifichi <AssignTo>
o l'elemento <AssignTo>
, ma non specifichi un valore di testo per l'elemento, il criterio agisce sulla richiesta o sulla risposta predefinita, che si basa su 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 non specifica nessun messaggio nel testo dell'attributo <AssignTo>
. Ciò significa che il criterio agirà sul messaggio request
o response
, a seconda di dove viene eseguito.
<AssignMessage name="assignto-1"> <AssignTo createNew="false" transport="http" type="request"/> <!-- no-op --> ... </AssignMessage>
Se specifichi createNew="false"
e non fornisci esplicitamente un nome per il messaggio, gli altri attributi di <AssignTo>
non sono pertinenti. In questo caso, potresti omettere completamente l'elemento <AssignTo>
.
Esempio 2
L'esempio seguente crea un nuovo oggetto richiesta, sovrascrivendo l'oggetto esistente:
<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 AttributionMessage (come <Add>
, <Set>
e <Copy>
) agiscono sul 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
L'esempio seguente crea un nuovo oggetto richiesta denominato MyRequestObject
:
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo> ... </AssignMessage>
Quando crei un nuovo oggetto richiesta o risposta, gli altri elementi del criterio AttributionMessage (come <Add>
, <Set>
e <Copy>
) agiscono sul nuovo oggetto richiesta.
Puoi accedere al nuovo oggetto richiesta in base al nome 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 | Obbligatorio? | Tipo |
---|---|---|---|
createNew |
Consente di stabilire se questo criterio crea un nuovo messaggio durante l'assegnazione dei valori. Se Se
Se
|
Facoltativo | Booleano |
transport |
Specifica il tipo di trasporto per il tipo di messaggio di richiesta o risposta. Il valore predefinito è |
Facoltativo | Stringa |
type |
Specifica il tipo del nuovo messaggio quando createNew è true . I valori validi sono request o response .
Il valore predefinito è |
Facoltativo | Stringa |
<AssignVariable>
Assegna un valore a una variabile di flusso di destinazione (ad esempio una variabile il cui valore è impostato dal criterio
di AttributionMessage). Se la variabile di flusso non esiste, viene creata da <AssignVariable>
. Puoi utilizzare più elementi AssegnaVariable all'interno del criterioAssignMessage. Vengono eseguite in ordine di visualizzazione nella configurazione dei criteri.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Tipo complesso |
Elemento principale |
<AssignMessage>
|
Elementi secondari |
<Name> (obbligatorio)<PropertySetRef> <Ref> <ResourceURL> <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. - Set di proprietà: utilizza l'elemento secondario
<PropertySetRef>
per recuperare il valore da una coppia nome/chiave di set di proprietà e memorizzarlo in una variabile di flusso. Consente di accedere agli insiemi di proprietà in modo dinamico. - URL risorsa: utilizza l'elemento secondario
<ResourceURL>
per specificare un URL per una risorsa di testo di tipo XSL, XSD, WSDL, JavaScript o OpenAPI Spec. In questo modo, i contenuti della risorsa vengono assegnati nella variabile di flusso denominata. - Modello di messaggio: utilizza l'elemento secondario
<Template>
per specificare un modello di messaggio per la variabile di flusso di destinazione.
L'ordine di precedenza per questi elementi secondari è: ResourceURL, Template, Ref, Value, PropertySetRef.
L'elemento <AssignVariable>
utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <AssignVariable> <Name>VARIABLE_NAME</Name> <PropertySetRef>SOURCE_VARIABLE</PropertySetRef> <Ref>SOURCE_VARIABLE</Ref> <ResourceURL>RESOURCE_URL_OR_TEMPLATE</ResourceURL> <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, Apigee utilizza il valore
specificato dall'elemento <Value>
. Se definisci <Template>
, ha la precedenza sugli elementi di pari livello <Ref>
e <Value>
.
Esempio 1
Nell'esempio seguente il valore di una nuova variabile, myvar
, viene impostata 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, Apigee 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='AV-via-template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
Esempio 4
L'esempio seguente utilizza <AssignVariable>
per disabilitare il comportamento predefinito della propagazione del suffisso del percorso dalla richiesta proxy alla richiesta di destinazione:
<AssignMessage name='AM-PathSuffixFalse'> <AssignVariable> <Name>target.copy.pathsuffix</Name> <Value>false</Value> </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, ovvero la variabile il cui valore è impostato dal criterio
di AttributionMessage. Se la variabile denominata in <Name>
non esiste, il criterio ne crea una con questo nome.
Valore predefinito | N/D |
Obbligatorio? | Obbligatorio |
Tipo | Stringa |
Elemento principale |
<AssignVariable>
|
Elementi secondari | Nessuna |
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>
.
<PropertySetRef>
(secondario di <AssignVariable>
)
Questo elemento consente di recuperare in modo dinamico il valore di una coppia nome/chiave di un set di proprietà. Per scoprire di più sugli insiemi di proprietà, consulta Utilizzare i set di proprietà.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<AssignVariable>
|
Elementi secondari | Nessuna |
Un insieme di proprietà è costituito da una coppia nome/chiave.
Ad esempio: propset1.id=12345
,
dove propset1
è il nome dell'insieme di proprietà, id
è una chiave e
12345
è il valore della chiave.
L'elemento secondario PropertySetRef
consente di selezionare dinamicamente i nomi e/o le chiavi dei set di proprietà. Supponi di avere 200 regole di routing in un file di set di proprietà. Puoi accedere alle regole del set di proprietà
nel seguente modo, dove routingrules
è il nome del set di proprietà e rule1
,
rule2
e rulen
sono chiavi:
propertyset.routingrules.rule1 propertyset.routingrules.rule2 propertyset.routingrules.rulen
Per accedere a queste proprietà in un flusso proxy API, devi sapere quale regola vuoi selezionare in fase di progettazione. Tuttavia, supponiamo che il nome della regola rientri nell'intestazione della richiesta o nel payload. Un modo per selezionare la regola è utilizzare un criterio JavaScript con codice come il seguente:
context.getVariables("propertyset.routingrules." + ruleName); //assuming ruleName was populated earlier.
La funzionalità PropertySetRef
di AttributionMessage, invece, ti consente di selezionare una chiave della proprietà in modo dinamico senza
introdurre JavaScript.
Puoi utilizzare una combinazione di variabili di flusso e valori stringa letterali nell'elemento <PropertySetRef>
. Per ulteriori dettagli, consulta gli esempi.
L'elemento <PropertySetRef>
utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <AssignVariable> <PropertySetRef>SOURCE_VARIABLE</PropertySetRef> </AssignVariable> </AssignMessage>
Esempio 1
In questo esempio viene assegnato il valore di una chiave del set di proprietà a una variabile di flusso. In questo caso,
il nome dell'insieme di proprietà viene ottenuto dall'intestazione propset_name
, la chiave viene fornita
nell'intestazione propset_key
e il valore assegnato alla chiave viene archiviato nella variabile
flow_variable
.
<AssignMessage async="false" continueOnError="false" enabled="true" name="assignMessage"> <DisplayName>Assign Message-1</DisplayName> <Properties/> <AssignVariable> <Name>flow_variable</Name> <PropertySetRef>{request.header.propset_name}.{request.header.propset_key}</PropertySetRef> </AssignVariable> </AssignMessage>
Puoi utilizzare qualsiasi combinazione di variabili di flusso e stringhe letterali nell'elemento
<PropertySetRef>
.
Esempio 2
Questo esempio assegna il valore di una chiave del set di proprietà a una variabile di flusso utilizzando un nome della chiave fisso (stringa letterale). In questo caso, il nome dell'insieme di proprietà viene ottenuto
dall'intestazione propset_name
, la chiave è la stringa letterale key1
e il valore assegnato alla
chiave viene archiviato nella variabile flow_variable
.
<AssignMessage async="false" continueOnError="false" enabled="true" name="assignMessage"> <DisplayName>Assign Message-1</DisplayName> <Properties/> <AssignVariable> <Name>flow_variable</Name> <PropertySetRef>{request.header.propset_name}.key1</PropertySetRef> </AssignVariable> </AssignMessage>
Puoi utilizzare qualsiasi combinazione di variabili di flusso e stringhe letterali nell'elemento
<PropertySetRef>
.
<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 |
Tipo | Stringa |
Elemento principale |
<AssignVariable>
|
Elementi secondari | Nessuna |
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 specify the variable name without brackets: <Ref>client.host</Ref> DO NOT use 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, Apigee 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, Apigee 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, Apigee 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 criterioAssignMessage 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 è null, 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.
Il valore di <Ref>
deve essere una
variabile di flusso, ad esempio una proprietà di un oggetto request
, response
o
target
oppure il nome di una variabile di flusso personalizzata.
Se specifichi una variabile di flusso che non esiste per il valore di <Ref>
e il valore di <IgnoreUnresolvedVariables>
è false
, Apigee genera un errore.
<ResourceURL>
(secondario di <AssignVariable>
)
Specifica l'URL di una risorsa di testo come origine dell'assegnazione della variabile. Apigee carica la variabile di flusso specificata in <Name>
con i contenuti della risorsa di riferimento. La risorsa può essere di tipo XSD, XSL, WSDL, JavaScript, set di proprietà o Specifica OpenAPI.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<AssignVariable>
|
Elementi secondari | Nessuna |
Se la risorsa specificata da <ResourceURL>
non esiste, allora: se il valore di
<IgnoreUnresolvedVariables>
è true
, Apigee
assegna il valore null
alla variabile di flusso di destinazione, mentre se il valore di
<IgnoreUnresolvedVariables>
è false
, Apigee genera un errore.
L'elemento <ResourceURL>
utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <AssignVariable> <Name>VARIABLE_NAME</Name> <ResourceURL>RESOURCE_URL_OR_TEMPLATE</ResourceURL> </AssignVariable> </AssignMessage>
Il valore di testo accetta un valore stringa e viene interpretato come un modello di messaggio. Sono tutti validi:
<ResourceURL>jsc://my-js-file.js</ResourceURL> <ResourceURL>wsdl://{variable-goes-here}</ResourceURL> <ResourceURL>{variable-goes-here}</ResourceURL>
Esempio 1
L'esempio seguente assegna il valore di una risorsa JSON, caricata nel proxy nella cartella jsc
, nella variabile di flusso assigned-variable
:
<AssignMessage name='AM-From-ResourceURL-Proxy-JSC'> <AssignVariable> <Name>assigned-variable</Name> <ResourceURL>jsc://settings.json</ResourceURL> </AssignVariable> </AssignMessage>
Esempio 2
L'esempio seguente assegna il valore di una risorsa OpenAPI Spec, caricata nel proxy
della cartella oas
, nella variabile di flusso assigned-variable
, quindi imposta
questo valore come Payload
nel corpo della risposta:
<AssignMessage name='AM-Response'> <AssignVariable> <Name>assigned-variable</Name> <ResourceURL>oas://Fulfillment.yaml</ResourceURL> </AssignVariable> <Set> <Payload contentType='application/yaml'>{assigned-variable}</Payload> </Set> </AssignMessage>
<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 Apigee 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 dal criterio di sicurezza. L'esempio seguente presuppone che il modello di messaggio sia disponibile in un attributo personalizzato 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:
<Template ref='verifyapikey.myVerifyAPIKeyPolicy.app.name.message_template'/>
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<AssignVariable>
|
Elementi secondari | Nessuna |
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='AV-via-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='AV-via-template-indirectly'> <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 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='AV-template-with-fallback'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <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 |
Tipo | Stringa |
Elemento principale |
<AssignVariable>
|
Elementi secondari | Nessuna |
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 di flusso di destinazione.
<Copy>
Copia i valori dal messaggio specificato dall'attributo source
al messaggio specificato dall'elemento <AssignTo>
. Se non specifichi una destinazione con <AssignTo>
, 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 |
Tipo | Stringa |
Elemento principale |
<AssignMessage>
|
Elementi secondari |
<FormParams> <Headers> <Path> <Payload> <QueryParams> <StatusCode> <Verb> <Version> |
Se non specifichi nessun elemento secondario sotto l'elemento <Copy>
, verranno copiate tutte le parti del messaggio di origine designato.
L'elemento <Copy>
utilizza la seguente sintassi:
Sintassi
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="POLICY_NAME" >
<Copy source="VARIABLE_NAME">
<!-- Can also be an empty array (<FormParams/>) -->
<FormParams>
<FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
...
</FormParams>
<!-- Copy all headers -->
<Headers/>
<!-- or, copy specific headers by name -->
<Headers>
<Header name="HEADER_NAME"/>
<!-- or -->
<Header name="HEADER_NAME">[false|true]</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>
<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 dal messaggio request
a una nuova richiesta personalizzata denominata newRequest
:
<AssignMessage name="AM-copy-1"> <AssignTo createNew="true" transport="http" type="request">newRequest</AssignTo> <Copy source="request"> <Headers> <Header name="Header_Name_1"/> </Headers> <FormParams> <FormParam name="Form_Param_Name_1"/> <FormParam name="Form_Param_Name_2"/> <FormParam name="Form_Param_Name_3"/> </FormParams> <Path>true</Path> <QueryParams/> </Copy> </AssignMessage>
Poiché elementi come <Payload>
e <Verb>
non sono presenti, il criterio non copia quelle parti del messaggio.
Esempio 2
L'esempio seguente rimuove prima tutti i contenuti del messaggio response
esistente, quindi
copia tutti i valori da un altro messaggio chiamato secondResponse
nel
messaggio response
:
<AssignMessage name='AM-Copy-Response'> <AssignTo createNew="false" transport="http" type="response">response</AssignTo> <!-- first remove any existing values --> <Remove/> <!-- then copy everything from the designated message --> <Copy source="secondResponse"/> </AssignMessage>
L'elemento <Copy>
ha un singolo attributo:
Attributo | Descrizione | Obbligatorio? | Tipo |
---|---|---|---|
origine |
Specifica l'oggetto di origine della copia.
|
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 |
Tipo | 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="VARIABLE_NAME"> <!-- 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 di 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 vengono copiati f1
, f2
e il secondo valore di 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, concurl
aggiungi-H "Content-Length: 0"
alla richiesta.
- Dati del modulo: imposta un valore o "" (stringa vuota). Ad esempio, con
Quando copi <FormParams>
, <Copy>
imposta il valore Content-Type
del messaggio su
application/x-www-form-urlencoded
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 |
Tipo | 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="VARIABLE_NAME"> <!-- Copy all headers --> <Headers/> <!-- or, copy specific headers by name --> <Headers> <Header name="HEADER_NAME"/> <!-- or --> <Header name="HEADER_NAME">[false|true]</Header> ... </Headers> </Copy> </AssignMessage>
Esempio 1
L'esempio seguente copia l'intestazione user-agent
dalla richiesta al nuovo oggetto di richiesta personalizzato:
<AssignMessage name="AM-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 vengono copiati 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 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 | False |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Copy>
|
Elementi secondari | Nessuna |
L'elemento <Path>
utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <Path>[false|true]</Path> </Copy> </AssignMessage>
Esempio 1
L'esempio seguente indica cheAssignMessage 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>
al messaggio
specificato dall'elemento <AssignTo>
.
Valore predefinito | False |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Copy>
|
Elementi secondari | Nessuna |
L'elemento <Payload>
utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <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="AM-copy-payload-1"> <Copy source="request"> <Payload>true</Payload> </Copy> <AssignTo>response</AssignTo> </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 |
Tipo | Un array di elementi <QueryParam> o un array vuoto |
Elemento principale |
<QueryParam>
|
Elementi secondari | Nessuna |
L'elemento <QueryParams>
utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <!-- 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 parametri di ricerca 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 vengono copiati 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:
- Verbi HTTP:
GET
,POST
,PATCH
,DELETE
- Tipo di messaggio: richiesta
<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 | False |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Copy>
|
Elementi secondari | Nessuna |
L'elemento <StatusCode>
utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <StatusCode>[false|true]</StatusCode> </Copy> </AssignMessage>
Esempio 1
L'esempio seguente imposta <StatusCode>
su true
, copiando 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 quando i messaggi di origine e di destinazione sono di tipo Risposta.
Un uso comune di <StatusCode>
è impostare il codice di stato della risposta proxy su un valore diverso da quello ricevuto dal target.
<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 | False |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Copy>
|
Elementi secondari | Nessuna |
L'elemento <Verb>
utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <Verb>[false|true]</Verb> </Copy> </AssignMessage>
Esempio 1
L'esempio seguente imposta <Verb>
su true
, copiando 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 true
, copia la versione HTTP trovata nell'attributo source
dell'elemento <Copy>
nell'oggetto specificato dall'elemento <AssignTo>
.
Valore predefinito | False |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Copy>
|
Elementi secondari | Nessuna |
L'elemento <Version>
utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <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 più naturale.
L'elemento <DisplayName>
è comune a tutti i criteri.
Valore predefinito | N/A |
Obbligatorio? | Facoltativo. Se ometti <DisplayName> , viene utilizzato il valore dell'attributo name del criterio. |
Tipo | Stringa |
Elemento principale | <PolicyElement> |
Elementi secondari | Nessuna esperienza |
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 | False |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<AssignMessage>
|
Elementi secondari | Nessuna |
Imposta il valore su true
per ignorare le variabili non risolte e continuare l'elaborazione; in caso contrario, false
. Il
valore predefinito è false
.
L'impostazione di <IgnoreUnresolvedVariables>
su true
è diversa dall'impostazione di continueOnError
su true
di <AssignMessage>
perché è specifica per l'impostazione e il recupero dei valori delle variabili. Se imposti continueOnError
su true
, Apigee 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
Nell'esempio seguente viene impostato il valore <IgnoreUnresolvedVariables>
su true
:
<AssignMessage name="AM-Set-Headers"> <Set> <Headers> <Header name='new-header'>{possibly-defined-variable}<Header> </Headers> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </AssignMessage>
Poiché <IgnoreUnresolvedVariables>
è impostato su true
, se
la variabile possibly-defined-variable
non è definita, questo criterio
non genererà un errore.
<Remove>
Rimuove le intestazioni, parametri di ricerca, i parametri del modulo e/o il payload dei messaggi da un messaggio. Un tag <Remove>
vuoto rimuove tutto dal messaggio.
Il messaggio interessato 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 |
Tipo | Tipo complesso |
Elemento principale |
<AssignMessage>
|
Elementi secondari |
<FormParams> <Headers> <Payload> <QueryParams> |
Un caso d'uso comune per <Remove>
è eliminare un'intestazione o 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" > <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Remove all form parameters --> <FormParams/> <!-- or, remove specific form parameters by name --> <FormParams> <FormParam name="FORMPARAM_NAME"/> <!-- or --> <FormParam name="FORMPARAM_NAME">[false|true]</FormParam> ... </FormParams> <!-- Remove all headers --> <Headers/> <!-- or, remove specific headers by name --> <Headers> <Header name="HEADER_NAME"/> <!-- or --> <Header name="HEADER_NAME">[false|true]</Header> ... </Headers> <Payload>[false|true]</Payload> <!-- Remove all query parameters --> <QueryParams/> <!-- or, remove specific query parameters by name --> <QueryParams> <QueryParam name="QUERYPARAM_NAME"/> <!-- or --> <QueryParam name="QUERYPARAM_NAME">[false|true]</QueryParam> ... </QueryParams> </Remove> </AssignMessage>
Esempio 1
L'esempio seguente rimuove il corpo del messaggio dalla risposta:
<AssignMessage name="AM-remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo>response</AssignTo> </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
dall'oggetto request
:
<AssignMessage name="AM-remove-2"> <Remove> <!-- Empty (<FormParams/>) removes all form parameters --> <FormParams/> <QueryParams> <QueryParam name="qp1"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Esempio 3
L'esempio seguente rimuove tutto da un oggetto messaggio:
<AssignMessage name="AM-remove-3"> <Remove/> <AssignTo>request</AssignTo> </AssignMessage>
In genere, esegui questa operazione solo se utilizzi l'elemento <Set>
o
l'elemento <Copy>
per impostare alcuni valori sostitutivi nel messaggio.
<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 |
Tipo | 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" > <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Remove all form parameters --> <FormParams/> <!-- or, remove specific form parameters by name --> <FormParams> <FormParam name="FORMPARAM_NAME"/> <!-- or --> <FormParam name="FORMPARAM_NAME">[false|true]</FormParam> ... </FormParams> </Remove> </AssignMessage>
Esempio 1
Nell'esempio seguente vengono rimossi tre parametri modulo dalla richiesta:
<AssignMessage name="AM-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> </AssignMessage>
Esempio 2
L'esempio seguente rimuove tutti i parametri del modulo dalla richiesta:
<AssignMessage name="AM-remove-formparams-2"> <Remove> <FormParams/> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Esempio 3
Se sono presenti più parametri di forma con lo stesso nome, utilizza la seguente sintassi:
<AssignMessage name="AM-remove-formparams-3"> <Remove> <FormParams> <FormParam name="f1"/> <FormParam name="f2"/> <FormParam name="f3.2"/> </FormParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Questo esempio rimuove f1
, f2
e il secondo valore di f3
. Se f3
ha un solo valore, non viene rimosso.
Puoi utilizzare <FormParams>
solo se vengono soddisfatti i seguenti criteri:
- Tipo di messaggio: richiesta
Content-Type
:application/x-www-form-urlencoded
<Headers>
(secondario di <Remove>
)
Rimuove le intestazioni HTTP specificate dalla richiesta o dalla risposta, indicata dall'elemento
<AssignTo>
.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | 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" > <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Remove all headers --> <Headers/> <!-- or, remove specific headers by name --> <Headers> <Header name="HEADER_NAME"/> <!-- or --> <Header name="HEADER_NAME">[false|true]</Header> ... </Headers> </Remove> </AssignMessage>
Esempio 1
L'esempio seguente rimuove l'intestazione user-agent
dalla richiesta:
<AssignMessage name="AM-remove-one-header"> <Remove> <Headers> <Header name="user-agent"/> </Headers> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Esempio 2
Nell'esempio seguente vengono rimosse tutte le intestazioni dalla richiesta:
<AssignMessage name="AM-remove-all-headers"> <Remove> <Headers/> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Esempio 3
Se sono presenti più intestazioni con lo stesso nome, utilizza la seguente sintassi:
<AssignMessage name="AM-remove-headers-3"> <Remove> <Headers> <Header name="h1"/> <Header name="h2"/> <Header name="h3.2"/> </Headers> </Remove> <AssignTo>request</AssignTo> </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 | False |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Remove>
|
Elementi secondari | Nessuna |
L'elemento <Payload>
utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <!-- Can also be empty to remove everything from the message (<Remove/>) --> <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="AM-remove-payload-1"> <Remove> <Payload>true</Payload> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
<QueryParams>
(secondario di <Remove>
)
Rimuove i parametri di ricerca specificati dalla richiesta. Questo elemento non ha effetto sulla risposta.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | 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" > <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Remove all query parameters --> <QueryParams/> <!-- or, remove specific query parameters by name --> <QueryParams> <QueryParam name="QUERYPARAM_NAME"/> <!-- or --> <QueryParam name="QUERYPARAM_NAME">[false|true]</QueryParam> ... </QueryParams> </Remove> </AssignMessage>
Esempio 1
Nell'esempio seguente viene rimosso un singolo parametro di query dalla richiesta:
<AssignMessage name="AM-remove-queryparams-1"> <Remove> <QueryParams> <QueryParam name="qp1"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Esempio 2
L'esempio seguente rimuove tutti parametri di ricerca dalla richiesta:
<AssignMessage name="AM-remove-queryparams-2"> <Remove> <QueryParams/> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Esempio 3
Se sono presenti più parametri di query con lo stesso nome, utilizza la seguente sintassi:
<AssignMessage name="AM-remove-queryparams-3"> <Remove> <QueryParams> <QueryParam name="qp1"/> <QueryParam name="qp2"/> <QueryParam name="qp3.2"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </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="AM-remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Puoi utilizzare <QueryParams>
solo se vengono soddisfatti i seguenti criteri:
- Verbi HTTP:
GET
,POST
,PATCH
,DELETE
- 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 di query o del modulo già presenti nel messaggio originale oppure ne aggiunge di nuovi, se non sono presenti.
Le intestazioni e i parametri di query e modulo in un messaggio HTTP possono contenere più valori. Per aggiungere altri valori per un'intestazione o un parametro, utilizza invece l'elemento <Add>
.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Tipo complesso |
Elemento principale |
<AssignMessage>
|
Elementi secondari |
<FormParams> <Headers> <Payload> <Path> <QueryParams> <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> <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 imposta un'intestazione specifica. Se questo criterio viene associato al flusso di richiesta, consente al sistema upstream di ricevere un'intestazione aggiuntiva non inclusa nella richiesta in entrata originale.
<AssignMessage name="AM-Set-Header"> <Set> <Headers> <Header name="authenticated-developer">{verifyapikey.VAK-1.developer.id}</Header> </Headers> </Set> <AssignTo>request</AssignTo> </AssignMessage>
Esempio 2
L'esempio seguente sovrascrive il payload per una risposta, nonché l'intestazione Content-Type
.
<AssignMessage name="AM-Overwrite-Payload"> <Set> <Payload contentType="application/json">{ "status" : 42 }</Payload> </Set> <AssignTo>response</AssignTo> </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 |
Tipo | 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="AM-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 del campo Content-Type
del messaggio in
application/x-www-form-urlencoded
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 |
Tipo | 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 x-ratelimit-remaining
sul valore della
variabile ratelimit.Quota-1.available.count
:
<AssignMessage name="AM-Set-RateLimit-Header"> <Set> <Headers> <Header name="X-RateLimit-Remaining">{ratelimit.Quota-1.available.count}</Header> </Headers> </Set> <AssignTo>response</AssignTo> </AssignMessage>
Se definisci intestazioni vuote nel criterio
(<Set><Headers/></Set>
), il criterio non imposta alcuna intestazione. L'operazione
avrà lo stesso effetto dell'omissione di <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 |
Tipo | Stringa |
Elemento principale |
<Set>
|
Elementi secondari | Nessuna |
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, ad esempio precedenti al 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 |
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 parametri di ricerca esistenti nella richiesta con nuovi valori. Questo elemento non ha effetto sulla risposta.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | 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 name="AM-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:
- Verbi HTTP:
GET
,POST
,PATCH
,DELETE
- Tipo di messaggio: richiesta
Se definisci parametri di ricerca vuoti nel criterio
(<Set><QueryParams/></Set>
), il criterio non imposta alcun parametro
di query. Equivale a omettere <QueryParams>
.
<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 |
Tipo | Stringa o VARIABLE |
Elemento principale |
<Set>
|
Elementi secondari | Nessuna |
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="AM-set-statuscode-404"> <Set> <StatusCode>404</StatusCode> </Set> <AssignTo>response</AssignTo> </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>response</AssignTo> </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 |
Tipo | Stringa o VARIABLE |
Elemento principale |
<Set>
|
Elementi secondari | Nessuna |
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="AM-set-verb-1"> <Set> <Verb>POST</Verb> </Set> <AssignTo>request</AssignTo> </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="AM-set-verb-to-dynamic-value"> <Set> <Verb>{my_variable}</Verb> </Set> <AssignTo>request</AssignTo> </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 |
Tipo | Stringa o VARIABLE |
Elemento principale |
<Set>
|
Elementi secondari | Nessuna |
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="AM-set-version-1"> <Set> <Version>1.1</Version> </Set> </AssignMessage>
Esempio 2
Quanto segue utilizza una variabile tra parentesi graffe per impostare il numero di versione:
<AssignMessage name="AM-set-version-2"> <Set> <Version>{my_version}</Version> </Set> <AssignTo>request</AssignTo> </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 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>
nel criterio di AttributionMessage. 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">MyRequestObject</AssignTo> ... </AssignMessage>
Per impostazione predefinita, Apigee non fa nulla con il messaggio di richiesta personalizzato. Dopo averla creata, Apigee continuerà il flusso con la richiesta originale. Per utilizzare la richiesta personalizzata, aggiungi un criterio come le norme sui callout di servizio al proxy e fai riferimento esplicito al messaggio di richiesta appena creato nella configurazione di quel criterio. Questo ti consente di 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 conAssignMessage:
<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>
non specifica l'attributosource
, Apigee utilizzerà il messaggiorequest
come origine da cui copiare da. - Imposta il parametro di query
address
nel messaggio personalizzato sul valore del parametro di queryaddy
della richiesta in entrata. - Imposta il verbo HTTP su
GET
.
- Copia il valore dell'intestazione HTTP
- Imposta
<IgnoreUnresolvedVariables>
sufalse
. Quando<IgnoreUnresolvedVariables>
èfalse
, se una delle variabili a cui viene fatto riferimento nella configurazione dei criteri non esiste, Apigee entrerà in stato di errore nel flusso API.
Esempio 2
Ecco un altro esempio che mostra come creare un oggetto richiesta personalizzato con AssignMessage:
<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 alle varie proprietà di un messaggio personalizzato in un altro criterio di AttributionMessage che si verifica più avanti nel flusso. L'esempio seguente recupera il valore di un'intestazione da una risposta personalizzata denominata e lo inserisce in una nuova intestazione del messaggio di richiesta:
<AssignMessage name="AM-Copy-Custom-Header"> <AssignTo>request</AssignTo> <Set> <Headers> <Header name="injected-approval-id">{MyCalloutResponse.header.approval-id}</Header> </Headers> </Set> </AssignMessage>
Codici di errore
Questa sezione descrive i codici e i messaggi di errore che vengono restituiti e le variabili di errore impostate da Apigee 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 Le variabili del tipo di messaggio rappresentano intere richieste e risposte HTTP. Le variabili di flusso Apigee integrate |
build |
steps.assignmessage.UnresolvedVariable |
500 |
Questo errore si verifica se una variabile specificata nel criterio AttributionMessage è:
|
build |
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 AssignMessage è 0 o è un numero negativo, il deployment del proxy API non va a buon fine.
|
build |
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.
|
build |
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="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 AssegnaMessage per impostare un percorso di richiesta e utilizza un criterio ServiceCallout
per effettuare la richiesta a un servizio esterno.