Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X. info
Cosa
Il criterio AssignMessage modifica o crea nuovi messaggi di richiesta e risposta durante il flusso del proxy API. Le norme ti consentono di eseguire le seguenti azioni sui messaggi:
- Aggiungere nuovi parametri di modulo, intestazioni o parametri di ricerca a un messaggio
- Copia le proprietà esistenti da un messaggio all'altro
- Rimuovi intestazioni, parametri di query, parametri di modulo e/o payload dei messaggi da un messaggio
- Imposta il valore delle proprietà esistenti in un messaggio
Con il criterio AssignMessage, in genere aggiungi, modifichi o rimuovi le proprietà della richiesta o della risposta. Tuttavia, puoi anche utilizzare il criterio AssignMessage per creare un messaggio di richiesta o risposta personalizzato e passarlo a un target alternativo, come descritto in Creare messaggi di richiesta personalizzati.
Il criterio AssignMessage può creare o modificare le variabili di flusso con i seguenti elementi secondari:
Elemento <AssignMessage>
Definisce un criterio AssignMessage.
Valore predefinito | Consulta la scheda Criterio predefinito di seguito |
Obbligatorio? | Obbligatorio |
Tipo | Oggetto complesso |
Elemento principale | n/a |
Elementi secondari |
<Add> <AssignTo> <AssignVariable> <Copy> <DisplayName> <IgnoreUnresolvedVariables> <Remove> <Set> |
La sintassi dell'elemento <AssignMessage>
è la seguente:
Sintassi
La sintassi dell'elemento <AssignMessage>
è la seguente:
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <!-- All AssignMessage child elements are optional --> <Add> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Add> <AssignTo createNew="[true|false]" transport="http" type="[request|response]">destination_variable_name</AssignTo> <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> <Template>message_template</Template> or <Template ref='template_variable'></Template> <Value>variable_value</Value> </AssignVariable> <Copy source="[request|response]"> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Path>[false|true]</Path> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> <ReasonPhrase>[false|true]</ReasonPhrase> <StatusCode>[false|true]</StatusCode> <Verb>[false|true]</Verb> <Version>[false|true]</Version> </Copy> <DisplayName>policy_display_name</DisplayName> <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables> <Remove> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Remove> <Set> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Path>path</Path> <Payload contentType="content_type" variablePrefix="prefix" variableSuffix="suffix">new_payload</Payload> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> <StatusCode>HTTP_status_code or {variable}</StatusCode> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
Norme predefinite
L'esempio seguente mostra le impostazioni predefinite quando aggiungi un criterio AssignMessage al flusso nell'interfaccia utente di Edge:
<AssignMessage continueOnError="false" enabled="true" name="assign-message-default"> <DisplayName>Assign Message-1</DisplayName> <Properties/> <Copy source="request"> <Headers/> <QueryParams/> <FormParams/> <Payload/> <Verb/> <StatusCode/> <ReasonPhrase/> <Path/> </Copy> <Remove> <Headers> <Header name="h1"/> </Headers> <QueryParams> <QueryParam name="q1"/> </QueryParams> <FormParams> <FormParam name="f1"/> </FormParams> <Payload/> </Remove> <Add> <Headers/> <QueryParams/> <FormParams/> </Add> <Set> <Headers/> <QueryParams/> <FormParams/> <!-- <Verb>GET</Verb> --> <Path/> </Set> <AssignVariable> <Name>name</Name> <Value/> <Ref/> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Quando inserisci un nuovo criterio AssignMessage nell'interfaccia utente di Edge, il modello contiene stub per tutte le operazioni possibili. In genere, selezioni le operazioni da eseguire con questo criterio
e rimuovi gli altri elementi secondari. Ad esempio, se vuoi eseguire un'operazione di copia, utilizza
l'elemento <Copy>
e rimuovi <Add>
, <Remove>
e altri elementi secondari dal
criterio per renderlo più leggibile.
Questo elemento ha i seguenti attributi comuni a tutti i criteri:
Attributo | Predefinita | Obbligatorio? | Description (Descrizione) |
---|---|---|---|
name |
N/A | Obbligatorio |
Il nome interno del criterio. Il valore dell'attributo Facoltativamente, utilizza l'elemento |
continueOnError |
false | Facoltativo | Imposta su "false" per restituire un errore quando un criterio non va a buon fine. Si tratta di un comportamento previsto per la maggior parte dei criteri. Impostalo su "true" per far sì che l'esecuzione del flusso continui anche dopo l'esito negativo di un criterio. |
enabled |
true | Facoltativo | Imposta su "true" per applicare il criterio. Imposta su "false" per "disattivare" il criterio. Il criterio non verrà applicato anche se rimane collegato a un flusso. |
async |
false | Deprecazione | Questo attributo è obsoleto. |
La tabella seguente fornisce una descrizione generale degli elementi secondari di
<AssignMessage>
:
Elemento secondario | Obbligatorio? | Descrizione |
---|---|---|
Operazioni comuni | ||
<Add> |
Facoltativo | Aggiunge informazioni all'oggetto messaggio specificato dall'elemento
<AssignTo> .
|
<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, specificati dall'elemento <AssignTo> .
|
Altri elementi secondari | ||
<AssignTo> |
Facoltativo | Specifica il messaggio su cui opera il criterio AssignMessage. Può trattarsi della richiesta o della risposta standard oppure di un nuovo messaggio personalizzato. |
<AssignVariable> |
Facoltativo | Assegna un valore a una variabile del flusso. Se la variabile non esiste, <AssignVariable> la crea. |
<IgnoreUnresolvedVariables> |
Facoltativo | Determina se l'elaborazione si interrompe quando viene rilevata una variabile non risolta. |
Ciascuno di questi elementi secondari è descritto nelle sezioni che seguono.
Esempi
Gli esempi riportati di seguito mostrano alcuni dei modi in cui puoi utilizzare il criterio AssignMessage:
1: aggiungi l'intestazione
L'esempio seguente aggiunge un'intestazione alla richiesta con l'elemento
<Add>
:
<AssignMessage continueOnError="false" enabled="true" name="add-headers-1"> <Add> <Headers> <Header name="user-agent">{request.user.agent}</Header> </Headers> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
2: rimuovi il payload
L'esempio seguente elimina il payload dalla risposta con l'elemento <Remove>
:
<AssignMessage continueOnError="false" enabled="true" name="remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
3: Modifica risposta
L'esempio seguente modifica un oggetto di risposta esistente aggiungendo un'intestazione:
<AssignMessage name="modify-response"> <Set> <Headers> <Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo createNew="false" type="response"></AssignTo> </AssignMessage>
Questo esempio non crea un nuovo messaggio. Modifica invece un messaggio di risposta esistente aggiungendo un'intestazione HTTP.
Poiché questo esempio omette il nome di una variabile nell'elemento <AssignTo>
e specifica type
come "risposta", questa norma modifica l'oggetto risposta restituito dal server di destinazione.
L'intestazione HTTP aggiunta al messaggio di risposta da questo criterio è derivata da una variabile compilata dal criterio LookupCache. Di conseguenza, il messaggio di risposta modificato da questo criterio Assegna messaggio 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 debugging e la risoluzione dei problemi.
4: imposta i contenuti dinamici
Puoi utilizzare Assegna messaggio per incorporare contenuti dinamici nel payload dei messaggi di risposta e di richiesta.
Per incorporare le variabili del flusso Edge in un payload XML, racchiudi la variabile designata tra parentesi graffe, ad esempio: {prefix.name}
.
L'esempio seguente incorpora il valore della variabile di flusso dell'intestazione HTTP user-agent
in un elemento XML chiamato User-agent
:
<AssignMessage name="set-dynamic-content"> <AssignTo createNew="false" type="response"></AssignTo> <Set> <Payload contentType="text/xml"> <User-agent>{request.header.user-agent}</User-agent> </Payload> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> </AssignMessage>
Per i payload JSON, puoi inserire variabili utilizzando gli attributi variablePrefix
e
variableSuffix
con caratteri delimitatori 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 sezione Riferimento alle variabili di flusso.
A partire dalla release cloud del 16/08/17, puoi anche utilizzare le parentesi graffe per inserire le variabili.
5: rimuovi il parametro di query
Il seguente esempio rimuove il parametro di query apikey
dalla richiesta:
<AssignMessage name="remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
È buona norma rimuovere il parametro di query apikey
dal messaggio di richiesta quando utilizzi il criterio VerifyAPIKey per l'autenticazione utente. Questo per impedire che informazioni chiave sensibili vengano trasmesse al target di backend.
6: Imposta/recupera le variabili
L'esempio seguente utilizza tre criteri Assegna messaggio:
- Crea tre variabili di flusso nella richiesta, con valori statici
- Recupera le variabili di flusso in modo dinamico in una seconda regola nel flusso di richieste
- Li imposta nel payload della risposta
<!-- Policy #1: Set variables in the request --> <AssignMessage continueOnError="false" enabled="true" name="set-variables"> <!-- Create a variable named myAppSecret --> <AssignVariable> <Name>myAppSecret</Name> <Value>42</Value> </AssignVariable> <!-- Create a variable named config.environment --> <AssignVariable> <Name>config.environment</Name> <Value>test</Value> </AssignVariable> <!-- Create a variable named config.protocol --> <AssignVariable> <Name>config.protocol</Name> <Value>gopher</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Nel primo criterio, l'elemento <AssignVariable>
crea e imposta tre variabili nella richiesta. Ogni elemento <Name>
specifica un nome di variabile e <Value>
specifica il valore.
Il secondo criterio utilizza l'elemento <AssignVariable>
per leggere i valori e crea tre
nuove variabili:
<!-- Policy #2: Get variables from the request --> <AssignMessage continueOnError="false" enabled="true" name="get-variables"> <AssignTo createNew="false" transport="http" type="request"/> <!-- Get the value of myAppSecret and create a new variable, secret --> <AssignVariable> <Name>secret</Name> <Ref>myAppSecret</Ref> <Value>0</Value> </AssignVariable> <!-- Get the value of config.environment and create a new variable, environment --> <AssignVariable> <Name>environment</Name> <Ref>config.environment</Ref> <Value>default</Value> </AssignVariable> <!-- Get the value of config.protocol and create a new variable, protocol --> <AssignVariable> <Name>protocol</Name> <Ref>config.protocol</Ref> <Value>default</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </AssignMessage>
Nella seconda norma, l'elemento <Ref>
fa riferimento alla variabile di origine e 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 richieste. Assicurati di inserire la norma 1 prima della norma 2.
- Aggiungi la terza norma 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>
è racchiuderle tra parentesi graffe.Assicurati di impostare l'attributo
contentType
dell'elemento<Payload>
su "application/xml". - Invia una richiesta al proxy API, ad esempio:
curl -vL https://ahamilton-eval-test.apigee.net/myproxy
Se vuoi, puoi incanalare i risultati tramite un'utilità come
xmllint
in modo che il codice XML venga visualizzato in una struttura ben formattata:curl -vL https://ahamilton-eval-test.apigee.net/myproxy | xmllint --format -
Il corpo della risposta dovrebbe avere il seguente aspetto:
<wrapper> <secret>42</secret> <config> <environment>test</environment> <protocol>gopher</protocol> </config> </wrapper>
7: ottieni le intestazioni di risposta di Service Callout
Nell'esempio seguente, supponiamo che una norma ServiceCallout sia presente nella richiesta del proxy API e che la risposta del callout contenga più intestazioni dello stesso nome (Set-Cookie
). Supponendo che la variabile di risposta di ServiceCallout sia il valore predefinito calloutResponse
, la seguente norma ottiene il secondo valore dell'intestazione Set-Cookie
.
<AssignMessage continueOnError="false" enabled="true" name="get-header"> <Set> <Payload contentType="application/json"> {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"} </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Per elencare tutti i valori dell'intestazione, utilizza invece la seguente variabile:
{calloutResponse.header.Set-Cookie.values}
Ogni elemento secondario in questo riferimento contiene esempi aggiuntivi. Per altri esempi, consulta l'esempio di assegnazione del messaggio su GitHub.
Riferimento all'elemento secondario
Questa sezione descrive gli elementi secondari di <AssignMessage>
.
<Add>
Aggiunge informazioni alla richiesta o alla risposta, specificate dall'elemento <AssignTo>
.
L'elemento <Add>
aggiunge al messaggio nuove proprietà che non esistono nel messaggio
originale. Per modificare i valori delle proprietà esistenti, utilizza l'elemento <Set>
.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Tipo complesso |
Elemento principale |
<AssignMessage>
|
Elementi secondari |
<FormParams> <Headers> <QueryParams> |
La sintassi dell'elemento <Add>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Add> </AssignMessage>
Esempio 1
L'esempio seguente utilizza l'elemento <FormParams>
per recuperare i valori di
tre parametri della stringa di query dalla richiesta iniziale e impostarli come parametri di modulo sulla
richiesta dell'endpoint target:
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3"> <Add> <FormParams> <FormParam name="name">{request.queryparam.name}</FormParam> <FormParam name="zip">{request.queryparam.zipCode}</FormParam> <FormParam name="lang">{request.queryparam.lang}</FormParam> </FormParams> </Add> <AssignTo transport="http" type="request"/> </AssignMessage>
Esempio 2
L'esempio seguente utilizza l'elemento <Headers>
per aggiungere l'intestazione User-Agent
alla richiesta dell'endpoint target:
<AssignMessage continueOnError="false" enabled="true" name="add-headers-1"> <Add> <Headers> <Header name="user-agent">{request.user.agent}</Header> </Headers> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Esempio 3
L'esempio seguente utilizza l'elemento <QueryParams>
per aggiungere alla richiesta un singolo parametro di query con un valore statico:
<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
In questo esempio viene utilizzato <Add>
nel preflow della richiesta. Se esamini i risultati in uno strumento come lo strumento di monitoraggio, la richiesta a "http://httpbin.org/get" diventa "http://httpbin.org/get?myParam=42".
Gli elementi secondari di <Add>
supportano la sostituzione di stringhe dinamiche, nota come
testimonianze dei messaggi.
<FormParams>
(elemento secondario di <Add>
)
Aggiunge nuovi parametri del modulo al messaggio di richiesta. Questo elemento non ha alcun effetto su un messaggio di risposta.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Array di elementi <FormParam> |
Elemento principale |
<Add>
|
Elementi secondari |
<FormParam> |
La sintassi dell'elemento <FormParams>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <AssignTo createNew="[true|false]" transport="http" type="[request|response]">destination_variable_name</AssignTo> </Add> </AssignMessage>
Esempio 1
L'esempio seguente aggiunge un singolo parametro del modulo ("risposta") e un valore statico ("42") alla richiesta:
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-1"> <Add> <FormParams> <FormParam name="answer">42</FormParam> </FormParams> </Add> <AssignTo transport="http" type="request"></AssignTo> </AssignMessage>
Esempio 2
L'esempio seguente recupera il valore del parametro della stringa di query name
e lo aggiunge alla richiesta come parametro di modulo:
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-2"> <Add> <FormParam name="name">{request.queryparam.name}</FormParam> </Add> </AssignMessage>
Tieni presente che questo esempio non specifica un target con <AssignTo>
. Questo criterio aggiunge il
parametro solo alla richiesta.
Esempio 3
Nell'esempio seguente vengono aggiunti più parametri di modulo alla richiesta:
<AssignMessage continueOnError="false" enabled="true" name="add-formparams-3"> <Add> <FormParams> <FormParam name="name">{request.queryparam.name}</FormParam> <FormParam name="zip">{request.queryparam.zipCode}</FormParam> <FormParam name="lang">{request.queryparam.lang}</FormParam> </FormParams> </Add> <AssignTo transport="http" type="request"/> </AssignMessage>
Questo esempio recupera i parametri della stringa di query dalla richiesta di origine e li aggiunge come parametri di modulo alla richiesta inviata all'endpoint di destinazione.
Puoi utilizzare lo strumento di tracciamento per esaminare il flusso. Vedrai che il corpo della richiesta contiene i dati del modulo con codifica URL, che sono stati originariamente passati come parametri della stringa di query:
%7Busername%7D=nick&%7Bzip_code%7D=90210&%7Bdefault_language%7D=en
Puoi utilizzare <FormParams>
solo se sono soddisfatti i seguenti criteri:
- Verbo HTTP: POST
- Tipo di messaggio: richiesta
- Uno (o entrambi) dei seguenti elementi:
- Dati del modulo: impostato su un valore o su "" (la stringa vuota). Ad esempio, con
curl
, aggiungi-d ""
alla richiesta. Content-Length
header: impostato su 0 (se non sono presenti dati nella richiesta originale; in caso contrario, la lunghezza corrente in byte). Ad esempio, concurl
aggiungi-H "Content-Length: 0"
alla richiesta.
- Dati del modulo: impostato su un valore o su "" (la 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>
, Edge imposta l'intestazione Content-Type
della richiesta su "application/x-www-form-urlencoded" prima di inviare il messaggio al servizio di destinazione.
<Headers>
(elemento secondario di <Add>
)
Aggiunge nuove intestazioni alla richiesta o alla risposta specificata, che è specificata dall'elemento
<AssignTo>
.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Array di elementi <Header> |
Elemento principale |
<Add>
|
Elementi secondari |
<Header> |
La sintassi dell'elemento <Headers>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Add> </AssignMessage>
Esempio 1
L'esempio seguente aggiunge l'intestazione user-agent
al messaggio di richiesta e assegna il valore della variabile di flusso request.user.agent
a quell'intestazione.
<AssignMessage continueOnError="false" enabled="true" name="add-headers-1"> <Add> <Headers> <Header name="user-agent">{request.user.agent}</Header> </Headers> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
<QueryParams>
(elemento secondario di <Add>
)
Aggiunge nuovi parametri di ricerca alla richiesta. Questo elemento non ha alcun effetto su una risposta.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Array di elementi <QueryParam> |
Elemento principale |
<Add>
|
Elementi secondari |
<QueryParam> |
La sintassi dell'elemento <QueryParams>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Add> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Add> </AssignMessage>
Esempio 1
L'esempio seguente aggiunge il parametro di query "myParam" alla richiesta e gli assegna il valore "42":
<AssignMessage continueOnError="false" enabled="true" name="add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Puoi utilizzare <QueryParams>
solo se sono soddisfatti i seguenti criteri:
- Verbo HTTP: GET
- Tipo di messaggio: richiesta
Inoltre, puoi impostare parametri di ricerca solo quando l'attributo type
dell'elemento <AssignTo>
è un messaggio di richiesta. La loro impostazione nella risposta non ha alcun effetto.
Se nella norma definisci un array vuoto di parametri di ricerca (<Add><QueryParams/></Add>
), la norma non aggiunge parametri di query. È lo stesso che omettere <QueryParams>
.
<AssignTo>
Determina su quale oggetto opera il criterio AssignMessage. Le opzioni sono:
- Messaggio di richiesta: l'
request
ricevuto dal proxy API - Messaggio di risposta: il valore
response
restituito dal server di destinazione - Messaggio personalizzato:un oggetto di richiesta o risposta personalizzato
Tieni presente che in alcuni casi non puoi modificare l'oggetto su cui agisce il criterio AssignMessage.
Ad esempio, non puoi utilizzare <Add>
o <Set>
per aggiungere o modificare parametri di ricerca (<QueryParams>
) o i parametri del modulo (<FormParams>
) nella risposta. Puoi solo manipulare parametri di ricerca e i parametri del modulo nella richiesta.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<AssignMessage>
|
Elementi secondari | Nessuno |
Se non specifichi <AssignTo>
, il criterio agisce sulla richiesta o sulla risposta predefinita,
in base al punto in cui viene eseguito. Se il criterio viene eseguito nel flusso di richiesta, influisce sul messaggio di richiesta. Se viene eseguito nel flusso di risposta, il criterio influisce sulla risposta per impostazione predefinita.
La sintassi dell'elemento <AssignTo>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignTo createNew="[true|false]" transport="http" type="[request|response]">destination_variable_name</AssignTo> </AssignMessage>
Esempio 1
L'esempio seguente specifica che il target è la richiesta originale che verrà inviata all'endpoint di destinazione:
<AssignMessage name="assignto-1"> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Impostando createNew
su "false" (il valore predefinito), questo esempio non crea una nuova richiesta. Tutte le operazioni in questo criterio influiscono sulla richiesta originale.
Esempio 2
Il seguente esempio crea un nuovo oggetto request:
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Quando crei un nuovo oggetto di richiesta o risposta, gli altri elementi del criterio AssignMessage (ad esempio <Add>
, <Set>
e <Set>
) agiscono su quel nuovo
oggetto di richiesta.
Puoi accedere al nuovo oggetto richiesta in altri criteri più avanti nel flusso oppure inviare il nuovo oggetto richiesta a un servizio esterno con un criterio ServiceCallout.
Esempio 3
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 di richiesta o risposta, gli altri elementi del criterio AssignMessage (ad esempio <Add>
, <Set>
e <Set>
) agiscono su quel nuovo
oggetto di richiesta.
Puoi accedere al nuovo oggetto richiesta in altri criteri più avanti nel flusso oppure inviare il nuovo oggetto richiesta a un servizio esterno con un criterio ServiceCallout.
La tabella seguente descrive gli attributi di <AssignTo>
:
Attributo | Descrizione | Obbligatorio? | Tipo |
---|---|---|---|
createNew |
Determina se questo criterio crea un nuovo messaggio durante l'assegnazione dei valori. Se "true", il criterio crea una nuova variabile del tipo
specificato da Se "false", il criterio risponde in uno dei seguenti modi:
Se
|
Facoltativo | Booleano |
transport |
Specifica il tipo di trasporto per il tipo di messaggio di richiesta o risposta. Il valore predefinito è "http" (l'unico valore supportato). |
Facoltativo | Stringa |
type |
Specifica il tipo del nuovo messaggio quando createNew è "true". I valori validi sono "request" o "response".
Il valore predefinito è "request". Se ometti questo attributo, Edge crea una richiesta o una risposta, a seconda di dove viene eseguito questo criterio nel flusso. |
Facoltativo | Stringa |
<AssignVariable>
Assegna un valore a una variabile del flusso di destinazione (ad es. una variabile il cui valore è impostato dal criterio AssignMessage). Se la variabile del flusso non esiste, <AssignVariable>
la crea.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Tipo complesso |
Elemento principale |
<AssignMessage>
|
Elementi secondari |
<Name> (obbligatorio)<Ref> <Template> <Value> |
Il valore assegnato alla variabile del flusso di destinazione può essere uno dei seguenti:
- Stringa letterale: utilizza l'elemento secondario
<Value>
per specificare un valore di stringa letterale per la variabile del 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 pagina Riferimento alle variabili di flusso. - Modello di messaggio: utilizza l'elemento secondario
<Template>
per specificare un modello di messaggio per la variabile del flusso di destinazione.
La sintassi dell'elemento <AssignVariable>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> <Template>message_template</Template> or <Template ref='template_variable'></Template> <Value>variable_value</Value> </AssignVariable> </AssignMessage>
Utilizza l'elemento <Ref>
per specificare la variabile di origine. Se la variabile a cui fa riferimento <Ref>
non è accessibile, Edge utilizza il valore specificato dall'elemento <Value>
. Se definisci
<Template>
, questo avrà la precedenza sugli altri elementi secondari.
Esempio 1
Il seguente esempio imposta il valore di una nuova variabile, 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 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 va a buon fine, Edge assegna 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 con una stringa letterale (un trattino) tra di loro:
<AssignMessage name='template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
Un uso comune di <AssignVariable>
è impostare un valore predefinito per un parametro di query, un'intestazione o un altro valore che può essere passato con la richiesta. A tale scopo devi utilizzare una combinazione di elementi figli <Ref>
e <Value>
. Per ulteriori informazioni, consulta gli esempi per <Ref>
.
<Name>
(elemento secondario di <AssignVariable>
)
Specifica il nome della variabile del flusso di destinazione (ad es. la variabile il cui valore è impostato dal criterio AssignMessage). Se la variabile denominata in <AssignVariable>
non esiste, il
criterio ne crea una con quel nome.
Valore predefinito | n/a |
Obbligatorio? | Obbligatorio |
Tipo | Stringa |
Elemento principale |
<AssignVariable>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <Name>
è la seguente:
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, <AssignVariable>
lo crea.
<Ref>
(elemento secondario di <AssignVariable>
)
Specifica l'origine del compito come variabile di flusso. La variabile di flusso può essere una delle variabili di flusso predefinite (elencate nella sezione Riferimento alle variabili di flusso) o una variabile di flusso personalizzata creata da te.
Il valore di <Ref>
viene sempre interpretato come una variabile di flusso. Non puoi specificare una stringa letterale come valore. Per assegnare un valore di stringa letterale, utilizza invece l'elemento <Value>
.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<AssignVariable>
|
Elementi secondari | Nessuno |
Quando specifichi una variabile di flusso con <Ref>
, ometti le parentesi graffe "{}" che normalmente utilizzeresti per fare riferimento a una variabile di flusso. Ad esempio,
per impostare il valore della nuova variabile sul valore della variabile
del flusso client.host
:
Do this (no brackets): <Ref>client.host</Ref> Do NOT do this (brackets): <Ref>{client.host}</Ref>
Per definire un valore predefinito per la variabile del flusso di destinazione, utilizza <Value>
in combinazione con <Ref>
. Se la variabile di flusso specificata da
<Ref>
non esiste, non può essere letta o è null, Edge assegna il valore
di <Value>
alla variabile di flusso di destinazione.
La sintassi dell'elemento <Ref>
è la seguente:
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 del flusso
request.header.user-agent
alla variabile del flusso di destinazione myvar
e
il valore del parametro di query country
alla variabile Country
:
<AssignMessage name="assignvariable-4"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> </AssignVariable> </AssignMessage>
In questo esempio, Edge non ha un valore predefinito (o alternativo) specificato per nessuna assegnazione.
Esempio 2
L'esempio seguente assegna il valore della variabile del flusso request.header.user-agent
alla variabile del 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 null, illeggibili o con formato non corretto, Edge assegna il valore "ErrorOnCopy" alle nuove variabili.
Esempio 3
Un caso d'uso comune per <AssignVariable>
è impostare il valore predefinito di un parametro
della query, di un'intestazione o di un altro valore che può essere trasmesso con la richiesta. Ad esempio, crei
un proxy dell'API meteo in cui la richiesta accetta un singolo parametro di query denominato "w". Questo
parametro contiene l'ID della città per cui vuoi il meteo. L'URL della richiesta ha
il seguente formato:
http://myCO.com/v1/weather/forecastrss?w=city_ID
Per definire un valore predefinito per "w", crea un criterio AssignMessage 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>
ottiene il valore di request.queryparam.w
e lo assegna a se stesso. Se la variabile di flusso è null, il che significa che il parametro di query "w" è stato omesso dalla richiesta, questo esempio utilizza il valore predefinito dell'elemento <Value>
. Pertanto, puoi effettuare una richiesta a questo proxy API
che omette il parametro di query "w":
http://myCO.com/v1/weather/forecastrss
...e il proxy API restituisce comunque un risultato valido.
A differenza di quando utilizzi <Value>
, il valore di <Ref>
deve essere una variabile di flusso, ad esempio una proprietà di un oggetto request
, response
o target
. Il valore può anche essere una variabile di flusso personalizzata creata da te.
Se specifichi una variabile di flusso che non esiste per il valore di <Ref>
e il valore di <IgnoreUnresolvedVariables>
è "true", Edge genera un errore.
<Template>
(elemento secondario di <AssignVariable>
)
Specifica un modello di messaggio. Un modello di messaggio consente di eseguire la sostituzione delle stringhe di variabili quando viene eseguito il criterio e può combinare stringhe letterali con nomi delle variabili racchiusi tra parentesi graffe. Inoltre, i modelli di messaggio supportano le funzioni come la conversione delle maiuscole e la conversione delle lettere.
Utilizza l'attributo ref
per specificare una variabile di flusso in cui il valore della variabile è un modello di messaggio. Ad esempio, puoi memorizzare un modello di messaggio come
attributo personalizzato
in un'app per sviluppatori. Quando Edge identifica l'app per sviluppatori dopo aver verificato la chiave API
o il token di sicurezza (tramite un criterio aggiuntivo), l'elemento <AssignVariable>
potrebbe utilizzare il modello di messaggio dall'attributo personalizzato dell'app, che è disponibile
come variabile di flusso dal criterio di sicurezza. L'esempio seguente presuppone che il
template di messaggio sia disponibile in un attributo cliente chiamato message_template
nell'app sviluppatore che effettua la chiamata API, dove è stato utilizzato il regolamento VerifyAPIKey per verificare
la chiave API dell'app:
<AssignVariable ref='verifyapikey.myVerifyAPIKeyPolicy.app.name.message_template'/>
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<AssignVariable>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <Template>
è la seguente:
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 di messaggi per concatenare due variabili di contesto con una stringa letterale (un trattino) tra di loro:
<AssignMessage name='template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
Esempio 2
L'esempio seguente specifica una variabile di flusso, in cui il valore della variabile è un modello di messaggio predefinito. Utilizza questa opzione se vuoi inserire un modello predefinito al runtime senza dover modificare il criterio:
<AssignMessage name='template-2'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template ref='my_template_variable'/> </AssignVariable> </AssignMessage>
Esempio 3
L'esempio seguente specifica una variabile di flusso e un valore di testo. In questo caso, se
la variabile a cui si fa riferimento non è null, quel valore viene utilizzato come modello. Se il valore di riferimento è nullo, viene utilizzato come modello il valore di testo (in questo caso {system.uuid}-{messageid}
). Questo pattern è utile per fornire un valore "override", in quanto
in alcuni casi è necessario ignorare il modello predefinito (la parte di testo) con valori
impostati in modo dinamico. Ad esempio, un'istruzione condizionale potrebbe recuperare un valore
da una mappa chiave-valore e impostare la variabile a cui fa riferimento su quel valore:
<AssignMessage name='template-2'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template ref='my_variable'>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
<Value>
(elemento secondario di <AssignVariable>
)
Definisce il valore della variabile del flusso di destinazione impostata con <AssignVariable>
. Il valore viene sempre interpretato come stringa letterale; non puoi utilizzare una variabile di flusso come valore, anche se lo inserisci tra parentesi ("{}"). Per utilizzare una variabile di flusso, utilizza <Ref>
.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<AssignVariable>
|
Elementi secondari | Nessuno |
Se utilizzato in combinazione con l'elemento <Ref>
, <Value>
funge da valore predefinito (o di riserva). Se <Ref>
non è specificato, non è risolvibile o è nullo, viene utilizzato il valore di <Value>
.
La sintassi dell'elemento <Value>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Value>variable_value</Value> </AssignVariable> </AssignMessage>
Esempio 1
Il seguente esempio imposta il valore della variabile del 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 va a buon fine, <AssignVariable>
assegna il valore "ErrorOnCopy" alla variabile del flusso di destinazione.
<Copy>
Copia i valori dal messaggio specificato dall'attributo source
al messaggio specificato dall'elemento <AssignTo>
. Se non specifichi un target con <AssignTo>
, questo criterio copia i valori nella richiesta o nella risposta, a seconda di dove viene eseguito nel flusso.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<AssignMessage>
|
Elementi secondari |
<FormParams> <Headers> <Path> <Payload> <QueryParams> <ReasonPhrase> <StatusCode> <Verb> <Version> |
La sintassi dell'elemento <Copy>
è la seguente:
Sintassi
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="policy_name" >
<Copy source="[request|response]">
<!-- Can also be an empty array (<FormParams/>) -->
<FormParams>
<FormParam name="formparam_name">formparam_value</FormParam>
...
</FormParams>
<!-- Can also be an empty array (<Headers/>) -->
<Headers>
<Header name="header_name">header_value</Header>
...
</Headers>
<Path>[false|true]</Path>
<Payload>[false|true]</Payload>
<!-- Can also be an empty array (<QueryParams/>) -->
<QueryParams>
<QueryParam name="queryparam_name">queryparam_value</QueryParam>
...
</QueryParams>
<ReasonPhrase>[false|true]</ReasonPhrase>
<StatusCode>[false|true]</StatusCode>
<Verb>[false|true]</Verb>
<Version>[false|true]</Version>
</Copy>
<!-- Used as the destination for the <Copy>
values -->
<AssignTo createNew="[true|false]" transport="http"
type="[request|response]">destination_variable_name</AssignTo>
</AssignMessage>
Esempio 1
L'esempio seguente copia un'intestazione, tre parametri di modulo, il percorso e tutti i parametri di query dalla richiesta a una nuova richiesta personalizzata:
<AssignMessage continueOnError="false" enabled="true" name="copy-1"> <Copy source="request"> <Headers> <Header name="Header_Name_1">Header value 1</Header> </Headers> <FormParams> <FormParam name="Form_Param_Name_1">Form param value 1</FormParam> <FormParam name="Form_Param_Name_2">Form param value 1</FormParam> <FormParam name="Form_Param_Name_3">Form param value 1</FormParam> </FormParams> <Payload>false</Payload> <Path>true</Path> <QueryParams/> <ReasonPhrase>false</ReasonPhrase> <StatusCode>false</StatusCode> <Verb>false</Verb> <Version>false</Version> </Copy> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
L'elemento <Copy>
prevede i seguenti attributi:
Attributo | Descrizione | Obbligatorio? | Tipo |
---|---|---|---|
origine |
Specifica l'oggetto di origine della copia.
|
Facoltativo | Stringa |
<FormParams>
(elemento 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 alcun effetto su una risposta.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Array di elementi <FormParam> o un array vuoto |
Elemento principale |
<Copy>
|
Elementi secondari |
<FormParam> |
La sintassi dell'elemento <FormParams>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> </Copy> </AssignMessage>
Esempio 1
Il seguente esempio copia un singolo parametro del modulo dalla richiesta alla richiesta personalizzata "MyCustomRequest":
<AssignMessage name="copy-formparams-1"> <Copy source="request"> <FormParams> <FormParam name="paramName">Form param value 1</FormParam> </FormParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Esempio 2
L'esempio seguente copia tutti i parametri del modulo nella richiesta personalizzata "MyCustomRequest":
<AssignMessage name="copy-formparams-2"> <Copy source="request"> <FormParams/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Esempio 3
L'esempio seguente copia tre parametri di 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 form 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>
Questo esempio copia "f1", "f2" e il secondo valore di "f3". Se "f3" ha un solo valore, non viene copiato.
Puoi utilizzare <FormParams>
solo se sono soddisfatti i seguenti criteri:
- Verbo HTTP: POST
- Tipo di messaggio: risposta
- Uno (o entrambi) dei seguenti elementi:
- Dati del modulo: impostato su un valore o su "" (la stringa vuota). Ad esempio, con
curl
, aggiungi-d ""
alla richiesta. - Intestazione
Content-Length
: impostata su 0 (se non sono presenti dati nella richiesta originale) o sulla lunghezza corrente. Ad esempio, concurl
aggiungi-H "Content-Length: 0"
alla richiesta.
- Dati del modulo: impostato su un valore o su "" (la stringa vuota). Ad esempio, con
Quando copi <FormParams>
, <Copy>
imposta Content-Type
del messaggio su "application/x-www-form-urlencoded" prima di inviare il messaggio al servizio di destinazione.
<Headers>
(elemento 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/a |
Obbligatorio? | Facoltativo |
Tipo | Un array di elementi <Header> o un array vuoto |
Elemento principale |
<Copy>
|
Elementi secondari |
<Header> |
La sintassi dell'elemento <Headers>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Copy> </AssignMessage>
Esempio 1
L'esempio seguente copia l'intestazione user-agent
dalla richiesta al
nuovo oggetto di richiesta personalizzato:
<AssignMessage name="copy-headers-1"> <Copy source="request"> <Headers> <Header name="user-agent"/> </Headers> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Esempio 2
Per copiare tutte le intestazioni, utilizza un elemento <Headers>
vuoto, come mostrato 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>
Questo esempio copia "h1", "h2" e il secondo valore di "h3". Se "h3" ha un solo valore, non viene copiato.
<Path>
(elemento secondario di <Copy>
)
Determina se il percorso deve essere copiato dalla richiesta di origine alla richiesta di destinazione. Questo elemento non ha alcun effetto su una risposta.
Se "true", questo criterio copia il percorso dal messaggio di richiesta specificato dall'attributo source
dell'elemento <Copy>
al messaggio di richiesta specificato dall'elemento <AssignTo>
.
Valore predefinito | Falso |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Copy>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <Path>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Path>[false|true]</Path> </Copy> </AssignMessage>
Esempio 1
L'esempio seguente indica che il criterio AssignMessage 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 sono soddisfatti i seguenti criteri:
- Tipo di messaggio: richiesta
<Payload>
(elemento 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 il valore è "true", questo criterio copia il payload dal messaggio specificato dall'attributo source
dell'elemento <Copy>
al messaggio specificato dall'elemento <AssignTo>
.
Valore predefinito | Falso |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Copy>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <Payload>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Payload>[false|true]</Payload> </Copy> </AssignMessage>
Esempio 1
L'esempio seguente imposta <Payload>
su "true" in modo che il payload della richiesta venga
copiato dalla richiesta alla risposta:
<AssignMessage name="copy-payload-1"> <Copy source="request"> <Payload>true</Payload> </Copy> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
<QueryParams>
(elemento 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 alcun effetto su una risposta.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Un array di elementi <QueryParam> o un array vuoto |
Elemento principale |
<QueryParam>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <QueryParams>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Copy> </AssignMessage>
Esempio 1
Il seguente esempio copia il parametro di query "my_param" dalla richiesta in 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 in un nuovo oggetto request 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>
Questo esempio copia "qp1", "qp2" e il secondo valore di "qp3". Se "qp3" ha un solo valore, non viene copiato.
Puoi utilizzare <QueryParams>
solo se sono soddisfatti i seguenti criteri:
- Verbo HTTP: GET
- Tipo di messaggio: richiesta
<ReasonPhrase>
(elemento secondario di <Copy>
)
Determina se la frase del motivo deve essere copiata dalla risposta di origine alla risposta di destinazione. Questo elemento non ha alcun effetto su una richiesta.
Se "true", questa norma copia ReasonPhrase
da la risposta
specificata dall'attributo source
dell'elemento <Copy>
a la risposta
specificata dall'elemento <AssignTo>
.
Valore predefinito | Falso |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Copy>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <ReasonPhrase>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <ReasonPhrase>[false|true]</ReasonPhrase> </Copy> </AssignMessage>
Esempio 1
Nell'esempio seguente, <ReasonPhrase>
viene impostato su "true", il che fa sì che <Copy>
copi la frase del motivo dalla risposta predefinita a un oggetto di risposta personalizzata:
<AssignMessage name="copy-reasonphrase-1"> <Copy source="response"> <ReasonPhrase>true</ReasonPhrase> </Copy> <AssignTo createNew="trie" transport="http" type="response">MyCustomResponse</AssignTo> </AssignMessage>
Puoi utilizzare <ReasonPhrase>
solo se sono soddisfatti i seguenti criteri:
- Tipo di messaggio: risposta
<StatusCode>
(elemento secondario di <Copy>
)
Determina se il codice di stato viene copiato dalla risposta di origine alla risposta di destinazione. Questo elemento non ha alcun effetto su una richiesta.
Se "true", questo criterio copia il codice di stato dal messaggio di risposta specificato dall'attributo source
dell'elemento <Copy>
al messaggio di risposta specificato dall'elemento <AssignTo>
.
Valore predefinito | Falso |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Copy>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <StatusCode>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <StatusCode>[false|true]</StatusCode> </Copy> </AssignMessage>
Esempio 1
L'esempio seguente imposta <StatusCode>
su "true", il che copia il codice stato
dall'oggetto di risposta predefinito a un nuovo oggetto di risposta personalizzato:
<AssignMessage name="copy-statuscode-1"> <Copy source="response"> <StatusCode>true</StatusCode> </Copy> <AssignTo createNew="true" transport="http" type="response">MyCustomResponse</AssignTo> </AssignMessage>
Puoi utilizzare <StatusCode>
solo se sono soddisfatti i seguenti criteri:
- Tipo di messaggio: risposta
Un uso comune di <StatusCode>
è assicurarsi che la risposta del proxy abbia lo stesso stato della risposta ricevuta dalla destinazione quando l'attributo createNew
di <AssignTo>
è impostato su "true".
<Verb>
(elemento secondario di <Copy>
)
Determina se il verbo HTTP viene copiato dalla richiesta di origine alla richiesta di destinazione. Questo elemento non ha alcun effetto su una risposta.
Se "true", copia il verbo trovato nell'attributo source
dell'elemento <Copy>
nella richiesta specificata nell'elemento <AssignTo>
.
Valore predefinito | Falso |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Copy>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <Verb>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Verb>[false|true]</Verb> </Copy> </AssignMessage>
Esempio 1
L'esempio seguente imposta <Verb>
su "true", il che copia 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 sono soddisfatti i seguenti criteri:
- Tipo di messaggio: richiesta
<Version>
(elemento secondario di <Copy>
)
Determina se la versione HTTP viene copiata dalla richiesta di origine alla richiesta di destinazione. Questo elemento non ha alcun effetto su una risposta.
Se "true", copia la versione HTTP trovata nell'attributo source
dell'elemento <Copy>
nell'oggetto specificato dall'elemento <AssignTo>
.
Valore predefinito | Falso |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Copy>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <Version>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Version>[false|true]</Version> </Copy> </AssignMessage>
Esempio 1
Nell'esempio seguente, <Version>
viene impostato su "true" nella richiesta, che copia la versione dall'oggetto richiesta predefinito in un nuovo oggetto 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 sono soddisfatti i seguenti criteri:
- Tipo di messaggio: richiesta
<DisplayName>
Da utilizzare insieme all'attributo name
per etichettare il criterio nell'editor proxy dell'interfaccia utente di gestione con un nome diverso e più naturale.
L'elemento <DisplayName>
è comune a tutti i criteri.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo. Se ometti <DisplayName> , viene utilizzato il valore dell'attributo name del criterio |
Tipo | Stringa |
Elemento principale | <PolicyElement> |
Elementi secondari | Nessuno |
La sintassi dell'elemento <DisplayName>
è la seguente:
Sintassi
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
Esempio
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
L'elemento <DisplayName>
non ha attributi o elementi secondari.
<IgnoreUnresolvedVariables>
Determina se l'elaborazione si interrompe quando viene rilevata una variabile non risolta.
Valore predefinito | Falso |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<AssignMessage>
|
Elementi secondari | Nessuno |
Imposta su true
per ignorare le variabili non risolte e continuare l'elaborazione; altrimenti
false
. Il valore predefinito è false
.
L'impostazione di <IgnoreUnresolvedVariables>
su true
è diversa dall'impostazione di continueOnError
di <AssignMessage>
su true
in quanto è specifica per l'impostazione e l'ottenimento dei valori delle variabili. Se imposti continueOnError
su
true
, Edge ignora tutti gli errori, non solo quelli rilevati durante l'utilizzo
delle variabili.
La sintassi dell'elemento <IgnoreUnresolvedVariables>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables> </AssignMessage>
Esempio 1
Nell'esempio seguente, <IgnoreUnresolvedVariables>
viene impostato su "true":
<AssignMessage name="ignoreunresolvedvariables"> <Copy source="response"> ... <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </Copy> </AssignMessage>
<Remove>
Rimuove le intestazioni, parametri di ricerca, i parametri del modulo e/o il payload del messaggio da un messaggio. Il messaggio può essere una richiesta o una risposta. Specifica su quale messaggio <Remove>
agisce utilizzando l'elemento <AssignTo>
.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Tipo complesso |
Elemento principale |
<AssignMessage>
|
Elementi secondari |
<FormParams> <Headers> <Payload> <QueryParams> |
Un caso d'uso comune per <Remove>
è eliminare un parametro di query contenente informazioni sensibili dall'oggetto della richiesta in arrivo, per evitare di trasmetterlo al server di backend.
La sintassi dell'elemento <Remove>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Remove> </AssignMessage>
Esempio 1
L'esempio seguente rimuove il corpo del messaggio dalla risposta:
<AssignMessage continueOnError="false" enabled="true" name="remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
Nel flusso di risposta, questo criterio rimuove il corpo della risposta, restituendo al client solo le intestazioni HTTP.
Esempio 2
L'esempio seguente rimuove tutti i parametri del modulo e un parametro di query dalla richiesta entrante:
<AssignMessage continueOnError="false" enabled="true" name="remove-2"> <Remove> <!-- Empty (<FormParams/>) removes all form parameters --> <FormParams/> <QueryParams> <QueryParam name="qp1"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
<FormParams>
(elemento secondario di <Remove>
)
Rimuove i parametri del modulo specificati dalla richiesta. Questo elemento non ha alcun effetto su una risposta.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Array di elementi <FormParam> o un array vuoto |
Elemento principale |
<Remove>
|
Elementi secondari |
<FormParam> |
La sintassi dell'elemento <FormParams>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> </Remove> </AssignMessage>
Esempio 1
L'esempio seguente rimuove tre parametri del modulo dalla richiesta:
<AssignMessage name="remove-formparams-1"> <Remove> <FormParams> <FormParam name="form_param_1"/> <FormParam name="form_param_2"/> <FormParam name="form_param_3"/> </FormParams> </Remove> <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/> </AssignMessage>
Esempio 2
L'esempio seguente rimuove tutti i parametri del modulo dalla richiesta:
<AssignMessage name="remove-formparams-2"> <Remove> <FormParams/> </Remove> <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/> </AssignMessage>
Esempio 3
Se sono presenti più parametri form con lo stesso nome, utilizza la seguente sintassi:
<AssignMessage name="remove-formparams-3"> <Remove> <FormParams> <FormParam name="f1"/> <FormParam name="f2"/> <FormParam name="f3.2"/> </FormParams> </Remove> <AssignTo createNew="false" transport="http" type="application/x-www-form-urlencoded"/> </AssignMessage>
Questo esempio rimuove "f1", "f2" e il secondo valore di "f3". Se "f3" ha un solo valore, non viene rimosso.
Puoi utilizzare <FormParams>
solo se sono soddisfatti i seguenti criteri:
- Tipo di messaggio: richiesta
Content-Type
: "application/x-www-form-urlencoded"
<Headers>
(elemento secondario di <Remove>
)
Rimuove le intestazioni HTTP specificate dalla richiesta o dalla risposta, come specificato dall'elemento
<AssignTo>
.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Array di elementi <Header> o un array vuoto |
Elemento principale |
<Remove>
|
Elementi secondari |
<Header> |
La sintassi dell'elemento <Headers>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Remove> </AssignMessage>
Esempio 1
L'esempio seguente rimuove l'intestazione user-agent
dalla richiesta:
<AssignMessage name="remove-headers-1"> <Remove> <Headers> <Header name="user-agent"/> </Headers> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Esempio 2
L'esempio seguente rimuove tutte le intestazioni dalla richiesta:
<AssignMessage name="remove-headers-2"> <Remove> <Headers/> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Esempio 3
Se sono presenti più intestazioni con lo stesso nome, utilizza la seguente sintassi:
<AssignMessage name="remove-headers-3"> <Remove> <Headers> <Header name="h1"/> <Header name="h2"/> <Header name="h3.2"/> </Headers> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Questo esempio rimuove "h1", "h2" e il secondo valore di "h3" dalla richiesta. Se "h3" ha un solo valore, non viene rimosso.
<Payload>
(elemento secondario di <Remove>
)
Determina se <Remove>
elimina il payload nella richiesta o nella risposta, che è
specificato dall'elemento <AssignTo>
. Imposta il valore su "true" per cancellare il payload; in caso contrario, imposta il valore su "false". Il valore predefinito è "false".
Valore predefinito | Falso |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Remove>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <Payload>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <Payload>[false|true]</Payload> </Remove> </AssignMessage>
Esempio 1
L'esempio seguente imposta <Payload>
su "true" in modo che il payload della richiesta venga cancellato:
<AssignMessage name="remove-payload-1"> <Remove> <Payload>true</Payload> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
<QueryParams>
(elemento secondario di <Remove>
)
Rimuove i parametri di ricerca specificati dalla richiesta. Questo elemento non ha alcun effetto su una risposta.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Array di elementi <QueryParam> o un array vuoto |
Elemento principale |
<Remove>
|
Elementi secondari |
<QueryParam> |
La sintassi dell'elemento <QueryParams>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Remove> </AssignMessage>
Esempio 1
L'esempio seguente rimuove un singolo parametro di query dalla richiesta:
<AssignMessage name="remove-queryparams-1"> <Remove> <QueryParams> <QueryParam name="qp1"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Esempio 2
L'esempio seguente rimuove tutti parametri di ricerca dalla richiesta:
<AssignMessage name="remove-queryparams-2"> <Remove> <QueryParams/> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Esempio 3
Se sono presenti più parametri di query con lo stesso nome, utilizza la seguente sintassi:
<AssignMessage name="remove-queryparams-3"> <Remove> <QueryParams> <QueryParam name="qp1"/> <QueryParam name="qp2"/> <QueryParam name="qp3.2"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Questo esempio rimuove "qp1", "qp2" e il secondo valore di "qp3" dalla richiesta. Se "qp3" ha un solo valore, non viene rimosso.
Esempio 4
Il seguente esempio rimuove il parametro di query apikey
dalla richiesta:
<AssignMessage name="remove-query-param"> <Remove> <QueryParams> <QueryParam name="apikey"/> </QueryParams> </Remove> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Puoi utilizzare <QueryParams>
solo se sono soddisfatti i seguenti criteri:
- Verbo HTTP: GET
- Tipo di messaggio: richiesta
<Set>
Imposta le informazioni nel messaggio di richiesta o risposta, specificate dall'elemento <AssignTo>
. <Set>
sovrascrive le intestazioni o
i parametri esistenti nel messaggio originale. Per creare un nuovo parametro o intestazione, utilizza invece l'elemento <Add>
.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Tipo complesso |
Elemento principale |
<AssignMessage>
|
Elementi secondari |
<FormParams> <Headers> <Payload> <Path> <QueryParams> <ReasonPhrase> <StatusCode> <Verb> <Version> |
La sintassi dell'elemento <Set>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Path>path</Path> <Payload contentType="content_type" variablePrefix="prefix" variableSuffix="suffix">new_payload</Payload> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> <StatusCode>HTTP_status_code or {variable}</StatusCode> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
Esempio 1
L'esempio seguente mostra l'elemento <Set>
:
<AssignMessage continueOnError="false" enabled="true" name="set-1"> <Set> <FormParams> <FormParam name="myparam">{request.header.myparam}</FormParam> </FormParams> <Headers> <Header name="user-agent">{request.header.user-agent}</Header> </Headers> <QueryParams> <QueryParam name="name">{request.header.name}</QueryParam> <QueryParam name="address">{request.header.address}</QueryParam> </QueryParams> <!-- <Verb>GET</Verb> --> <Payload contentType="text/plain">42</Payload> <Path/> <ReasonPhrase>Bad request</ReasonPhrase> <StatusCode>400</StatusCode> <Verb>POST</Verb> <Verb>{my_variable}</Verb> <Version>1.1</Version> </Set> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
<FormParams>
(elemento secondario di <Set>
)
Sostituisce i parametri del modulo esistenti in una richiesta e li sostituisce con i nuovi valori specificati con questo elemento. Questo elemento non ha alcun effetto su una risposta.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Array di elementi <FormParam> |
Elemento principale |
<Set>
|
Elementi secondari |
<FormParam> |
La sintassi dell'elemento <FormParams>
è la seguente:
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
Il seguente esempio imposta un parametro del modulo denominato "myparam" sul valore della variabile
request.header.myparam
in una nuova richiesta personalizzata:
<AssignMessage name="set-formparams-1"> <Set> <FormParams> <FormParam name="myparam">{request.header.myparam}</FormParam> </FormParams> </Set> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Puoi utilizzare <FormParams>
solo se sono soddisfatti i seguenti criteri:
- Verbo HTTP: POST
- Tipo di messaggio: richiesta
Se nel criterio
(<Add><FormParams/></Add>
) definisci parametri di modulo vuoti, il criterio non aggiunge parametri
di modulo. È lo stesso che omettere <FormParams>
.
<Set>
modifica il Content-Type
del messaggio in "application/x-www-form-urlencoded" prima di inviarlo all'endpoint di destinazione.
<Headers>
(elemento secondario di <Set>
)
Sostituisce le intestazioni HTTP esistenti nella richiesta o nella risposta, specificate dall'elemento
<AssignTo>
.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Array di elementi <Header> |
Elemento principale |
<Set>
|
Elementi secondari |
<Header> |
La sintassi dell'elemento <Headers>
è la seguente:
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
Nell'esempio seguente, l'intestazione user-agent
viene impostata sul valore della variabile
request.header.user-agent
:
<AssignMessage name="set-headers-1"> <Set> <Headers> <Header name="user-agent">{request.header.user-agent}</Header> </Headers> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Se nel criterio definisci intestazioni vuote (<Add><Headers/></Add>
), il criterio non aggiunge intestazioni. È lo stesso che omettere <Headers>
.
<Path>
(elemento secondario di <Set>
)
<Payload>
(elemento secondario di <Set>
)
Definisce il corpo del messaggio per una richiesta o una risposta, specificato dall'elemento
<AssignTo>
. Il payload può essere qualsiasi tipo di contenuto valido, ad esempio testo normale, JSON o XML.
Valore predefinito | stringa vuota |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<Set>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <Payload>
è la seguente:
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
L'esempio seguente imposta un payload in testo normale:
<AssignMessage name="set-payload-1"> <Set> <Payload contentType="text/plain">42</Payload> </Set> </AssignMessage>
Esempio 2
L'esempio seguente imposta 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 racchiudendo i nomi delle variabili tra parentesi graffe:
<AssignMessage name="set-payload-3"> <Set> <Payload contentType="application/json"> {"name":"foo", "type":"{variable_name}"} </Payload> </Set> </AssignMessage>
Nelle versioni precedenti di Apigee Edge, ad esempio prima della release cloud 16.08.17, non potevi
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 inserire i nomi delle variabili, come segue:
<AssignMessage name="set-payload-3b"> <Set> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> {"name":"foo", "type":"@variable_name#"} </Payload> </Set> </AssignMessage>
Questa sintassi precedente funziona ancora.
Esempio 4
I contenuti di <Payload>
vengono considerati un modello di messaggio. Ciò significa che il criterio AssignMessage sostituisce le variabili racchiuse tra parentesi graffe con il valore delle variabili a cui viene fatto riferimento in fase di esecuzione.
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 |
(Facoltativo) Specifica il delimitatore iniziale di una variabile di flusso. Il valore predefinito è "{". Per maggiori informazioni, consulta la sezione Riferimento alle variabili di flusso. | Facoltativo | Char |
variableSuffix |
(Facoltativo) Specifica il delimitatore finale di una variabile di flusso. Il valore predefinito è "}". Per maggiori informazioni, consulta la sezione Riferimento alle variabili di flusso. | Facoltativo | Char |
<QueryParams>
(elemento secondario di <Set>
)
Sostituisce parametri di ricerca esistenti nella richiesta con nuovi valori. Questo elemento non ha alcun effetto su una risposta.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Array di elementi <QueryParam> |
Elemento principale |
<Set>
|
Elementi secondari |
<QueryParam> |
La sintassi dell'elemento <QueryParams>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Set> </AssignMessage>
Esempio 1
L'esempio seguente imposta il parametro di query "address" sul valore della variabile
request.header.address
:
<AssignMessage continueOnError="false" enabled="true" name="set-queryparams-1"> <Set> <QueryParams> <QueryParam name="address">{request.header.address}</QueryParam> </QueryParams> </Set> </AssignMessage>
Puoi utilizzare <QueryParams>
solo se sono soddisfatti i seguenti criteri:
- Verbo HTTP: GET
- Tipo di messaggio: richiesta
Se nella norma (<Set><QueryParams/></Set>
) definisci parametri di ricerca vuoti, la norma non ne imposta nessuno. È lo stesso che omettere <QueryParams>
.
<ReasonPhrase>
(elemento secondario di <Set>
)
Imposta la frase del motivo nella risposta. Questa operazione viene normalmente eseguita per il debug in combinazione con
<StatusCode>
. Questo elemento non ha alcun effetto su una richiesta.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<Set>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <ReasonPhrase>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> </Set> </AssignMessage>
Esempio 1
L'esempio seguente definisce una frase di motivo semplice:
<AssignMessage name="set-reasonphrase-1"> <Set> <ReasonPhrase>Bad medicine</ReasonPhrase> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Esempio 2
I contenuti di <ReasonPhrase>
vengono considerati un modello di messaggio. Ciò significa che
un nome di variabile racchiuso tra parentesi graffe verrà sostituito in fase di esecuzione con il valore della
variabile a cui fa riferimento, come mostrato nell'esempio seguente:
<AssignMessage name="set-reasonphrase-2"> <Set> <ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Puoi utilizzare <ReasonPhrase>
solo se sono soddisfatti i seguenti criteri:
- Tipo di messaggio: risposta
<StatusCode>
(elemento secondario di <Set>
)
Imposta il codice di stato nella risposta. Questo elemento non ha alcun effetto su una richiesta.
Valore predefinito | "200" (quando l'attributo createNew di <AssignTo> è impostato su "true") |
Obbligatorio? | Facoltativo |
Tipo | Stringa o variable |
Elemento principale |
<Set>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <StatusCode>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <StatusCode>HTTP_status_code or {variable}</StatusCode> </Set> </AssignMessage>
Esempio 1
L'esempio seguente imposta un codice di stato semplice:
<AssignMessage name="set-statuscode-1"> <Set> <StatusCode>404</StatusCode> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Esempio 2
I contenuti di <StatusCode>
vengono considerati un modello di messaggio. Ciò significa che un
nome di variabile racchiuso tra parentesi graffe verrà sostituito in fase di esecuzione con il valore della
variabile a cui fa riferimento, come mostrato nell'esempio seguente:
<AssignMessage name="set-statuscode-2"> <Set> <StatusCode>{calloutresponse.status.code}</StatusCode> </Set> <AssignTo createNew="true" transport="http" type="response"/> </AssignMessage>
Puoi utilizzare <StatusCode>
solo se sono soddisfatti i seguenti criteri:
- Tipo di messaggio: risposta
<Verb>
(elemento secondario di <Set>
)
Imposta il verbo HTTP nella richiesta. Questo elemento non ha alcun effetto su una risposta.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Stringa o variable |
Elemento principale |
<Set>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <Verb>
è la seguente:
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 sulla richiesta:
<AssignMessage name="set-verb-1"> <Set> <Verb>POST</Verb> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Esempio 2
I contenuti di <Verb>
vengono considerati un modello di messaggio. Ciò significa che un nome di variabile
racchiuso tra parentesi graffe verrà sostituito in fase di esecuzione con il valore della variabile
a cui fa riferimento.
L'esempio seguente utilizza una variabile per compilare un verbo:
<AssignMessage name="set-verb-2"> <Set> <Verb>{my_variable}</Verb> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Puoi utilizzare <Verb>
solo se sono soddisfatti i seguenti criteri:
- Tipo di messaggio: richiesta
<Version>
(elemento secondario di <Set>
)
Imposta la versione HTTP in una richiesta. Questo elemento non ha alcun effetto su una risposta.
Valore predefinito | n/a |
Obbligatorio? | Facoltativo |
Tipo | Stringa o variable |
Elemento principale |
<Set>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <Version>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
Esempio 1
L'esempio seguente imposta il numero di versione su "1.1":
<AssignMessage name="set-version-1"> <Set> <Version>1.1</Version> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Esempio 2
Il codice seguente utilizza una variabile tra parentesi graffe per impostare il numero di versione:
<AssignMessage name="set-version-2"> <Set> <Version>{my_version}</Version> </Set> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
I contenuti di <Version>
vengono considerati un modello di messaggio. Ciò significa che un
nome di variabile racchiuso tra parentesi graffe verrà sostituito in fase di esecuzione con il valore della variabile
a cui fa riferimento.
Puoi utilizzare <Version>
solo se sono soddisfatti i seguenti criteri:
- Tipo di messaggio: richiesta
Creare messaggi di richiesta personalizzati
Puoi utilizzare il criterio AssignMessage per creare un messaggio di richiesta personalizzato. Dopo aver creato una richiesta personalizzata, puoi utilizzarla nei seguenti modi:
- Accedere alle relative variabili in altri criteri
- Trasmetterlo a un servizio esterno
Per creare un messaggio di richiesta personalizzato, utilizza l'elemento <AssignTo>
nel criterio AssignMessage. Imposta createNew
su "true" e specifica il nome del nuovo messaggio nel corpo
dell'elemento, come mostrato nell'esempio seguente:
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request"/> </AssignMessage>
Per impostazione predefinita, Edge non fa nulla con il messaggio di richiesta personalizzato. Dopo averlo creato, Edge continuerà con il flusso con la richiesta originale. Per utilizzare la richiesta personalizzata, aggiungi al proxy un criterio come il criterio ServiceCallout che possa trasmettere la richiesta personalizzata a un servizio esterno.
I seguenti esempi creano messaggi di richiesta personalizzati:
Esempio 1
L'esempio seguente crea un oggetto request personalizzato con il messaggio Assegna:
<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>
Questo esempio:
- Crea un nuovo oggetto messaggio di richiesta denominato "MyCustomRequest".
- In MyCustomRequest, queste norme:
- Copia il valore dell'intestazione HTTP
user-agent
dalla richiesta entrante al nuovo messaggio. Poiché<Copy>
utilizza un riferimento assoluto alla variabile di flussouser-agent
, non è necessario specificare l'attributosource
per<Copy>
. - Imposta il parametro di query
address
nel messaggio personalizzato sul valore del parametro di queryaddy
della richiesta in arrivo. - Imposta il verbo HTTP su
GET
.
- Copia il valore dell'intestazione HTTP
- Imposta
<IgnoreUnresolvedVariables>
su "false". Quando<IgnoreUnresolvedVariables>
è "false", se una delle variabili che il criterio tenta di aggiungere non esiste, Edge interromperà l'elaborazione nel flusso dell'API.
Esempio 2
Ecco un altro esempio che mostra come creare un oggetto di richiesta personalizzato con Assign Message:
<AssignMessage name="AssignMessage-2"> <AssignTo createNew="true" type="request">partner.request</AssignTo> <Set> <Verb>POST</Verb> <Payload contentType="text/xml"> <request><operation>105</operation></request> </Payload> </Set> </AssignMessage>
Questo esempio crea una nuova richiesta personalizzata denominata "partner.request". Imposta quindi <Verb>
e <Payload>
nella nuova richiesta.
Puoi accedere a un messaggio di richiesta personalizzato in un altro criterio AssignMessage che si verifica più avanti nel flusso. L'esempio seguente recupera il valore dell'intestazione user-agent
del messaggio di richiesta personalizzata:
<AssignMessage name="custom-request-1-access"> <DisplayName>custom-request-1-access</DisplayName> <AssignTo createNew="false" type="request"></AssignTo> <Set> <Headers> <Header name="user-agentCopyCustomRequest">{MyCustomRequest.header.user-agent}</Header> </Headers> </Set> </AssignMessage>
Video
Guarda i seguenti video per scoprire di più sulle norme di AssignMessage.
Video | Descrizione |
---|---|
Perché assegnare le norme relative ai messaggi? | Scopri i vantaggi dell'utilizzo del criterio AssignMessage per modificare la richiesta o la risposta dell'API senza modificare il codice di backend. |
Copiare gli elementi dell'API utilizzando il criterio AssignMessage | Copia gli elementi da una richiesta o una risposta dell'API e crea un nuovo oggetto di richiesta o risposta utilizzando il criterio AssignMessage. |
Rimuovere elementi dell'API utilizzando il criterio AssignMessage | Rimuovi gli elementi dell'API e modifica l'API prima che raggiunga il backend di destinazione utilizzando il criterio AssignMessage. |
Aggiungere e impostare elementi dell'API utilizzando il criterio AssignMessage | Modifica la richiesta o la risposta dell'API aggiungendo parametri di ricerca, intestazioni, parametri di modulo o payload utilizzando il criterio AssignMessage. |
Creare variabili personalizzate utilizzando il criterio AssignMessage | Imposta le variabili di flusso personalizzate utilizzando il criterio AssignMessage e utilizzale in altri criteri nel proxy API. |
Creare nuovi oggetti di richiesta o risposta utilizzando il criterio AssignMessage | Crea nuovi oggetti di richiesta o risposta API utilizzando il criterio AssignMessage al runtime dell'API. |
Creare un'API simulata utilizzando il criterio AssignMessage | Crea una semplice API REST simulata aggiungendo il criterio AssignMessage nel flusso di risposta. |
Impostare o modificare il payload utilizzando il criterio AssignMessage | Converti la richiesta REST in richiesta SOAP impostando il payload SOAP utilizzando il criterio AssignMessage al momento dell'esecuzione dell'API. |
Codici di errore
Questa sezione descrive i codici di errore e i messaggi di errore restituiti e le variabili di errore impostate da Edge quando questo criterio attiva un errore. Queste informazioni sono importanti se stai sviluppando regole di errore per gestire gli errori. Per scoprire di più, consulta Informazioni importanti sugli errori relativi alle norme e Gestione degli errori.
Errori di runtime
Questi errori possono verificarsi durante l'esecuzione del criterio.
Codice guasto | Stato HTTP | Causa | Correggi |
---|---|---|---|
steps.assignmessage.SetVariableFailed |
500 | Il criterio non è stato in grado di impostare una variabile. Controlla la stringa di errore per il nome della variabile non risolta. | |
steps.assignmessage.VariableOfNonMsgType |
500 |
Questo errore si verifica se l'attributo Le variabili di tipo di messaggio rappresentano intere richieste e risposte HTTP. Le variabili di flusso Edge integrate |
build |
steps.assignmessage.UnresolvedVariable |
500 |
Questo errore si verifica se una variabile specificata nel criterio Assegna messaggio è:
|
build |
Errori di deployment
Questi errori possono verificarsi quando esegui il deployment di un proxy contenente questo criterio.
Nome dell'errore | Causa | Correggi |
---|---|---|
InvalidIndex |
Se l'indice specificato negli elementi <Copy> e/o <Remove> del criterio Assegna messaggio è 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 va a buon fine 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 sopra. Il nome dell'errore è l'ultima parte del codice dell'errore. | fault.name Matches "UnresolvedVariable" |
assignmessage.policy_name.failed |
policy_name è il nome specificato dall'utente del criterio che ha generato l'errore. | assignmessage.AM-SetResponse.failed = true |
Esempio di risposta di errore
{ "fault":{ "detail":{ "errorcode":"steps.assignmessage.VariableOfNonMsgType" }, "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message" } }
Esempio di regola di errore
<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="Assign Message Faults"> <Step> <Name>AM-CustomNonMessageTypeErrorResponse</Name> <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition> </Step> <Step> <Name>AM-CustomSetVariableErrorResponse</Name> <Condition>(fault.name = "SetVariableFailed")</Condition> </Step> <Condition>(assignmessage.failed = true) </Condition> </FaultRule>
Schemi
Ogni tipo di norma è definito da uno schema XML (.xsd
). Come riferimento, gli schemi delle norme sono disponibili su GitHub.
Argomenti correlati
Gli esempi funzionanti del criterio AssignMessage sono disponibili negli esempi della piattaforma API.
Per un esempio più avanzato di come eseguire l'override di target.url
da ProxyEndpoint, consulta questo articolo della community Apigee.
Per vedere un "set path" in azione in un criterio ServiceCallout, consulta questo esempio di apprendimento pratico negli esempi GitHub di Apigee. Basta clonare il repository e seguire le istruzioni riportate nell'argomento. L'esempio utilizza il criterio Assegna messaggio per impostare un percorso della richiesta, quindi utilizza un criterio di callout del servizio per effettuare la richiesta a un servizio esterno.