Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info
![]()
Cosa
La policy AssignMessage modifica o crea nuovi messaggi di richiesta e risposta durante il flusso del proxy API. La policy ti consente di eseguire le seguenti azioni su questi messaggi:
- Aggiungi nuovi parametri del modulo, intestazioni o parametri di query a un messaggio
- Copia le proprietà esistenti da un messaggio a un 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 la policy AssignMessage, in genere aggiungi, modifichi o rimuovi le proprietà della richiesta o della risposta. Tuttavia, puoi anche utilizzare la policy AssignMessage per creare un messaggio di richiesta o risposta personalizzato e passarlo a un target alternativo, come descritto in Crea messaggi di richiesta personalizzati.
La policy AssignMessage può creare o modificare messaggi o variabili di flusso. Utilizza questa policy per modificare i messaggi di richiesta prima di inviarli tramite un proxy ai sistemi upstream o per modificare i messaggi di risposta prima di inoltrarli alle applicazioni consumer dell'API.
Elemento <AssignMessage>
Definisce una policy AssignMessage.
| Valore predefinito | Consulta la scheda Policy predefinita di seguito |
| Obbligatorio? | Obbligatorio |
| Tipo | Oggetto complesso |
| Elemento principale | n/a |
| Elementi secondari |
<Add><AssignTo><AssignVariable><Copy><DisplayName><IgnoreUnresolvedVariables><Remove><Set> |
L'elemento <AssignMessage> utilizza la seguente sintassi:
Sintassi
L'elemento <AssignMessage> utilizza la seguente sintassi:
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <!-- All AssignMessage child elements are optional --> <Add> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Add> <AssignTo createNew="[true|false]" transport="http" type="[request|response]">destination_variable_name</AssignTo> <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> <Template>message_template</Template> or <Template ref='template_variable'></Template> <Value>variable_value</Value> </AssignVariable> <Copy source="[request|response]"> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Path>[false|true]</Path> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> <ReasonPhrase>[false|true]</ReasonPhrase> <StatusCode>[false|true]</StatusCode> <Verb>[false|true]</Verb> <Version>[false|true]</Version> </Copy> <DisplayName>policy_display_name</DisplayName> <IgnoreUnresolvedVariables>[true|false] </IgnoreUnresolvedVariables> <Remove> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Remove> <Set> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Path>path</Path> <Payload contentType="content_type" variablePrefix="prefix" variableSuffix="suffix">new_payload</Payload> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> <StatusCode>HTTP_status_code or {variable}</StatusCode> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
Policy predefinita
L'esempio seguente mostra le impostazioni predefinite quando aggiungi una policy AssignMessage al tuo 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 una nuova policy AssignMessage nell'interfaccia utente di Edge, il modello contiene stub per tutte le possibili operazioni. In genere, selezioni le operazioni che vuoi eseguire con questa policy e rimuovi il resto degli elementi secondari. Ad esempio, se vuoi eseguire un'operazione di copia, utilizza l'elemento <Copy> e rimuovi <Add>, <Remove> e altri elementi secondari dalla policy per renderla 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 del 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 del messaggio specificata nell'elemento <AssignTo>. |
<Set> |
Facoltativo | Sostituisce i valori delle proprietà esistenti nella richiesta o nella risposta, specificata dall'elemento <AssignTo>.
|
| Altri elementi secondari | ||
<AssignTo> |
Facoltativo | Specifica il messaggio su cui opera la policy AssignMessage. Può essere la richiesta o la risposta standard oppure un nuovo messaggio personalizzato. |
<AssignVariable> |
Facoltativo | Assegna un valore a una variabile di flusso. Se la variabile non esiste, <AssignVariable> la crea. |
<IgnoreUnresolvedVariables> |
Facoltativo | Determina se l'elaborazione si interrompe quando viene rilevata una variabile non risolta. |
Ognuno di questi elementi secondari è descritto nelle sezioni seguenti.
Esempi
Gli esempi seguenti mostrano alcuni dei modi in cui puoi utilizzare la policy AssignMessage:
1: aggiungi intestazione
L'esempio seguente aggiunge un'intestazione alla richiesta con l'elemento <Add>:
<AssignMessage name="AM-add-headers-1">
<Add>
<Headers>
<Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
</Headers>
</Add>
<AssignTo>request</AssignTo>
</AssignMessage>2: rimuovi il payload
L'esempio seguente elimina il payload dalla risposta con l'elemento <Remove>:
<AssignMessage name="AM-remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo>response</AssignTo> </AssignMessage>
3: Modifica risposta
L'esempio seguente modifica un oggetto di risposta esistente aggiungendo un'intestazione:
<AssignMessage name="AM-modify-response">
<Set>
<Headers>
<Header name="Cache-Hit">{lookupcache.LookupCache-1.cachehit}</Header>
</Headers>
</Set>
<IgnoreUnresolvedVariables>false
</IgnoreUnresolvedVariables>
<AssignTo>response</AssignTo>
</AssignMessage>Questo esempio non crea un nuovo messaggio. Invece, modifica un messaggio di risposta esistente aggiungendo un'intestazione HTTP.
Poiché questo esempio specifica response come nome della variabile nell'elemento <AssignTo>, questa policy modifica l'oggetto della risposta originariamente impostato con i dati restituiti dal server di destinazione.
L'intestazione HTTP aggiunta al messaggio di risposta da questa policy deriva da una variabile compilata dalla policy LookupCache. Pertanto, il messaggio di risposta modificato da questa policy Assign Message contiene un'intestazione HTTP che indica se i risultati sono stati estratti dalla cache o meno. L'impostazione delle intestazioni nella risposta può essere utile per il debug e la risoluzione dei problemi.
4: imposta i contenuti dinamici
Puoi utilizzare Assign Message per incorporare contenuti dinamici nel payload dei messaggi di risposta e di richiesta.
Per incorporare le variabili di flusso Edge in un payload XML, racchiudi la variabile designata tra parentesi graffe, in questo modo: {prefix.name}.
L'esempio seguente incorpora il valore della variabile di flusso dell'intestazione HTTP user-agent in un elemento XML denominato User-agent:
<AssignMessage name="AM-set-dynamic-content"> <AssignTo>response</AssignTo> <Set> <Payload contentType="text/xml"> <User-agent>{request.header.user-agent}</User-agent> </Payload> </Set> <IgnoreUnresolvedVariables>false </IgnoreUnresolvedVariables> </AssignMessage>
Per i payload JSON, puoi inserire variabili utilizzando gli attributi variablePrefix e variableSuffix con caratteri delimitatori, come mostrato 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 il Riferimento per le variabili di flusso.
A partire dalla release cloud 16.08.17, puoi anche utilizzare le parentesi graffe per inserire le variabili.
5: rimuovi parametro di query
L'esempio seguente rimuove il parametro di query apikey dalla richiesta:
<AssignMessage name="AM-remove-query-param">
<Remove>
<QueryParams>
<QueryParam name="apikey"/>
</QueryParams>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>È una best practice rimuovere il parametro di query apikey dal messaggio di richiesta quando utilizzi la policy VerifyAPIKey per l'autenticazione utente. In questo modo, eviti che informazioni sensibili sulle chiavi vengano trasmesse al target di backend.
6: Imposta/recupera variabili
L'esempio seguente utilizza tre policy Assign Message:
- Crea tre variabili di flusso nella richiesta, con valori statici
- Recupera le variabili di flusso in modo dinamico in una seconda policy nel flusso di richiesta
- Li imposta nel payload della risposta
<!-- Policy #1: Set variables in the request --> <AssignMessage name="AM-set-variables"> <!-- Create a variable named myAppSecret --> <AssignVariable> <Name>myAppSecret</Name> <Value>42</Value> </AssignVariable> <!-- Create a variable named config.environment --> <AssignVariable> <Name>config.environment</Name> <Value>test</Value> </AssignVariable> <!-- Create a variable named config.protocol --> <AssignVariable> <Name>config.protocol</Name> <Value>gopher</Value> </AssignVariable> </AssignMessage>
Nella prima policy, l'elemento <AssignVariable> crea e imposta tre variabili nella richiesta. Ogni elemento <Name> specifica un nome di variabile e <Value> specifica il valore.
La seconda policy utilizza l'elemento <AssignVariable> per leggere i valori e crea tre nuove variabili:
<!-- Policy #2: Get variables from the request --> <AssignMessage continueOnError="false" enabled="true" name="get-variables"> <AssignTo createNew="false" transport="http" type="request"/> <!-- Get the value of myAppSecret and create a new variable, secret --> <AssignVariable> <Name>secret</Name> <Ref>myAppSecret</Ref> <Value>0</Value> </AssignVariable> <!-- Get the value of config.environment and create a new variable, environment --> <AssignVariable> <Name>environment</Name> <Ref>config.environment</Ref> <Value>default</Value> </AssignVariable> <!-- Get the value of config.protocol and create a new variable, protocol --> <AssignVariable> <Name>protocol</Name> <Ref>config.protocol</Ref> <Value>default</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </AssignMessage>
Nella seconda policy, l'elemento <Ref> fa riferimento alla variabile di origine, mentre gli elementi <Name> specificano i nomi delle nuove variabili. Se la variabile
a cui fa riferimento l'elemento <Ref> non è accessibile, puoi utilizzare il valore
specificato dall'elemento <Value>.
Per provare questo insieme di policy:
- Aggiungi le policy n. 1 e n. 2 al flusso di richiesta. Assicurati di inserire la policy n. 1 prima della policy n. 2.
- Aggiungi la terza policy nel flusso di risposta.
- La terza policy 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>consiste nel racchiuderle tra parentesi graffe.Assicurati di impostare l'attributo
contentTypedell'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 inviare i risultati tramite una pipeline a un'utilità come
xmllintin modo che l'XML venga visualizzato in una struttura formattata correttamente:curl -vL https://ahamilton-eval-test.apigee.net/myproxy | xmllint --format -
Il corpo della risposta dovrebbe essere simile al seguente:
<wrapper> <secret>42</secret> <config> <environment>test</environment> <protocol>gopher</protocol> </config> </wrapper>
7: recupera le intestazioni della risposta del callout di servizio
Nell'esempio seguente, supponiamo che nella richiesta del proxy API sia presente una policy ServiceCallout e che la risposta del callout contenga più intestazioni con lo stesso nome (Set-Cookie). Supponendo che la variabile di risposta del callout di servizio sia il valore predefinito calloutResponse, la seguente policy ottiene il secondo valore dell'intestazione Set-Cookie.
<AssignMessage name="AM-Payload-from-SC-header"> <Set> <Payload contentType="application/json"> {"Cookies from Service Callout":" {calloutResponse.header.Set-Cookie.2}"} </Payload> </Set> <IgnoreUnresolvedVariables>true </IgnoreUnresolvedVariables> <AssignTo>response</AssignTo> </AssignMessage>
Per elencare tutti i valori dell'intestazione, utilizza invece la seguente variabile:
{calloutResponse.header.Set-Cookie.values}Ogni elemento secondario in questo riferimento contiene esempi aggiuntivi. Per altri esempi, consulta Esempio di AssignMessage su GitHub.
Riferimento dell'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> |
L'elemento <Add> utilizza la seguente sintassi:
Sintassi
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="policy_name" >
<Add>
<FormParams>
<FormParam name="formparam_name">formparam_value</FormParam>
...
</FormParams>
<Headers>
<Header name="header_name">header_value</Header>
...
</Headers>
<QueryParams>
<QueryParam name="queryparam_name">queryparam_value</QueryParam>
...
</QueryParams>
</Add>
</AssignMessage>Esempio 1
L'esempio seguente utilizza l'elemento <FormParams> per ottenere i valori di tre parametri della stringa di query dalla richiesta iniziale e impostarli come parametri del modulo nella richiesta dell'endpoint di destinazione:
<AssignMessage name="AM-add-formparams-3">
<Add>
<FormParams>
<FormParam name="username">{request.queryparam.name}</FormParam>
<FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
<FormParam name="default_language">{request.queryparam.lang}</FormParam>
</FormParams>
</Add>
<Remove>
<QueryParams/>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>Esempio 2
L'esempio seguente utilizza l'elemento <Headers> per aggiungere un'intestazione partner-id alla richiesta che verrà inviata all'endpoint di destinazione:
<AssignMessage name="AM-add-headers-1">
<Add>
<Headers>
<Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
</Headers>
</Add>
<AssignTo>request</AssignTo>
</AssignMessage>Esempio 3
L'esempio seguente utilizza l'elemento <QueryParams> per aggiungere alla richiesta un singolo parametro di query con un valore statico:
<AssignMessage name="AM-add-queryparams-1">
<Add>
<QueryParams>
<QueryParam name="myParam">42</QueryParam>
</QueryParams>
</Add>
<AssignTo>request</AssignTo>
</AssignMessage>Questo esempio utilizza <Add> nel preflow della richiesta. Se esamini i risultati in uno strumento come lo strumento Trace, la richiesta a https://example-target.com/get diventa https://example-target.com/get?myParam=42.
Gli elementi secondari di <Add> supportano la sostituzione dinamica delle stringhe, nota come creazione di modelli di messaggi.
<FormParams> (figlio di <Add>)
Aggiunge nuovi parametri del modulo al messaggio di richiesta. Questo elemento non ha alcun effetto su un messaggio di risposta.
| Valore predefinito | n/a |
| Obbligatorio? | Facoltativo |
| Tipo | Array di elementi <FormParam> |
| Elemento principale |
<Add>
|
| Elementi secondari |
<FormParam> |
L'elemento <FormParams> utilizza la seguente sintassi:
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 ("answer") e un valore statico ("42") alla richiesta:
<AssignMessage name="AM-add-formparams-1">
<Add>
<FormParams>
<FormParam name="answer">42</FormParam>
</FormParams>
</Add>
<AssignTo>request</AssignTo>
</AssignMessage>Esempio 2
L'esempio seguente recupera il valore del parametro di query name e lo aggiunge alla richiesta come parametro del modulo, quindi rimuove il parametro di query:
<AssignMessage name="AM-Swap-QueryParam-to-FormParams">
<Add>
<FormParam name="name">{request.queryparam.name}</FormParam>
</Add>
<Remove>
<QueryParam name="name"/>
</Remove>
</AssignMessage>Tieni presente che questo esempio non specifica un target con <AssignTo>. Questa policy aggiunge il parametro solo alla richiesta.
Esempio 3
L'esempio seguente aggiunge più parametri del modulo alla richiesta:
<AssignMessage name="AM-add-formparams-3">
<Add>
<FormParams>
<FormParam name="username">{request.queryparam.name}</FormParam>
<FormParam name="zip_code">{request.queryparam.zipCode}</FormParam>
<FormParam name="default_language">{request.queryparam.lang}</FormParam>
</FormParams>
</Add>
<Remove>
<QueryParams/>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>Questo esempio recupera i parametri della stringa di query dalla richiesta di origine e li aggiunge come parametri del modulo con nomi diversi. Quindi rimuove i parametri di query originali. Apigee invierà la richiesta modificata all'endpoint di destinazione.
Puoi utilizzare lo strumento Trace per esaminare il flusso. Vedrai che il corpo della richiesta contiene i dati del modulo con codifica URL, che sono stati originariamente passati come parametri della stringa di query:
username=nick&zip_code=90210&default_language=en
Puoi utilizzare <FormParams> solo se sono soddisfatti i seguenti criteri:
- Verbo HTTP: POST
- Tipo di messaggio: Richiesta
- Uno (o entrambi) dei seguenti:
- Dati del modulo: impostati su un valore o su "" (la stringa vuota). Ad esempio, con
curl, aggiungi-d ""alla richiesta. - Intestazione
Content-Length: impostala su 0 (se non sono presenti dati nella richiesta originale; in caso contrario, la lunghezza corrente, in byte). Ad esempio, concurlaggiungi-H "Content-Length: 0"alla tua richiesta.
- Dati del modulo: impostati 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> (figlio di <Add>)
Aggiunge nuove intestazioni alla richiesta o alla risposta specificata, che è indicata dall'elemento <AssignTo>.
| Valore predefinito | n/a |
| Obbligatorio? | Facoltativo |
| Tipo | Array di elementi <Header> |
| Elemento principale |
<Add>
|
| Elementi secondari |
<Header> |
L'elemento <Headers> utilizza la seguente sintassi:
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 un'intestazione partner-id al messaggio di richiesta e assegna il valore della variabile di flusso verifyapikey.VAK-1.developer.app.partner-id a questa intestazione.
<AssignMessage name="AM-add-headers-1">
<Add>
<Headers>
<Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header>
</Headers>
</Add>
<AssignTo>request</AssignTo>
</AssignMessage><QueryParams> (figlio di <Add>)
Aggiunge nuovi parametri di query alla richiesta. Questo elemento non ha alcun effetto su una risposta.
| Valore predefinito | n/a |
| Obbligatorio? | Facoltativo |
| Tipo | Array di elementi <QueryParam> |
| Elemento principale |
<Add>
|
| Elementi secondari |
<QueryParam> |
L'elemento <QueryParams> utilizza la seguente sintassi:
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 name="AM-add-queryparams-1">
<Add>
<QueryParams>
<QueryParam name="myParam">42</QueryParam>
</QueryParams>
</Add>
<AssignTo>request</AssignTo>
</AssignMessage>Puoi utilizzare <QueryParams> solo se sono soddisfatti i seguenti criteri:
- Verbo HTTP: GET
- Tipo di messaggio: Richiesta
Inoltre, puoi impostare i parametri di query solo quando l'attributo type dell'elemento <AssignTo> è un messaggio di richiesta. L'impostazione di questi valori nella risposta non ha alcun effetto.
Se nella policy definisci un array vuoto di parametri di query (<Add><QueryParams/></Add>), la policy non aggiunge parametri di query. Equivale a omettere <QueryParams>.
<AssignTo>
Determina l'oggetto su cui opera la policy AssignMessage. Le opzioni sono:
- Messaggio di richiesta: l'oggetto
requestricevuto dal proxy API - Messaggio di risposta: il
responserestituito dal server di destinazione - Messaggio personalizzato: un oggetto di richiesta o risposta personalizzato
Tieni presente che in alcuni casi non puoi modificare l'oggetto su cui agisce la policy AssignMessage.
Ad esempio, non puoi utilizzare <Add> o <Set> per aggiungere o modificare i parametri di query (<QueryParams>) o i parametri del modulo (<FormParams>) nella risposta. Puoi manipolare solo i parametri di query e i parametri del modulo nella richiesta.
| Valore predefinito | n/a |
| Obbligatorio? | Facoltativo |
| Tipo | Stringa |
| Elemento principale |
<AssignMessage>
|
| Elementi secondari | Nessuno |
Se non specifichi <AssignTo> o se specifichi l'elemento <AssignTo>, ma non specifichi un valore di testo per l'elemento, la policy agisce sulla richiesta o sulla risposta predefinita, che si basa sulla posizione in cui viene eseguita la policy. Se la policy viene eseguita nel flusso della richiesta, influisce sul messaggio di richiesta. Se viene eseguita nel flusso di risposta, la policy influisce sulla risposta per impostazione predefinita.
L'elemento <AssignTo> utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignTo createNew="[true|false]" transport="http" type="[request|response]">destination_variable_name</AssignTo> </AssignMessage>
Esempio 1
L'esempio seguente specifica che la destinazione è la richiesta originale che verrà inviata all'endpoint di destinazione:
<AssignMessage name="assignto-1"> <!-- DO NOT do this --> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Esempio 2
L'esempio seguente crea un nuovo oggetto di richiesta:
<AssignMessage name="AM-assignto-2"> <AssignTo createNew="true" transport="http" type="request">NameOfNewMessage</AssignTo> </AssignMessage>
Quando crei un nuovo oggetto richiesta o risposta, gli altri elementi della policy AssignMessage (come <Add>, <Set> e <Copy>) agiscono sul nuovo oggetto richiesta.
Puoi accedere al nuovo oggetto della richiesta in altre policy più avanti nel flusso o inviare il nuovo oggetto della richiesta a un servizio esterno con una policy ServiceCallout.
Esempio 3
L'esempio seguente crea un nuovo oggetto di richiesta denominato "MyRequestObject":
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request">MyRequestObject</AssignTo> </AssignMessage>
Quando crei un nuovo oggetto richiesta o risposta, gli altri elementi della policy AssignMessage (come <Add>, <Set> e <Copy>) agiscono sul nuovo oggetto richiesta.
Puoi accedere al nuovo oggetto della richiesta in altre policy più avanti nel flusso o inviare il nuovo oggetto della richiesta a un servizio esterno con una policy ServiceCallout.
La tabella seguente descrive gli attributi di <AssignTo>:
| Attributo | Descrizione | Obbligatorio? | Tipo |
|---|---|---|---|
createNew |
Determina se questa policy crea un nuovo messaggio quando assegna i valori. Se "true", la policy crea una nuova variabile del tipo specificato da Se è "false", la policy risponde in uno dei due modi seguenti:
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 di nuovo messaggio, quando createNew è "true". I valori validi sono "request" o "response".
Se ometti questo attributo, Edge crea una richiesta o una risposta, a seconda del punto del flusso in cui viene eseguita questa policy. |
Facoltativo | Stringa |
<AssignVariable>
Assegna un valore a una variabile di flusso. Se la variabile di flusso non esiste, <AssignVariable> la crea.
| Valore predefinito | n/a |
| Obbligatorio? | Facoltativo |
| Tipo | Tipo complesso |
| Elemento principale |
<AssignMessage>
|
| Elementi secondari |
<Name> (obbligatorio)<Ref><Template><Value> |
Il valore che assegni alla variabile di flusso può essere uno dei seguenti:
- Stringa letterale: utilizza l'elemento secondario
<Value>per specificare un valore di stringa letterale per la variabile di flusso. - Variabile di flusso: utilizza l'elemento figlio
<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 il Riferimento per le variabili di flusso. - Modello di messaggio: utilizza l'elemento secondario
<Template>per specificare un modello di messaggio da interpolare, per ottenere il valore da inserire nella variabile di flusso di destinazione.
L'elemento <AssignVariable> utilizza la seguente sintassi:
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 elemento ha la precedenza sugli altri elementi secondari.
Esempio 1
L'esempio seguente 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 riesce, Edge assegna il valore "ErrorOnCopy" alla variabile di 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 loro:
<AssignMessage name='AV-via-template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
Un uso comune di <AssignVariable> è impostare un valore predefinito per un parametro di query, un'intestazione o un altro valore che può essere trasmesso con la richiesta. Per farlo, utilizza una combinazione degli elementi secondari <Ref> e <Value>. Per saperne di più, consulta gli esempi per <Ref>.
<Name> (figlio di <AssignVariable>)
Specifica il nome della variabile di flusso di destinazione (ad esempio, la variabile il cui valore è impostato dalla policy AssignMessage). Se la variabile denominata in <AssignVariable> non esiste, la policy ne crea una con quel nome.
| Valore predefinito | n/a |
| Obbligatorio? | Obbligatorio |
| Tipo | Stringa |
| Elemento principale |
<AssignVariable>
|
| Elementi secondari | Nessuno |
L'elemento <Name> utilizza la seguente sintassi:
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> (figlio di <AssignVariable>)
Specifica l'origine dell'assegnazione come variabile di flusso. La variabile di flusso può essere una delle variabili di flusso predefinite (come elencate nel Riferimento alle variabili di flusso) o una variabile di flusso personalizzata che hai creato.
Il valore di <Ref> viene sempre interpretato come una variabile di flusso; non puoi specificare una stringa letterale come valore. Per assegnare un valore 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 utilizzeresti normalmente per fare riferimento a una variabile di flusso. Ad esempio, per impostare il valore della nuova variabile sul valore della variabile di flusso client.host:
Do this (no brackets): <Ref>client.host</Ref> Do NOT do this (brackets): <Ref>{client.host}</Ref>
Per definire un valore predefinito per la variabile di flusso di destinazione, utilizza <Value>
in combinazione con <Ref>. Se la variabile di flusso specificata da <Ref> non esiste, non può essere letta o è null, Edge assegna il valore di <Value> alla variabile di flusso di destinazione.
L'elemento <Ref> utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Ref>source_variable</Ref> </AssignVariable> </AssignMessage>
Esempio 1
L'esempio seguente assegna il valore della variabile di flusso request.header.user-agent alla variabile di flusso di destinazione myvar e il valore del parametro di query country alla variabile Country:
<AssignMessage name="assignvariable-4"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> </AssignVariable> </AssignMessage>
In questo esempio, Edge non ha un valore predefinito (o di riserva) specificato per nessuna delle due assegnazioni.
Esempio 2
L'esempio seguente assegna il valore della variabile di flusso request.header.user-agent alla variabile di flusso di destinazione myvar e il valore del parametro di query country alla variabile Country:
<AssignMessage name="assignvariable-2"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> </AssignMessage>
In questo esempio, se i valori della variabile di flusso request.header.user-agent o del parametro di query Country sono nulli, illeggibili o non corretti, Edge assegna il valore "ErrorOnCopy" alle nuove variabili.
Esempio 3
Un caso d'uso comune per <AssignVariable> è impostare il valore predefinito di un parametro di query, un'intestazione o un altro valore che può essere passato con la richiesta. Ad esempio, crei un proxy API Weather in cui la richiesta accetta un singolo parametro di query denominato "w". Questo parametro contiene l'ID della città per cui vuoi conoscere 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 una policy AssignMessage come la 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, ovvero 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 fare in modo che il proxy API restituisca comunque un risultato valido.
A differenza di quando utilizzi <Value>, il valore di <Ref> deve essere una variabile di flusso, ad esempio una proprietà di un oggetto request, response o target. Il valore può anche essere una variabile di flusso personalizzata che hai creato.
Se specifichi una variabile di flusso che non esiste per il valore di <Ref> e il valore di <IgnoreUnresolvedVariables> è "true", Edge genera un errore.
<Template> (figlio di <AssignVariable>)
Specifica un modello di messaggio. Un modello di messaggio consente di eseguire la sostituzione di stringhe di variabili quando viene eseguita la policy e può combinare stringhe letterali con nomi di variabili racchiusi tra parentesi graffe. Inoltre, i modelli di messaggio supportano funzioni come l'escaping e la conversione di maiuscole e minuscole.
Utilizza l'attributo ref per specificare una variabile di flusso in cui il valore della variabile è un template di messaggio. Ad esempio, puoi archiviare 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 una policy aggiuntiva), l'elemento <AssignVariable> potrebbe utilizzare il modello di messaggio dall'attributo personalizzato dell'app, disponibile come variabile di flusso dalla policy di sicurezza.
| Valore predefinito | n/a |
| Obbligatorio? | Facoltativo |
| Tipo | Stringa |
| Elemento principale |
<AssignVariable>
|
| Elementi secondari | Nessuno |
L'elemento <Template> utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Template>message_template</Template> or <Template ref='template_variable'></Template> </AssignVariable> </AssignMessage>
Esempio 1
L'esempio seguente utilizza la sintassi dei modelli di messaggio per concatenare due variabili di contesto con una stringa letterale (un trattino) tra di loro:
<AssignMessage name='AV-via-template-1'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
Esempio 2
L'esempio seguente specifica una variabile di flusso, il cui valore è un modello di messaggio predefinito. Utilizza questa opzione se vuoi inserire un modello predefinito in fase di runtime senza dover modificare la policy:
<AssignMessage name='AV-via-template-indirectly'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template ref='my_template_variable'/> </AssignVariable> </AssignMessage>
Esempio 3
L'esempio seguente specifica una variabile di flusso e un valore di testo. In questo caso, se la variabile di riferimento non è null, il valore viene utilizzato come modello. Se il valore di riferimento è null, il valore di testo (in questo caso, {system.uuid}-{messageid}) viene utilizzato come modello. Questo pattern è utile per fornire un valore di "override", in cui in alcuni casi vuoi eseguire l'override del template predefinito (la parte di testo) con valori impostati in modo dinamico. Ad esempio, un'istruzione condizionale potrebbe recuperare un valore da una mappa chiave-valore e impostare la variabile di riferimento su quel valore:
<AssignMessage name='AV-template-with-fallback'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Value>BADDBEEF</Value> <Template ref='my_variable'>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
<Value> (figlio di <AssignVariable>)
Definisce il valore della variabile di flusso di destinazione impostata con <AssignVariable>. Il valore viene sempre interpretato come una stringa letterale; non puoi utilizzare una variabile di flusso come valore, anche se racchiudi il valore tra parentesi ("{}"). Per utilizzare una variabile di flusso, utilizza invece <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 è null, viene utilizzato il valore di <Value>.
L'elemento <Value> utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <AssignVariable> <Name>variable_name</Name> <Value>variable_value</Value> </AssignVariable> </AssignMessage>
Esempio 1
L'esempio seguente imposta il valore della variabile di flusso di destinazione, myvar, sul valore letterale "42":
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
Esempio 2
L'esempio seguente assegna il valore della variabile di flusso request.header.user-agent alla variabile di flusso myvar e il valore del parametro di query country alla variabile Country:
<AssignMessage name="assignvariable-2"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> </AssignMessage>
Se una delle assegnazioni non riesce, <AssignVariable> assegna il valore "ErrorOnCopy" alla variabile di flusso di destinazione.
<Copy>
Copia i valori dal messaggio specificato dall'attributo source
al messaggio specificato dall'elemento <AssignTo>. Se non specifichi una destinazione con <AssignTo>, questa policy copia i valori nella richiesta o nella risposta, a seconda del punto del flusso in cui viene eseguita.
| Valore predefinito | n/a |
| Obbligatorio? | Facoltativo |
| Tipo | Stringa |
| Elemento principale |
<AssignMessage>
|
| Elementi secondari |
<FormParams><Headers><Path><Payload><QueryParams><ReasonPhrase><StatusCode><Verb><Version> |
Se non specifichi elementi secondari sotto l'elemento <Copy>, verranno copiate tutte le parti del messaggio di origine designato.
L'elemento <Copy> utilizza la seguente sintassi:
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 del modulo, il percorso e tutti i parametri di query dal messaggio request in una nuova richiesta personalizzata denominata newRequest:
<AssignMessage name="AM-copy-1"> <AssignTo createNew="true" transport="http" type="request">newRequest</AssignTo> <Copy source="request"> <Headers> <Header name="Header_Name_1"/> </Headers> <FormParams> <FormParam name="Form_Param_Name_1"/> <FormParam name="Form_Param_Name_2"/> <FormParam name="Form_Param_Name_3"/> </FormParams> <Path>true</Path> <QueryParams/> </Copy> </AssignMessage>
Poiché elementi come <Payload> e <Verb> non sono presenti, la policy non copia queste parti del messaggio.
Esempio 2
L'esempio seguente rimuove innanzitutto tutto il contenuto del messaggio response esistente, quindi copia tutti i valori di un messaggio diverso denominato secondResponse nel messaggio response:
<AssignMessage name='AM-Copy-Response'> <AssignTo createNew="false" transport="http" type="response">response</AssignTo> <!-- first remove any existing values --> <Remove/> <!-- then copy everything from the designated message --> <Copy source="secondResponse"/> </AssignMessage>
L'elemento <Copy> ha un solo attributo:
| Attributo | Descrizione | Obbligatorio? | Tipo |
|---|---|---|---|
| origine |
Specifica l'oggetto di origine della copia.
|
Facoltativo | Stringa |
<FormParams> (figlio di <Copy>)
Copia i parametri del modulo dalla richiesta specificata dall'attributo source dell'elemento <Copy> nella richiesta specificata dall'elemento <AssignTo>. Questo elemento non ha alcun effetto su una risposta.
| Valore predefinito | n/a |
| Obbligatorio? | Facoltativo |
| Tipo | Array di elementi <FormParam> o un array vuoto |
| Elemento principale |
<Copy>
|
| Elementi secondari |
<FormParam> |
L'elemento <FormParams> utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> </Copy> </AssignMessage>
Esempio 1
L'esempio seguente copia un singolo parametro del modulo dalla richiesta alla richiesta personalizzata "MyCustomRequest":
<AssignMessage name="copy-formparams-1"> <Copy source="request"> <FormParams> <FormParam name="paramName">Form param value 1</FormParam> </FormParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Esempio 2
L'esempio seguente copia tutti i parametri del modulo nella richiesta personalizzata "MyCustomRequest":
<AssignMessage name="copy-formparams-2"> <Copy source="request"> <FormParams/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Esempio 3
L'esempio seguente copia tre parametri del modulo nella richiesta personalizzata "MyCustomRequest":
<AssignMessage name="copy-formparams-3"> <Copy source="request"> <FormParams> <FormParam name="paramName1"/> <FormParam name="paramName2"/> <FormParam name="paramName3"/> </FormParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Esempio 4
Se sono presenti più parametri del modulo 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:
- Dati del modulo: impostati su un valore o su "" (la stringa vuota). Ad esempio, con
curl, aggiungi-d ""alla richiesta. - Intestazione
Content-Length: impostala su 0 (se non sono presenti dati nella richiesta originale; in caso contrario, imposta la lunghezza corrente). Ad esempio, concurlaggiungi-H "Content-Length: 0"alla tua richiesta.
- Dati del modulo: impostati su un valore o su "" (la stringa vuota). Ad esempio, con
Quando copi <FormParams>, <Copy> imposta il Content-Type del messaggio su "application/x-www-form-urlencoded" prima di inviare il messaggio al servizio di destinazione.
<Headers> (figlio 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> |
L'elemento <Headers> utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> </Copy> </AssignMessage>
Esempio 1
L'esempio seguente copia l'intestazione user-agent dalla richiesta al nuovo oggetto della richiesta personalizzata:
<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> (figlio di <Copy>)
Determina se il percorso deve essere copiato dalla richiesta di origine alla richiesta di destinazione. Questo elemento non ha alcun effetto su una risposta.
Se "true", questa policy 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 |
L'elemento <Path> utilizza la seguente sintassi:
Sintassi
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="policy_name" >
<Copy source="[request|response]">
<Path>[false|true]</Path>
</Copy>
</AssignMessage>Esempio 1
L'esempio seguente indica che la policy 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> (figlio di <Copy>)
Determina se il payload deve essere copiato dall'origine alla destinazione. L'origine e la destinazione possono essere richieste o risposte.
Se impostata su "true", questa policy 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 |
L'elemento <Payload> utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <Payload>[false|true]</Payload> </Copy> </AssignMessage>
Esempio 1
L'esempio seguente imposta <Payload> su "true" in modo che il payload della richiesta venga copiato dalla richiesta alla risposta:
<AssignMessage name="AM-copy-payload-1"> <Copy source="request"> <Payload>true</Payload> </Copy> <AssignTo>response</AssignTo> </AssignMessage>
<QueryParams> (figlio di <Copy>)
Copia i parametri della stringa di query da la richiesta specificata dall'attributo source dell'elemento <Copy> a la richiesta specificata dall'elemento <AssignTo>. Questo elemento non ha alcun effetto su una risposta.
| Valore predefinito | n/a |
| Obbligatorio? | Facoltativo |
| Tipo | Un array di elementi <QueryParam> o un array vuoto |
| Elemento principale |
<QueryParam>
|
| Elementi secondari | Nessuno |
L'elemento <QueryParams> utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Copy source="[request|response]"> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Copy> </AssignMessage>
Esempio 1
L'esempio seguente copia il parametro di query "my_param" dalla richiesta 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 i parametri di query dalla richiesta in un nuovo oggetto richiesta personalizzato:
<AssignMessage name="copy-queryparams-2"> <Copy source="request"> <QueryParams/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Esempio 3
Se sono presenti più parametri di query con lo stesso nome, utilizza la seguente sintassi:
<AssignMessage name="copy-queryparams-3"> <Copy source="request"> <QueryParams> <QueryParam name="qp1"/> <QueryParam name="qp2"/> <QueryParam name="qp3.2"/> </QueryParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Questo esempio copia "qp1", "qp2" e il secondo valore di "qp3". Se "qp3" ha un solo valore, non viene copiato.
Puoi utilizzare <QueryParams> solo se sono soddisfatti i seguenti criteri:
- Verbo HTTP: GET
- Tipo di messaggio: Richiesta
<ReasonPhrase> (figlio di <Copy>)
Determina se la frase di motivazione deve essere copiata dalla risposta di origine alla risposta di destinazione. Questo elemento non ha alcun effetto su una richiesta.
Se "true", questa policy copia ReasonPhrase da la risposta
specificata dall'attributo source dell'elemento <Copy> a la risposta
specificata dall'elemento <AssignTo>.
| Valore predefinito | Falso |
| Obbligatorio? | Facoltativo |
| Tipo | Booleano |
| Elemento principale |
<Copy>
|
| Elementi secondari | Nessuno |
L'elemento <ReasonPhrase> utilizza la seguente sintassi:
Sintassi
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="policy_name" >
<Copy source="[request|response]">
<ReasonPhrase>[false|true]</ReasonPhrase>
</Copy>
</AssignMessage>Esempio 1
L'esempio seguente imposta <ReasonPhrase> su true. <AssignTo><Copy>response
<AssignMessage name="AM-copy-reasonphrase-1">
<Copy source="serviceCalloutResponse">
<ReasonPhrase>true</ReasonPhrase>
</Copy>
<AssignTo>response</AssignTo>
</AssignMessage>Puoi utilizzare <ReasonPhrase> solo quando i messaggi di origine e di destinazione sono di tipo Response.
<StatusCode> (figlio di <Copy>)
Determina se il codice di stato viene copiato dalla risposta di origine alla risposta di destinazione. Questo elemento non ha alcun effetto su una richiesta.
Se "true", questa policy copia il codice di stato dal messaggio di risposta specificato dall'attributo source dell'elemento <Copy> al messaggio di risposta specificato dall'elemento <AssignTo>.
| Valore predefinito | Falso |
| Obbligatorio? | Facoltativo |
| Tipo | Booleano |
| Elemento principale |
<Copy>
|
| Elementi secondari | Nessuno |
L'elemento <StatusCode> utilizza la seguente sintassi:
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", che copia il codice di 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 quando i messaggi di origine e di destinazione sono di tipo Response.
Un uso comune di <StatusCode> è impostare il codice di stato della risposta del proxy su un valore diverso da quello ricevuto dalla destinazione.
<Verb> (figlio di <Copy>)
Determina se il verbo HTTP viene copiato dalla richiesta di origine alla richiesta di destinazione. Questo elemento non ha alcun effetto su una risposta.
Se "true", copia il verbo trovato nell'attributo source dell'elemento <Copy>
nella richiesta specificata nell'elemento <AssignTo>.
| Valore predefinito | Falso |
| Obbligatorio? | Facoltativo |
| Tipo | Booleano |
| Elemento principale |
<Copy>
|
| Elementi secondari | Nessuno |
L'elemento <Verb> utilizza la seguente sintassi:
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", 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> (figlio di <Copy>)
Determina se la versione HTTP viene copiata dalla richiesta di origine alla richiesta di destinazione. Questo elemento non ha alcun effetto su una risposta.
Se "true", copia la versione HTTP trovata nell'attributo source dell'elemento <Copy> nell'oggetto specificato dall'elemento <AssignTo>.
| Valore predefinito | Falso |
| Obbligatorio? | Facoltativo |
| Tipo | Booleano |
| Elemento principale |
<Copy>
|
| Elementi secondari | Nessuno |
L'elemento <Version> utilizza la seguente sintassi:
Sintassi
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="policy_name" >
<Copy source="[request|response]">
<Version>[false|true]</Version>
</Copy>
</AssignMessage>Esempio 1
L'esempio seguente imposta <Version> su "true" nella richiesta, che copia la versione dall'oggetto della richiesta predefinito in un nuovo oggetto della 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>
Utilizzalo in aggiunta all'attributo name per etichettare la policy nell'editor proxy dell'interfaccia utente di gestione con un nome diverso e più naturale.
L'elemento <DisplayName> è comune a tutte le policy.
| Valore predefinito | n/a |
| Obbligatorio? | Facoltativo. Se ometti <DisplayName>, viene utilizzato il valore dell'attributo name della policy. |
| Tipo | Stringa |
| Elemento principale | <PolicyElement> |
| Elementi secondari | Nessuno |
L'elemento <DisplayName> utilizza la seguente sintassi:
Sintassi
<PolicyElement> <DisplayName>policy_display_name</DisplayName> ... </PolicyElement>
Esempio
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
L'elemento <DisplayName> non ha attributi o elementi secondari.
<IgnoreUnresolvedVariables>
Determina se l'elaborazione si interrompe quando viene rilevata una variabile non risolta.
| Valore predefinito | Falso |
| Obbligatorio? | Facoltativo |
| 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 il recupero dei valori delle variabili. Se imposti continueOnError su
true, Edge ignora tutti gli errori, non solo quelli riscontrati durante l'utilizzo delle
variabili.
L'elemento <IgnoreUnresolvedVariables> utilizza la seguente sintassi:
Sintassi
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="policy_name" >
<IgnoreUnresolvedVariables>[true|false]
</IgnoreUnresolvedVariables>
</AssignMessage>Esempio 1
L'esempio seguente imposta <IgnoreUnresolvedVariables> su "true":
<AssignMessage name="AM-Set-Headers"> <Set> <Headers> <Header name='new-header'>{possibly-defined-variable}<Header> </Headers> </Set> <IgnoreUnresolvedVariables>true </IgnoreUnresolvedVariables> </AssignMessage>
Poiché <IgnoreUnresolvedVariables> è impostato su true, se la variabile possibly-defined-variable non è definita, questa policy non genererà un errore.
<Remove>
Rimuove intestazioni, parametri di query, parametri di modulo e/o il payload del messaggio da un messaggio. Il messaggio può essere una richiesta o una risposta. Puoi specificare il messaggio su cui agisce <Remove> utilizzando l'elemento <AssignTo>.
| Valore predefinito | n/a |
| Obbligatorio? | Facoltativo |
| Tipo | Tipo complesso |
| Elemento principale |
<AssignMessage>
|
| Elementi secondari |
<FormParams><Headers><Payload><QueryParams> |
Un caso d'uso comune per <Remove> è l'eliminazione di un parametro di query o di un'intestazione che contiene informazioni sensibili dall'oggetto della richiesta in entrata, per evitare di trasmetterlo al server di backend.
L'elemento <Remove> utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Remove> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <!-- Can also be an empty array (<Headers/>) --> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> </Remove> </AssignMessage>
Esempio 1
L'esempio seguente rimuove il corpo del messaggio dalla risposta:
<AssignMessage name="AM-remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo>response</AssignTo> </AssignMessage>
Nel flusso di risposta, questa policy 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 dall'oggetto request:
<AssignMessage name="AM-remove-2">
<Remove>
<!-- Empty (<FormParams/>) removes all form parameters -->
<FormParams/>
<QueryParams>
<QueryParam name="qp1"/>
</QueryParams>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>Esempio 3
L'esempio seguente rimuove tutto da un oggetto messaggio:
<AssignMessage name="AM-remove-3"> <Remove/> <AssignTo>request</AssignTo> </AssignMessage>
In genere, questa operazione viene eseguita solo se intendi utilizzare l'elemento <Set> o l'elemento <Copy> per impostare alcuni valori sostitutivi nel messaggio.
<FormParams> (figlio di <Remove>)
Rimuove dalla richiesta i parametri del modulo specificati. Questo elemento non ha alcun effetto su una risposta.
| Valore predefinito | n/a |
| Obbligatorio? | Facoltativo |
| Tipo | Array di elementi <FormParam> o un array vuoto |
| Elemento principale |
<Remove>
|
| Elementi secondari |
<FormParam> |
L'elemento <FormParams> utilizza la seguente sintassi:
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="AM-remove-formparams-1">
<Remove>
<FormParams>
<FormParam name="form_param_1"/>
<FormParam name="form_param_2"/>
<FormParam name="form_param_3"/>
</FormParams>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>Esempio 2
L'esempio seguente rimuove tutti i parametri del modulo dalla richiesta:
<AssignMessage name="AM-remove-formparams-2">
<Remove>
<FormParams/>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>Esempio 3
Se sono presenti più parametri del modulo con lo stesso nome, utilizza la seguente sintassi:
<AssignMessage name="AM-remove-formparams-3">
<Remove>
<FormParams>
<FormParam name="f1"/>
<FormParam name="f2"/>
<FormParam name="f3.2"/>
</FormParams>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>Questo esempio rimuove "f1", "f2" e il secondo valore di "f3". Se "f3" ha un solo valore, non viene rimosso.
Puoi utilizzare <FormParams> solo se sono soddisfatti i seguenti criteri:
- Tipo di messaggio: Richiesta
Content-Type: "application/x-www-form-urlencoded"
<Headers> (figlio di <Remove>)
Rimuove le intestazioni HTTP specificate dalla richiesta o dalla risposta, che è specificata dall'elemento <AssignTo>.
| Valore predefinito | n/a |
| Obbligatorio? | Facoltativo |
| Tipo | Array di elementi <Header> o un array vuoto |
| Elemento principale |
<Remove>
|
| Elementi secondari |
<Header> |
L'elemento <Headers> utilizza la seguente sintassi:
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="AM-remove-one-header">
<Remove>
<Headers>
<Header name="user-agent"/>
</Headers>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>Esempio 2
L'esempio seguente rimuove tutte le intestazioni dalla richiesta:
<AssignMessage name="AM-remove-all-headers">
<Remove>
<Headers/>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>Esempio 3
Se sono presenti più intestazioni con lo stesso nome, utilizza la seguente sintassi:
<AssignMessage name="AM-remove-headers-3">
<Remove>
<Headers>
<Header name="h1"/>
<Header name="h2"/>
<Header name="h3.2"/>
</Headers>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>Questo esempio rimuove "h1", "h2" e il secondo valore di "h3" dalla richiesta. Se "h3" ha un solo valore, non viene rimosso.
<Payload> (figlio di <Remove>)
Determina se <Remove> elimina il payload nella richiesta o nella risposta, specificato dall'elemento <AssignTo>. Imposta su "true" per cancellare il payload, altrimenti su "false". Il valore predefinito è "false".
| Valore predefinito | Falso |
| Obbligatorio? | Facoltativo |
| Tipo | Booleano |
| Elemento principale |
<Remove>
|
| Elementi secondari | Nessuno |
L'elemento <Payload> utilizza la seguente sintassi:
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="AM-remove-payload-1"> <Remove> <Payload>true</Payload> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
<QueryParams> (figlio di <Remove>)
Rimuove i parametri di query specificati dalla richiesta. Questo elemento non ha alcun effetto su una risposta.
| Valore predefinito | n/a |
| Obbligatorio? | Facoltativo |
| Tipo | Array di elementi <QueryParam> o un array vuoto |
| Elemento principale |
<Remove>
|
| Elementi secondari |
<QueryParam> |
L'elemento <QueryParams> utilizza la seguente sintassi:
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="AM-remove-queryparams-1">
<Remove>
<QueryParams>
<QueryParam name="qp1"/>
</QueryParams>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>Esempio 2
L'esempio seguente rimuove tutti i parametri di query dalla richiesta:
<AssignMessage name="AM-remove-queryparams-2">
<Remove>
<QueryParams/>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>Esempio 3
Se sono presenti più parametri di query con lo stesso nome, utilizza la seguente sintassi:
<AssignMessage name="AM-remove-queryparams-3">
<Remove>
<QueryParams>
<QueryParam name="qp1"/>
<QueryParam name="qp2"/>
<QueryParam name="qp3.2"/>
</QueryParams>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>Questo esempio rimuove "qp1", "qp2" e il secondo valore di "qp3" dalla richiesta. Se "qp3" ha un solo valore, non viene rimosso.
Esempio 4
L'esempio seguente rimuove il parametro di query apikey dalla richiesta:
<AssignMessage name="AM-remove-query-param">
<Remove>
<QueryParams>
<QueryParam name="apikey"/>
</QueryParams>
</Remove>
<AssignTo>request</AssignTo>
</AssignMessage>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, specificato dall'elemento <AssignTo>. <Set> sovrascrive le intestazioni o i parametri di query o modulo già esistenti nel messaggio originale. Le intestazioni e i parametri di query e modulo in un messaggio HTTP possono contenere più valori. Per aggiungere altri valori per un'intestazione o un parametro, 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> |
L'elemento <Set> utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <FormParams> <FormParam name="formparam_name">formparam_value</FormParam> ... </FormParams> <Headers> <Header name="header_name">header_value</Header> ... </Headers> <Path>path</Path> <Payload contentType="content_type" variablePrefix="prefix" variableSuffix="suffix">new_payload</Payload> <QueryParams> <QueryParam name="queryparam_name">queryparam_value</QueryParam> ... </QueryParams> <ReasonPhrase>reason_for_error or {variable}</ReasonPhrase> <StatusCode>HTTP_status_code or {variable}</StatusCode> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
Esempio 1
L'esempio seguente imposta un'intestazione specifica. Se questa policy è collegata al flusso di richiesta, consente al sistema upstream di ricevere un'intestazione aggiuntiva che non era inclusa nella richiesta in entrata originale.
<AssignMessage name="AM-Set-Header">
<Set>
<Headers>
<Header name="authenticated-developer">{verifyapikey.VAK-1.developer.id}</Header>
</Headers>
</Set>
<AssignTo>request</AssignTo>
</AssignMessage>Esempio 2
L'esempio seguente sovrascrive il payload di una risposta e l'intestazione Content-Type.
<AssignMessage name="AM-Overwrite-Payload"> <Set> <Payload contentType="application/json">{ "status" : 42 }</Payload> </Set> <AssignTo>response</AssignTo> </AssignMessage>
<FormParams> (figlio di <Set>)
Sovrascrive i parametri del modulo esistenti in una richiesta e li sostituisce con i nuovi valori che specifichi con questo elemento. Questo elemento non ha alcun effetto su una risposta.
| Valore predefinito | n/a |
| Obbligatorio? | Facoltativo |
| Tipo | Array di elementi <FormParam> |
| Elemento principale |
<Set>
|
| Elementi secondari |
<FormParam> |
L'elemento <FormParams> utilizza la seguente sintassi:
Sintassi
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="policy_name" >
<Set>
<FormParams>
<FormParam name="formparam_name">formparam_value</FormParam>
...
</FormParams>
</Set>
</AssignMessage>Esempio 1
L'esempio seguente imposta un parametro del modulo denominato "myparam" sul valore della variabile request.header.myparam in una nuova richiesta personalizzata:
<AssignMessage name="AM-set-formparams-1"> <Set> <FormParams> <FormParam name="myparam">{request.header.myparam}</FormParam> </FormParams> </Set> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Puoi utilizzare <FormParams> solo se sono soddisfatti i seguenti criteri:
- Verbo HTTP: POST
- Tipo di messaggio: Richiesta
Se definisci parametri del modulo vuoti nella policy (<Add><FormParams/></Add>), la policy non aggiunge parametri del modulo. Questo equivale a omettere <FormParams>.
<Set> modifica il Content-Type del messaggio in "application/x-www-form-urlencoded" prima di inviarlo all'endpoint di destinazione.
<Headers> (figlio di <Set>)
Sovrascrive le intestazioni HTTP esistenti nella richiesta o nella risposta, specificate dall'elemento <AssignTo>.
| Valore predefinito | n/a |
| Obbligatorio? | Facoltativo |
| Tipo | Array di elementi <Header> |
| Elemento principale |
<Set>
|
| Elementi secondari |
<Header> |
L'elemento <Headers> utilizza la seguente sintassi:
Sintassi
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="policy_name" >
<Set>
<Headers>
<Header name="header_name">header_value</Header>
...
</Headers>
</Set>
</AssignMessage>Esempio 1
L'esempio seguente imposta l'intestazione x-ratelimit-remaining sul valore della variabile ratelimit.Quota-1.available.count:
<AssignMessage name="AM-Set-RateLimit-Header">
<Set>
<Headers>
<Header name="X-RateLimit-Remaining">{ratelimit.Quota-1.available.count}</Header>
</Headers>
</Set>
<AssignTo>response</AssignTo>
</AssignMessage>Se definisci intestazioni vuote nella policy (<Set><Headers/></Set>), la policy non imposta alcuna intestazione. In questo modo, l'effetto sarà lo stesso dell'omissione di <Headers>.
<Path> (figlio di <Set>)
<Payload> (figlio di <Set>)
Definisce il corpo del messaggio per una richiesta o una risposta, specificato dall'elemento <AssignTo>. Il payload può essere qualsiasi tipo di contenuto valido, ad esempio testo normale, JSON o XML.
| Valore predefinito | stringa vuota |
| Obbligatorio? | Facoltativo |
| Tipo | Stringa |
| Elemento principale |
<Set>
|
| Elementi secondari | Nessuno |
L'elemento <Payload> utilizza la seguente sintassi:
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 di 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, non era possibile utilizzare le parentesi graffe per indicare i riferimenti alle variabili all'interno dei payload JSON. In queste release, dovevi utilizzare gli attributi variablePrefix e variableSuffix per specificare i caratteri delimitatori e utilizzarli per racchiudere i nomi delle variabili, in questo modo:
<AssignMessage name="set-payload-3b"> <Set> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> {"name":"foo", "type":"@variable_name#"} </Payload> </Set> </AssignMessage>
Questa sintassi precedente funziona ancora.
Esempio 4
I contenuti di <Payload> vengono trattati come un modello di messaggio. Ciò significa che la policy AssignMessage sostituisce le variabili racchiuse tra parentesi graffe con il valore delle variabili di riferimento in fase di runtime.
L'esempio seguente utilizza la sintassi delle parentesi graffe per impostare parte del payload su un valore di 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 |
Specifica facoltativamente il delimitatore iniziale di una variabile di flusso. Il valore predefinito è "{". Per ulteriori informazioni, consulta il riferimento per le variabili di flusso. | Facoltativo | Char |
variableSuffix |
Specifica facoltativamente il delimitatore finale su una variabile di flusso. Il valore predefinito è "}". Per ulteriori informazioni, consulta il riferimento per le variabili di flusso. | Facoltativo | Char |
<QueryParams> (figlio di <Set>)
Sovrascrive i parametri di query esistenti nella richiesta con nuovi valori. Questo elemento non ha alcun effetto su una risposta.
| Valore predefinito | n/a |
| Obbligatorio? | Facoltativo |
| Tipo | Array di elementi <QueryParam> |
| Elemento principale |
<Set>
|
| Elementi secondari |
<QueryParam> |
L'elemento <QueryParams> utilizza la seguente sintassi:
Sintassi
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="policy_name" >
<Set>
<QueryParams>
<QueryParam name="queryparam_name">queryparam_value</QueryParam>
...
</QueryParams>
</Set>
</AssignMessage>Esempio 1
L'esempio seguente imposta il parametro di query "address" sul valore della variabile request.header.address:
<AssignMessage name="AM-set-queryparams-1"> <Set> <QueryParams> <QueryParam name="address">{request.header.address}</QueryParam> </QueryParams> </Set> </AssignMessage>
Puoi utilizzare <QueryParams> solo se sono soddisfatti i seguenti criteri:
- Verbo HTTP: GET
- Tipo di messaggio: Richiesta
Se definisci parametri di query vuoti nella policy (<Set><QueryParams/></Set>), la policy non imposta alcun parametro di query. Equivale a omettere <QueryParams>.
<ReasonPhrase> (figlio di <Set>)
Imposta la frase di motivazione nella risposta. In genere, questa operazione viene eseguita per il debug in combinazione con <StatusCode>. Questo elemento non ha alcun effetto su una richiesta.
| Valore predefinito | n/a |
| Obbligatorio? | Facoltativo |
| Tipo | Stringa |
| Elemento principale |
<Set>
|
| Elementi secondari | Nessuno |
L'elemento <ReasonPhrase> utilizza la seguente sintassi:
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 motivazione 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 trattati come un modello di messaggio. Ciò significa che un nome di variabile racchiuso tra parentesi graffe verrà sostituito in fase di runtime con il valore della variabile di riferimento, come mostrato nell'esempio seguente:
<AssignMessage name="AM-set-reasonphrase-2">
<Set>
<ReasonPhrase>{calloutresponse.reason.phrase}</ReasonPhrase>
</Set>
<AssignTo>response</AssignTo>
</AssignMessage>Puoi utilizzare <ReasonPhrase> solo se sono soddisfatti i seguenti criteri:
- Tipo di messaggio: risposta
<StatusCode> (figlio di <Set>)
Imposta il codice di stato sulla risposta. Questo elemento non ha alcun effetto su una richiesta.
| Valore predefinito | "200" (quando l'attributo createNew di <AssignTo> è impostato su "true") |
| Obbligatorio? | Facoltativo |
| Tipo | Stringa o variable |
| Elemento principale |
<Set>
|
| Elementi secondari | Nessuno |
L'elemento <StatusCode> utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <StatusCode>HTTP_status_code or {variable}</StatusCode> </Set> </AssignMessage>
Esempio 1
L'esempio seguente imposta un codice di stato semplice:
<AssignMessage name="AM-set-statuscode-404">
<Set>
<StatusCode>404</StatusCode>
</Set>
<AssignTo>response</AssignTo>
</AssignMessage>Esempio 2
I contenuti di <StatusCode> vengono trattati come un modello di messaggio. Ciò significa che un nome di variabile racchiuso tra parentesi graffe verrà sostituito in fase di runtime con il valore della variabile di riferimento, come mostrato nell'esempio seguente:
<AssignMessage name="set-statuscode-2">
<Set>
<StatusCode>{calloutresponse.status.code}</StatusCode>
</Set>
<AssignTo>response</AssignTo>
</AssignMessage>Puoi utilizzare <StatusCode> solo se sono soddisfatti i seguenti criteri:
- Tipo di messaggio: risposta
<Verb> (figlio di <Set>)
Imposta il verbo HTTP sulla richiesta. Questo elemento non ha alcun effetto su una risposta.
| Valore predefinito | n/a |
| Obbligatorio? | Facoltativo |
| Tipo | Stringa o variable |
| Elemento principale |
<Set>
|
| Elementi secondari | Nessuno |
L'elemento <Verb> utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="policy_name" > <Set> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> </Set> </AssignMessage>
Esempio 1
L'esempio seguente imposta un verbo semplice nella richiesta:
<AssignMessage name="AM-set-verb-1">
<Set>
<Verb>POST</Verb>
</Set>
<AssignTo>request</AssignTo>
</AssignMessage>Esempio 2
I contenuti di <Verb> vengono trattati come un modello di messaggio. Ciò significa che un nome di variabile racchiuso tra parentesi graffe verrà sostituito in fase di runtime con il valore della variabile di riferimento.
L'esempio seguente utilizza una variabile per compilare un verbo:
<AssignMessage name="AM-set-verb-to-dynamic-value"> <Set> <Verb>{my_variable}</Verb> </Set> <AssignTo>request</AssignTo> </AssignMessage>
Puoi utilizzare <Verb> solo se sono soddisfatti i seguenti criteri:
- Tipo di messaggio: Richiesta
<Version> (figlio di <Set>)
Imposta la versione HTTP su una richiesta. Questo elemento non ha alcun effetto su una risposta.
| Valore predefinito | n/a |
| Obbligatorio? | Facoltativo |
| Tipo | Stringa o variable |
| Elemento principale |
<Set>
|
| Elementi secondari | Nessuno |
L'elemento <Version> utilizza la seguente sintassi:
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="AM-set-version-1">
<Set>
<Version>1.1</Version>
</Set>
</AssignMessage>Esempio 2
Di seguito viene utilizzata una variabile tra parentesi graffe per impostare il numero di versione:
<AssignMessage name="AM-set-version-2">
<Set>
<Version>{my_version}</Version>
</Set>
<AssignTo>request</AssignTo>
</AssignMessage>I contenuti di <Version> vengono trattati come un modello di messaggio. Ciò significa che un nome di variabile racchiuso tra parentesi graffe verrà sostituito in fase di runtime con il valore della variabile a cui viene fatto riferimento.
Puoi utilizzare <Version> solo se sono soddisfatti i seguenti criteri:
- Tipo di messaggio: Richiesta
Crea messaggi di richiesta personalizzati
Puoi utilizzare la policy AssignMessage per creare un messaggio di richiesta personalizzato. Dopo aver creato una richiesta personalizzata, puoi utilizzarla nei seguenti modi:
- Accedere alle sue variabili in altre policy
- Passarlo a un servizio esterno
Per creare un messaggio di richiesta personalizzato, utilizza l'elemento <AssignTo> nella policy AssignMessage. Imposta createNew su "true" e specifica il nome del nuovo messaggio nel corpo dell'elemento, come mostrato nell'esempio seguente:
<AssignMessage name="AM-assignto-2"> <AssignTo createNew="true" transport="http" type="request">NameOfNewMessage</AssignTo> </AssignMessage>
Per impostazione predefinita, Edge non esegue alcuna operazione con il messaggio di richiesta personalizzato. Dopo averlo creato, Edge continuerà il flusso con la richiesta originale. Per utilizzare la richiesta personalizzata, aggiungi al proxy una policy come la policy ServiceCallout che può passare la richiesta personalizzata a un servizio esterno.
I seguenti esempi creano messaggi di richiesta personalizzati:
Esempio 1
L'esempio seguente crea un oggetto di richiesta personalizzato con Assign Message:
<AssignMessage name="AssignMessage-3"> <AssignTo createNew="true" type="request">MyCustomRequest</AssignTo> <Copy> <Headers> <Header name="user-agent"/> </Headers> </Copy> <Set> <QueryParams> <QueryParam name="address">{request.queryparam.addy}</QueryParam> </QueryParams> <Verb>GET</Verb> </Set> <IgnoreUnresolvedVariables>false </IgnoreUnresolvedVariables> </AssignMessage>
In questo esempio:
- Crea un nuovo oggetto messaggio di richiesta denominato "MyCustomRequest".
- In MyCustomRequest, questa policy:
- Copia il valore dell'intestazione HTTP
user-agentdalla richiesta in arrivo al nuovo messaggio. Poiché<Copy>utilizza un riferimento assoluto alla variabile di flussouser-agent, non è necessario specificare l'attributosourceper<Copy>. - Imposta il parametro di query
addressnel messaggio personalizzato sul valore del parametro di queryaddydella richiesta in entrata. - Imposta il verbo HTTP su
GET.
- Copia il valore dell'intestazione HTTP
- Imposta
<IgnoreUnresolvedVariables>su "false". Quando<IgnoreUnresolvedVariables>è "false", se una delle variabili che la policy 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". Quindi imposta <Verb> e <Payload> sulla nuova richiesta.
Puoi accedere a un messaggio di richiesta personalizzato in un'altra policy AssignMessage che si verifica più avanti nel flusso. L'esempio seguente recupera il valore dell'intestazione user-agent del messaggio di richiesta personalizzato:
<AssignMessage name="custom-request-1-access">
<DisplayName>custom-request-1-access</DisplayName>
<AssignTo>partner.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ù sulla policy AssignMessage.
| Video | Descrizione |
|---|---|
| Perché utilizzare la policy Assign Message? | Scopri i vantaggi dell'utilizzo della policy AssignMessage per modificare la richiesta o la risposta API senza modificare il codice di backend. |
| Copia gli elementi dell'API utilizzando la policy AssignMessage | Copia gli elementi da una richiesta o risposta API e crea un nuovo oggetto di richiesta o risposta utilizzando la policy AssignMessage. |
| Rimuovi gli elementi dell'API utilizzando la policy AssignMessage | Rimuovi gli elementi dell'API e modifica l'API prima che raggiunga il backend di destinazione utilizzando la policy AssignMessage. |
| Aggiungi e imposta gli elementi dell'API utilizzando la policy AssignMessage | Modifica la richiesta o la risposta API aggiungendo parametri di query, intestazioni, parametri di modulo o payload utilizzando la policy AssignMessage. |
| Crea variabili personalizzate utilizzando la policy AssignMessage | Imposta variabili di flusso personalizzate utilizzando la policy AssignMessage e sfrutta le variabili in altre policy nel proxy API. |
| Crea nuovi oggetti di richiesta o risposta utilizzando la policy AssignMessage | Crea nuovi oggetti di richiesta o risposta API utilizzando la policy AssignMessage in fase di runtime dell'API. |
| Crea un'API fittizia utilizzando la policy AssignMessage | Crea una semplice API REST fittizia aggiungendo la policy AssignMessage nel flusso di risposta. |
| Imposta o modifica il payload utilizzando la policy AssignMessage | Converti la richiesta REST in una richiesta SOAP impostando il payload SOAP utilizzando la policy AssignMessage in fase di runtime dell'API. |
Codici di errore
Questa sezione descrive i codici e i messaggi di errore restituiti, nonché le variabili di errore impostate da Edge quando questo criterio attiva un errore. È importante sapere se stai sviluppando regole di errore per per gestire gli errori. Per saperne di più, consulta Cosa devi sapere sugli errori relativi ai criteri e sulla gestione di errore.
Errori di runtime
Questi errori possono verificarsi quando il criterio viene eseguito.
| Codice di errore | Stato HTTP | Causa | Correggi |
|---|---|---|---|
steps.assignmessage.SetVariableFailed |
500 | Il criterio non è stato in grado di impostare una variabile. Controlla la stringa di errore per il nome del non risolta. | |
steps.assignmessage.VariableOfNonMsgType |
500 |
Questo errore si verifica se l'attributo Le variabili del tipo di messaggio rappresentano intere richieste e risposte HTTP. Il dispositivo Edge integrato
le variabili di flusso |
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 errore | Causa | Correggi |
|---|---|---|
InvalidIndex |
Se l'indice specificato negli elementi <Copy> e/o <Remove> della sezione Assegna messaggio
è 0 o un numero negativo, il deployment del proxy API non va a buon fine.
|
build |
InvalidVariableName |
Se l'elemento secondario <Name> è vuoto o non specificato nell'elemento <AssignVariable>,
il deployment del proxy API non riesce perché non esiste un nome di variabile valido in
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 il criterio attiva un errore in fase di runtime. Per ulteriori informazioni, consulta Cosa che devi conoscere sugli errori relativi alle norme.
| Variabili | Dove | Esempio |
|---|---|---|
fault.name="fault_name" |
fault_name è il nome dell'errore, come elencato nella precedente tabella Errori di runtime. Il nome dell'errore è l'ultima parte del codice di errore. | fault.name Matches "UnresolvedVariable" |
assignmessage.policy_name.failed |
policy_name è il nome specificato dall'utente del criterio che ha generato l'errore. | assignmessage.AM-SetResponse.failed = true |
Esempio di risposta di errore
{ "fault":{ "detail":{ "errorcode":"steps.assignmessage.VariableOfNonMsgType" }, "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message" } }
Esempio di regola di errore
<FaultRule name="Assign Message Faults"> <Step> <Name>AM-CustomNonMessageTypeErrorResponse</Name> <Condition>(fault.name Matches "VariableOfNonMsgType") </Condition> </Step> <Step> <Name>AM-CustomSetVariableErrorResponse</Name> <Condition>(fault.name = "SetVariableFailed")</Condition> </Step> <Condition>(assignmessage.failed = true) </Condition> </FaultRule>
Schemi
Ogni tipo di policy è definito da uno schema XML (.xsd). Per riferimento, gli schemi delle policy sono disponibili su GitHub.
Argomenti correlati
Esempi di lavoro della policy 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 "percorso impostato" in azione in una policy ServiceCallout, consulta questo esempio di apprendimento pratico negli esempi di Apigee su GitHub. Clona il repository e segui le istruzioni riportate in quell'argomento. L'esempio utilizza la policy AssignMessage per impostare un percorso di richiesta, quindi utilizza una policy Service Callout per inviare la richiesta a un servizio esterno.