Questa pagina si applica ad Apigee e Apigee hybrid.
Visualizza la documentazione di Apigee Edge.
Cosa
Il criterio AssignMessage può modificare un messaggio di richiesta o risposta esistente o creare un nuovo messaggio di richiesta o risposta durante il flusso del proxy API. Le norme ti consentono di eseguire le seguenti azioni sui messaggi:
- Aggiungere nuovi parametri di modulo, intestazioni o parametri di ricerca a un messaggio.
- Copiare proprietà esistenti da un messaggio all'altro
- Rimuovi intestazioni, parametri di ricerca, parametri del modulo e messaggio payload da un messaggio
- Imposta il valore delle proprietà in un messaggio
AssegnaMessage anche consente di impostare variabili di contesto arbitrarie, indipendentemente da una qualsiasi delle operazioni descritte in precedenza che potrebbero essere applicate a un messaggio.
Con AssignMessage, puoi aggiungere, modificare o rimuovere le proprietà della richiesta o della risposta. In alternativa, puoi utilizzare AssignMessage per creare un messaggio di richiesta o risposta personalizzato e passarlo a un target alternativo, come descritto in Creare messaggi di richiesta personalizzati.
Questo criterio è un criterio estensibile e il suo utilizzo potrebbe comportare implicazioni in termini di costi o utilizzo, a seconda della licenza Apigee. Per informazioni sui tipi di criteri e sulle implicazioni per l'utilizzo, consulta Tipi di criteri.
Il criterio AssignMessage può creare o modificare le variabili di flusso con i seguenti elementi secondari:
L'ordine in cui organizzi gli elementi <Add>
, <Copy>
, <Set>
e <Remove>
è importante. Il criterio esegue queste azioni nell'ordine in cui appaiono nella configurazione del criterio. Se devi rimuovere tutte le intestazioni, imposta un valore
un'intestazione specifica, devi includere l'elemento <Remove>
prima dell'elemento <Set>
.
<AssignMessage>
elemento
Definisce un criterio AssignMessage.
Valore predefinito | Consulta la scheda Criterio predefinito di seguito |
Obbligatorio? | Obbligatorio |
Tipo | Oggetto complesso |
Elemento principale | N/D |
Elementi secondari |
<Add> <AssignTo> <AssignVariable> <Copy> <DisplayName> <IgnoreUnresolvedVariables> <Remove> <Set> |
La sintassi dell'elemento <AssignMessage>
è la seguente:
Sintassi
L'elemento <AssignMessage>
utilizza la seguente sintassi:
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <!-- All AssignMessage child elements are optional --> <Add> <FormParams> <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam> ... </FormParams> <Headers> <Header name="HEADER_NAME">HEADER_VALUE</Header> ... </Headers> <QueryParams> <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam> ... </QueryParams> </Add> <AssignTo createNew="[true|false]" transport="http" type="[request|response]">DESTINATION_VARIABLE_NAME</AssignTo> <AssignVariable> <Name>VARIABLE_NAME</Name> <PropertySetRef>SOURCE_VARIABLE</PropertySetRef> <Ref>SOURCE_VARIABLE</Ref> <ResourceURL>RESOURCE_URL_OR_TEMPLATE</ResourceURL> <Template>MESSAGE_TEMPLATE</Template> or <Template ref='TEMPLATE_VARIABLE'></Template> <Value>VARIABLE_VALUE</Value> </AssignVariable> <Copy source="VARIABLE_NAME"> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam> ... </FormParams> <!-- Copy all headers --> <Headers/> <!-- or, copy specific headers by name --> <Headers> <Header name="HEADER_NAME"/> <!-- or --> <Header name="HEADER_NAME">[false|true]</Header> ... </Headers> <Path>[false|true]</Path> <Payload>[false|true]</Payload> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam> ... </QueryParams> <StatusCode>[false|true]</StatusCode> <Verb>[false|true]</Verb> <Version>[false|true]</Version> </Copy> <DisplayName>POLICY_DISPLAY_NAME</DisplayName> <IgnoreUnresolvedVariables>[true|false]</IgnoreUnresolvedVariables> <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Remove all form parameters --> <FormParams/> <!-- or, remove specific form parameters by name --> <FormParams> <FormParam name="FORMPARAM_NAME"/> <!-- or --> <FormParam name="FORMPARAM_NAME">[false|true]</FormParam> ... </FormParams> <!-- Remove all headers --> <Headers/> <!-- or, remove specific headers by name --> <Headers> <Header name="HEADER_NAME"/> <!-- or --> <Header name="HEADER_NAME">[false|true]</Header> ... </Headers> <Payload>[false|true]</Payload> <!-- Remove all query parameters --> <QueryParams/> <!-- or, remove specific query parameters by name --> <QueryParams> <QueryParam name="QUERYPARAM_NAME"/> <!-- or --> <QueryParam name="QUERYPARAM_NAME">[false|true]</QueryParam> ... </QueryParams> </Remove> <Set> <FormParams> <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam> ... </FormParams> <Headers> <Header name="HEADER_NAME">HEADER_VALUE</Header> ... </Headers> <Path>PATH</Path> <Payload contentType="CONTENT_TYPE" variablePrefix="PREFIX" variableSuffix="SUFFIX">NEW_PAYLOAD</Payload> <QueryParams> <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam> ... </QueryParams> <StatusCode>HTTP_STATUS_CODE or {variable}</StatusCode> <Verb>[GET|POST|PUT|PATCH|DELETE|{variable}]</Verb> <Version>[1.0|1.1|{variable}]</Verb> </Set> </AssignMessage>
Criterio predefinito
L'esempio seguente mostra le impostazioni predefinite quando aggiungi un criterioAssignMessage al tuo flusso nella UI di Apigee:
<AssignMessage continueOnError="false" enabled="true" name="assign-message-default"> <DisplayName>Assign Message-1</DisplayName> <Properties/> <Copy source="request"> <Headers/> <QueryParams/> <FormParams/> <Payload/> <Verb/> <StatusCode/> <Path/> </Copy> <Remove> <Headers> <Header name="h1"/> </Headers> <QueryParams> <QueryParam name="q1"/> </QueryParams> <FormParams> <FormParam name="f1"/> </FormParams> <Payload/> </Remove> <Add> <Headers/> <QueryParams/> <FormParams/> </Add> <Set> <Headers/> <QueryParams/> <FormParams/> <!-- <Verb>GET</Verb> --> <Path/> </Set> <AssignVariable> <Name>name</Name> <Value/> <Ref/> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Quando inserisci un nuovo criterio AssignMessage nell'interfaccia utente di Apigee, il modello contiene stub per tutte le possibili operazioni. In genere, selezioni le operazioni da eseguire con questo criterio
e rimuovi il resto degli elementi secondari. Ad esempio, se vuoi eseguire un'operazione di copia, utilizza la classe
<Copy>
e rimuovi <Add>
, <Remove>
e altri elementi secondari da
per renderlo più leggibile.
Questo elemento ha i seguenti attributi comuni a tutti i criteri:
Attributo | Predefinito | Obbligatorio? | Descrizione |
---|---|---|---|
name |
N/D | Obbligatorio |
Il nome interno del criterio. Il valore dell'attributo Se vuoi, utilizza l'elemento |
continueOnError |
falso | Facoltativo | Imposta su false per restituire un errore quando un criterio non va a buon fine. Questo è un comportamento previsto per la maggior parte dei criteri. Imposta su true per continuare l'esecuzione del flusso anche dopo un fallimento del criterio. Vedi anche:
|
enabled |
true | Facoltativo | Imposta su true per applicare il criterio. Imposta su false per disattivare il
criterio. Il criterio non verrà applicato anche se rimane collegato a un flusso. |
async |
falso | Ritirato | Questo attributo è stato ritirato. |
La tabella seguente fornisce una descrizione generale degli elementi secondari di
<AssignMessage>
:
Elemento secondario | Obbligatorio? | Descrizione |
---|---|---|
Operazioni comuni | ||
<Add> |
Facoltativo | Aggiunge informazioni all'oggetto del messaggio specificato dall'oggetto
<AssignTo> .
Per sovrascrivere le intestazioni o i parametri esistenti, utilizza l'elemento |
<Copy> |
Facoltativo | Copia le informazioni dal messaggio specificato dall'elemento source
all'oggetto del messaggio specificato dall'elemento <AssignTo> . |
<Remove> |
Facoltativo | Elimina gli elementi specificati dalla variabile messaggio specificata nell'elemento
<AssignTo> . |
<Set> |
Facoltativo | Sostituisce i valori delle proprietà esistenti nella richiesta o nella risposta, specificati dall'elemento <AssignTo> .
|
Altri elementi secondari | ||
<AssignTo> |
Facoltativo | Specifica il messaggio su cui opera il criterio AssignMessage. Può essere il modello richiesta o risposta oppure può essere un nuovo messaggio personalizzato. |
<AssignVariable> |
Facoltativo | Assegna un valore a una variabile di flusso. Se la variabile non esiste,
<AssignVariable> lo crea. |
<IgnoreUnresolvedVariables> |
Facoltativo | Determina se l'elaborazione si interrompe quando viene rilevata una variabile non risolta. |
Ciascuno di questi elementi secondari è descritto nelle sezioni che seguono.
Esempi
Gli esempi riportati di seguito mostrano alcuni dei modi in cui puoi utilizzare il criterio AssignMessage:
1: aggiungi l'intestazione
Nell'esempio seguente viene aggiunta un'intestazione alla richiesta con
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 payload
Nell'esempio seguente viene eliminato il payload dalla risposta con <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. Al contrario, modifica un messaggio di risposta esistente aggiungendo un'intestazione HTTP.
Poiché questo esempio specifica response
come nome della variabile nell'
<AssignTo>
, questo criterio modifica l'oggetto risposta originariamente inserito
impostato con i dati restituiti dal server di destinazione.
L'intestazione HTTP aggiunta al messaggio di risposta da questo criterio è derivata da una variabile compilata dal criterio LookupCache. Di conseguenza, il messaggio di risposta modificato Il criterio Assegna messaggio contiene un'intestazione HTTP che indica se i risultati sono stati o meno dalla cache. L'impostazione delle intestazioni nella risposta può essere utile per il debug e la risoluzione dei problemi.
4. Impostazione dei contenuti dinamici
Puoi utilizzareAssignMessage per incorporare contenuti dinamici nel payload della risposta e di richiesta dei messaggi.
Per incorporare le variabili di flusso in un payload XML, racchiudi la variabile designata tra parentesi graffe, ad esempio: {prefix.name}
.
Nell'esempio seguente è incorporato il valore della variabile del 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 le variabili utilizzando variablePrefix
e
Attributi variableSuffix
con caratteri di delimitazione, come mostrato di seguito
esempio:
<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 Riferimento per le variabili di flusso.
Puoi anche utilizzare le parentesi graffe per inserire le variabili.
5: rimuovi il 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>
È buona norma rimuovere il parametro di query apikey
dal messaggio di richiesta
quando utilizzi il criterio VerifyAPIKey per l'autenticazione dell'utente. Lo scopo è evitare
che informazioni chiave sensibili vengano passate alla destinazione del backend.
6. Imposta/Ottieni le variabili
L'esempio seguente utilizza tre criteri AssignMessage:
- Crea tre variabili di flusso nella richiesta, con valori statici
- Recupera le variabili di flusso in modo dinamico in un secondo criterio nel flusso di richieste
- 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>
Nel primo criterio, l'elemento <AssignVariable>
crea e imposta tre variabili nella richiesta. Ogni elemento <Name>
specifica un nome di variabile e <Value>
specifica il valore.
Il secondo criterio utilizza l'elemento <AssignVariable>
per leggere i valori e crea tre
nuove variabili:
<!-- Policy #2: Get variables from the request --> <AssignMessage continueOnError="false" enabled="true" name="get-variables"> <AssignTo createNew="false" transport="http" type="request"/> <!-- Get the value of myAppSecret and create a new variable, secret --> <AssignVariable> <Name>secret</Name> <Ref>myAppSecret</Ref> <Value>0</Value> </AssignVariable> <!-- Get the value of config.environment and create a new variable, environment --> <AssignVariable> <Name>environment</Name> <Ref>config.environment</Ref> <Value>default</Value> </AssignVariable> <!-- Get the value of config.protocol and create a new variable, protocol --> <AssignVariable> <Name>protocol</Name> <Ref>config.protocol</Ref> <Value>default</Value> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </AssignMessage>
Nel secondo criterio, l'elemento <Ref>
fa riferimento alla variabile di origine,
e <Name>
specificano i nomi delle nuove variabili. Se la variabile
a cui fa riferimento l'elemento <Ref>
non è accessibile, puoi utilizzare il valore
specificato dall'elemento <Value>
.
Per provare questo insieme di criteri:
- Aggiungi i criteri 1 e 2 al flusso di richieste. Assicurati di inserire il criterio n. 1 prima del criterio 2.
- Aggiungi la terza norma nel flusso di risposta.
- Il terzo criterio utilizza l'elemento
<Set>
per aggiungere le variabili alla risposta. La 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 includerle nel parentesi graffe.Assicurati di impostare l'attributo
contentType
dell'elemento<Payload>
suapplication/xml
. - Invia una richiesta al proxy API, ad esempio:
curl -vL https://ahamilton-eval-test.apigee.net/myproxy
Facoltativamente, puoi indirizzare i risultati tramite un'utilità come
xmllint
, in modo che l'XML sia visualizzato con una struttura ben formattata:curl -vL https://ahamilton-eval-test.apigee.net/myproxy | xmllint --format -
Il corpo della risposta dovrebbe avere il seguente aspetto:
<wrapper> <secret>42</secret> <config> <environment>test</environment> <protocol>gopher</protocol> </config> </wrapper>
7: ottieni le intestazioni di risposta di ServiceCallout
Nell'esempio seguente, supponiamo che una norma ServiceCallout sia presente nella richiesta del proxy API
e che la risposta del callout contenga più intestazioni dello stesso nome
(Set-Cookie
). Supponendo che la variabile di risposta del callout sia il valore predefinito
calloutResponse
, la seguente norma ottiene il secondo valore dell'intestazioneSet-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 la seguente variabile:
{calloutResponse.header.Set-Cookie.values}
8: Archiviare e rimuovere parametri del modulo, intestazioni e parametri di query
Se vuoi utilizzare <Remove>
per eliminare intestazioni, parametri di ricerca o parametri del modulo, ma
mantengono l'accesso ai propri valori in un secondo momento nel flusso dei criteri, puoi archiviarli utilizzando <AssignVariable>
.
<AssignMessage async="false" continueOnError="false" enabled="true" name="AM-StoreAndRemove"> <DisplayName>AM-StoreAndRemove</DisplayName> <AssignVariable> <Name>var_grant_type</Name> <Ref>request.formparam.grant_type</Ref> </AssignVariable> <Remove> <Headers/> <FormParams/> <Payload/> </Remove> <Set> <Headers> <Header name="Content-Type">application/x-www-form-urlencoded</Header> <Header name="Accept">application/json</Header> <Header name="Grant-Type">{var_grant_type}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
Ogni elemento secondario di questo riferimento ha esempi aggiuntivi. Per ulteriori esempi, vedi Esempio diAssignMessage su GitHub.
Riferimento all'elemento secondario
Questa sezione descrive gli elementi secondari di <AssignMessage>
.
<Add>
Aggiunge informazioni alla richiesta o alla risposta, specificate dall'elemento <AssignTo>
.
L'elemento <Add>
aggiunge al messaggio nuove proprietà che non esistono nel messaggio
originale. Tieni presente che anche <Set>
offre questa funzionalità. Per modificare i valori di
esistenti, usa l'elemento <Set>
.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Tipo complesso |
Elemento principale |
<AssignMessage>
|
Elementi secondari |
<FormParams> <Headers> <QueryParams> |
L'elemento <Add>
utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Add> <FormParams> <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam> ... </FormParams> <Headers> <Header name="HEADER_NAME">HEADER_VALUE</Header> ... </Headers> <QueryParams> <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam> ... </QueryParams> </Add> </AssignMessage>
Esempio 1
Nell'esempio seguente viene utilizzato 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
Nell'esempio seguente viene utilizzato l'elemento <Headers>
per aggiungere un elemento
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 una singola query
con un valore statico alla richiesta:
<AssignMessage name="AM-add-queryparams-1"> <Add> <QueryParams> <QueryParam name="myParam">42</QueryParam> </QueryParams> </Add> <AssignTo>request</AssignTo> </AssignMessage>
In questo esempio viene utilizzato <Add>
nel preflow della richiesta. Se osservi i risultati in uno strumento
ad esempio Panoramica debug, la richiesta a https://example-target.com/get
diventa
https://example-target.com/get?myParam=42
.
Gli elementi secondari di <Add>
supportano la sostituzione di stringhe dinamiche, nota come
testimonianze dei messaggi.
<FormParams>
(elemento secondario di <Add>
)
Aggiunge nuovi parametri del modulo al messaggio di richiesta. Questo elemento non ha alcun effetto su una risposta per creare un nuovo messaggio email.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Array di elementi <FormParam> |
Elemento principale |
<Add>
|
Elementi secondari |
<FormParam> |
La sintassi dell'elemento <FormParams>
è la seguente:
Sintassi
<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
Nell'esempio seguente viene aggiunto un singolo parametro di modulo (answer
) e un valore statico (42
) per
la richiesta:
<AssignMessage name="AM-add-formparams-1"> <Add> <FormParams> <FormParam name="answer">42</FormParam> </FormParams> </Add> <AssignTo>request</AssignTo> </AssignMessage>
Esempio 2
Il seguente esempio recupera il valore del parametro di query name
, lo aggiunge alla richiesta come parametro di modulo e poi rimuove il parametro di query:
<AssignMessage name="AM-Swap-QueryParam-to-FormParams"> <Add> <FormParam name="name">{request.queryparam.name}</FormParam> </Add> <Remove> <QueryParam name="name"/> </Remove> </AssignMessage>
Tieni presente che questo esempio non specifica un target con <AssignTo>
. Questo criterio aggiunge il
parametro solo alla richiesta.
Esempio 3
Nell'esempio seguente vengono aggiunti più parametri di 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 di modulo con nomi diversi. Quindi rimuove i parametri di query originali. Apigee invierà la richiesta modificata all'endpoint di destinazione.
Puoi utilizzare la Panoramica del debug per esaminare il flusso. Vedrai che il corpo della richiesta contiene i dati del modulo con codifica URL, che erano stati originariamente trasmessi come stringa di query parametri:
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 elementi:
- Dati del modulo: puoi impostare un valore specifico oppure "" (la stringa vuota). Ad esempio, con
curl
, aggiungi-d ""
alla tua richiesta. - Intestazione
Content-Length
: impostata su 0 (se non sono presenti dati nell'intestazione richiesta originale; altrimenti la lunghezza attuale, in byte). Ad esempio, concurl
aggiungi-H "Content-Length: 0"
alla tua richiesta.
- Dati del modulo: puoi impostare un valore specifico oppure "" (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>
, Apigee imposta l'intestazione Content-Type
della richiesta su
application/x-www-form-urlencoded
prima di inviare il messaggio al servizio di destinazione.
<Headers>
(elemento secondario di <Add>
)
Aggiunge nuove intestazioni alla richiesta o alla risposta specificate, specificate dal
Elemento <AssignTo>
.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Array di <Header> elementi |
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 quell'intestazione.
<AssignMessage name="AM-add-headers-1"> <Add> <Headers> <Header name="partner-id">{verifyapikey.VAK-1.developer.app.partner-id}</Header> </Headers> </Add> <AssignTo>request</AssignTo> </AssignMessage>
<QueryParams>
(secondario di <Add>
)
Aggiunge nuovi parametri di query alla richiesta. Questo elemento non ha alcun effetto su una risposta.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Array di elementi <QueryParam> |
Elemento principale |
<Add>
|
Elementi secondari |
<QueryParam> |
La sintassi dell'elemento <QueryParams>
è la seguente:
Sintassi
<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 vengono soddisfatti i seguenti criteri:
- Verbi HTTP:
GET
,POST
,PATCH
,DELETE
- 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 nella risposta non ha alcun effetto.
Se nel criterio viene definito un array vuoto di parametri di ricerca
(<Add><QueryParams/></Add>
), il criterio non aggiunge alcuna query
parametri. È lo stesso che omettere <QueryParams>
.
<AssignTo>
Determina su quale oggetto opera il criterio AssignMessage. Le opzioni sono:
- Messaggio di richiesta: il
request
ricevuto dal proxy API. - Messaggio di risposta: il
response
restituito dal server di destinazione. - Messaggio personalizzato: un oggetto richiesta o risposta personalizzato.
Tieni presente che, in alcuni casi, non è possibile modificare l'oggetto su cui agisce il criterioAssignMessage.
Ad esempio, non puoi utilizzare <Add>
o <Set>
per aggiungere o modificare parametri di ricerca
(<QueryParams>
) o parametri del modulo (<FormParams>
) nella risposta. Puoi solo manipulare i parametri di query e i parametri del modulo nella richiesta.
Valore predefinito | N/D |
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, il criterio agisce sulla richiesta o sulla risposta predefinita, in base al punto in cui viene eseguito. Se il criterio viene eseguito nel flusso di richiesta,
influisce sul messaggio di richiesta. Se viene eseguito nel flusso di risposta, il criterio influisce sulla risposta per impostazione predefinita.
La sintassi dell'elemento <AssignTo>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <AssignTo createNew="[true|false]" transport="http" type="[request|response]">DESTINATION_VARIABLE_NAME</AssignTo> </AssignMessage>
Esempio 1
L'esempio seguente non specifica alcun messaggio nel testo del <AssignTo>
. Ciò implica
che il criterio agirà sul messaggio request
o response
,
a seconda di dove viene eseguito il criterio.
<AssignMessage name="assignto-1"> <AssignTo createNew="false" transport="http" type="request"/> <!-- no-op --> ... </AssignMessage>
Se specifichi createNew="false"
e non fornisci esplicitamente un nome del messaggio,
gli altri attributi di <AssignTo>
sono irrilevanti. In questo caso, potresti
omettere completamente l'elemento <AssignTo>
.
Esempio 2
L'esempio seguente crea un nuovo oggetto request, sovrascrivendo l'oggetto esistente:
<AssignMessage name="assignto-2"> <AssignTo createNew="true" transport="http" type="request"/> ... </AssignMessage>
Quando crei un nuovo oggetto di richiesta o risposta, gli altri elementi dell'etichettaAssignMessage
(ad esempio <Add>
, <Set>
e <Copy>
) agiscono in base al nuovo
di richiesta di addestramento.
Puoi accedere al nuovo oggetto richiesta in altri criteri più avanti nel flusso oppure inviare il nuovo oggetto richiesta a un servizio esterno con un criterio ServiceCallout.
Esempio 3
Nell'esempio seguente viene creato 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 di richiesta o risposta, gli altri elementi del criterio AssignMessage
(ad esempio <Add>
, <Set>
e <Copy>
) agiscono sul nuovo
oggetto di richiesta.
Puoi accedere al nuovo oggetto richiesta per nome in altri criteri più avanti nel flusso oppure inviare il nuovo oggetto richiesta a un servizio esterno con un criterio ServiceCallout.
Nella tabella seguente vengono descritti gli attributi di <AssignTo>
:
Attributo | Descrizione | Obbligatorio? | Tipo |
---|---|---|---|
createNew |
Determina se questo criterio crea un nuovo messaggio durante l'assegnazione dei valori. Se Se
Se
|
Facoltativo | Booleano |
transport |
Specifica il tipo di trasporto per il tipo di messaggio di richiesta o risposta. Il valore predefinito è |
Facoltativo | Stringa |
type |
Specifica il tipo del nuovo messaggio, quando createNew è true . I valori validi sono request o response .
Il valore predefinito è |
Facoltativo | Stringa |
<AssignVariable>
Assegna un valore a una variabile del flusso di destinazione (ad esempio una variabile il cui valore è impostato dal criterio AssignMessage). Se la variabile di flusso non esiste, <AssignVariable>
crea
li annotino. Puoi utilizzare più elementi AssignVariable all'interno del criterio AssignMessage. Sono
vengono eseguiti in ordine di visualizzazione nella configurazione dei criteri.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Tipo complesso |
Elemento principale |
<AssignMessage>
|
Elementi secondari |
<Name> (obbligatorio)<PropertySetRef> <Ref> <ResourceURL> <Template> <Value> |
Il valore assegnato alla variabile del flusso di destinazione può essere uno dei seguenti:
- Stringa letterale: utilizza l'elemento secondario
<Value>
per specificare un valore di stringa letterale per la variabile del flusso di destinazione. - Variabile di flusso: utilizza l'elemento secondario
<Ref>
per specificare il valore di un esistente per la variabile di flusso di destinazione. Per un elenco completo delle variabili di flusso che possono essere utilizzate come origine, consulta la pagina Riferimento alle variabili di flusso. - Set di proprietà: utilizza l'elemento secondario
<PropertySetRef>
per recuperare il valore. da una coppia di nome/chiave di un insieme di proprietà e la archiviamo in una variabile di flusso. Consente di accedere ai set di proprietà in modo dinamico. - URL risorsa: utilizza l'elemento secondario
<ResourceURL>
per specificare un URL per una risorsa di testo di tipo XSL, XSD, WSDL, JavaScript o OpenAPI Spec. In questo modo, i contenuti della risorsa vengono assegnati alla variabile di flusso denominata. - Modello di messaggio: utilizza l'elemento secondario
<Template>
per specificare un modello di messaggio per la variabile del flusso di destinazione.
L'ordine di precedenza di questi elementi secondari è: ResourceURL, Template, Ref, Value, Rif.SetProprietà
La sintassi dell'elemento <AssignVariable>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <AssignVariable> <Name>VARIABLE_NAME</Name> <PropertySetRef>SOURCE_VARIABLE</PropertySetRef> <Ref>SOURCE_VARIABLE</Ref> <ResourceURL>RESOURCE_URL_OR_TEMPLATE</ResourceURL> <Template>MESSAGE_TEMPLATE</Template> or <Template ref='TEMPLATE_VARIABLE'></Template> <Value>VARIABLE_VALUE</Value> </AssignVariable> </AssignMessage>
Utilizza l'elemento <Ref>
per specificare la variabile di origine. Se
la variabile a cui fa riferimento <Ref>
non è accessibile, Apigee utilizza il valore
specificato dall'elemento <Value>
. Se definisci
<Template>
, questo ha la precedenza sugli elementi fratelli
<Ref>
e <Value>
.
Esempio 1
Nell'esempio seguente viene impostato il valore di una nuova variabile, myvar
, sul valore letterale
valore 42
:
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
Esempio 2
Nell'esempio seguente viene assegnato il valore della variabile di flusso
request.header.user-agent
alla variabile del flusso di destinazione myvar
e il valore del parametro di query country
alla variabile del 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 due assegnazioni non va a buon fine, Apigee assegna il valore ErrorOnCopy
a
la variabile del flusso di destinazione.
Se le variabili di flusso myvar
o Country
non esistono,
<AssignVariable>
li crea.
Esempio 3
L'esempio seguente utilizza <Template>
elemento figlio 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 4
L'esempio seguente utilizza <AssignVariable>
per disattivare il comportamento predefinito di
propagare il suffisso del percorso dalla richiesta proxy alla richiesta di destinazione:
<AssignMessage name='AM-PathSuffixFalse'> <AssignVariable> <Name>target.copy.pathsuffix</Name> <Value>false</Value> </AssignVariable> </AssignMessage>
Un uso comune di <AssignVariable>
è l'impostazione di un valore predefinito per un parametro di query, un'intestazione o
l'altro valore che può essere passato con la richiesta. Per farlo puoi utilizzare una combinazione di entrambe
Elementi secondari <Ref>
e <Value>
. Per ulteriori informazioni, consulta gli esempi per <Ref>
.
<Name>
(elemento secondario di <AssignVariable>
)
Specifica il nome della variabile del flusso di destinazione, ovvero la variabile il cui valore è impostato dal criterio AssignMessage. Se la variabile denominata in <Name>
non esiste, il
criterio ne crea una con quel nome.
Valore predefinito | N/D |
Obbligatorio? | Obbligatorio |
Tipo | Stringa |
Elemento principale |
<AssignVariable>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <Name>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <AssignVariable> <Name>VARIABLE_NAME</Name> </AssignVariable> </AssignMessage>
Esempio 1
Nell'esempio seguente viene specificata la variabile di destinazione myvar
e la imposta
al valore letterale 42
:
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
Se myvar
non esiste, <AssignVariable>
lo crea.
<PropertySetRef>
(elemento secondario di <AssignVariable>
)
Questo elemento consente di recuperare dinamicamente il valore di una coppia chiave/nome dell'insieme di proprietà. Per scoprire di più sui set di proprietà, consulta Utilizzare i set di proprietà.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<AssignVariable>
|
Elementi secondari | Nessuno |
Un insieme di proprietà è costituito da una coppia nome/chiave.
Ad esempio: propset1.id=12345
,
dove propset1
è il nome dell'insieme di proprietà, id
è una chiave e
12345
è il valore della chiave.
L'elemento secondario PropertySetRef
consente di selezionare i nomi e/o le chiavi degli insiemi di proprietà in modo dinamico. Supponiamo
di avere 200 regole di routing in un file di insieme di proprietà. Puoi accedere alle regole del set di proprietà come segue, dove routingrules
è il nome del set di proprietà e rule1
, rule2
, rulen
sono le chiavi:
propertyset.routingrules.rule1 propertyset.routingrules.rule2 propertyset.routingrules.rulen
Per accedere a queste proprietà in un flusso di proxy API, devi sapere quale regola selezionare in fase di progettazione. Tuttavia, supponiamo che il nome della regola sia presente nell'intestazione o nel payload della richiesta. Un modo per selezionare la regola è utilizzare un criterio JavaScript con il seguente codice:
context.getVariables("propertyset.routingrules." + ruleName); //assuming ruleName was populated earlier.
D'altra parte, la funzionalitàAssignMessage PropertySetRef
consente di selezionare una chiave di proprietà in modo dinamico senza
introdurre JavaScript.
Nell'elemento <PropertySetRef>
puoi utilizzare una combinazione di variabili di flusso e valori di stringhe letterali. Per ulteriori dettagli, consulta gli esempi.
L'elemento <PropertySetRef>
utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <AssignVariable> <PropertySetRef>SOURCE_VARIABLE</PropertySetRef> </AssignVariable> </AssignMessage>
Esempio 1
Questo esempio assegna il valore di una chiave dell'insieme di proprietà a una variabile di flusso. In questo caso,
il nome dell'insieme di proprietà viene ottenuto dall'intestazione propset_name
, la chiave viene fornita
nell'intestazione propset_key
e il valore assegnato alla chiave viene memorizzato nella variabile
flow_variable
.
<AssignMessage async="false" continueOnError="false" enabled="true" name="assignMessage"> <DisplayName>Assign Message-1</DisplayName> <Properties/> <AssignVariable> <Name>flow_variable</Name> <PropertySetRef>{request.header.propset_name}.{request.header.propset_key}</PropertySetRef> </AssignVariable> </AssignMessage>
Puoi utilizzare qualsiasi combinazione di variabili di flusso e stringhe letterali nel
Elemento <PropertySetRef>
.
Esempio 2
In questo esempio viene assegnato il valore di una chiave di un set di proprietà a una variabile di flusso utilizzando un
nome della chiave (stringa letterale). In questo caso, il nome dell'insieme di proprietà viene ottenuto dall'propset_name
intestazione, la chiave è la stringa letterale key1
e il valore assegnato alla chiave viene memorizzato nella variabile flow_variable
.
<AssignMessage async="false" continueOnError="false" enabled="true" name="assignMessage"> <DisplayName>Assign Message-1</DisplayName> <Properties/> <AssignVariable> <Name>flow_variable</Name> <PropertySetRef>{request.header.propset_name}.key1</PropertySetRef> </AssignVariable> </AssignMessage>
Puoi utilizzare qualsiasi combinazione di variabili di flusso e stringhe letterali nell'elemento
<PropertySetRef>
.
<Ref>
(elemento secondario di <AssignVariable>
)
Specifica l'origine dell'assegnazione come variabile di flusso. La variabile di flusso può essere una delle variabili di flusso predefinite (elencate nella sezione Riferimento alle variabili di flusso) o una variabile di flusso personalizzata creata da te.
Il valore di <Ref>
viene sempre interpretato come variabile di flusso; non puoi
specifica una stringa letterale come
valore. Per assegnare un valore di stringa letterale, utilizza invece l'elemento <Value>
.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<AssignVariable>
|
Elementi secondari | Nessuno |
Quando specifichi una variabile di flusso con <Ref>
, ometti le parentesi graffe {}
che normalmente utilizzeresti per fare riferimento a una variabile di flusso. Ad esempio,
per impostare il valore della nuova variabile sul valore della variabile
del flusso client.host
:
DO specify the variable name without brackets: <Ref>client.host</Ref> DO NOT use brackets: <Ref>{client.host}</Ref>
Per definire un valore predefinito per la variabile del flusso di destinazione, utilizza <Value>
in combinazione con <Ref>
. Se la variabile di flusso specificata da
<Ref>
non esiste, non può essere letto o è nullo, Apigee assegna il valore
di <Value>
alla variabile del 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 del flusso
request.header.user-agent
alla variabile del flusso di destinazione myvar
e
il valore del parametro di query country
alla variabile Country
:
<AssignMessage name="assignvariable-4"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> </AssignVariable> </AssignMessage>
In questo esempio, Apigee non ha un valore predefinito (o di riserva) specificato per nessuna assegnazione.
Esempio 2
L'esempio seguente assegna il valore della variabile del flusso request.header.user-agent
alla variabile del flusso di destinazione myvar
e il valore
del parametro di query country
alla variabile Country
:
<AssignMessage name="assignvariable-2"> <AssignVariable> <Name>myvar</Name> <Ref>request.header.user-agent</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> <Value>ErrorOnCopy</Value> </AssignVariable> </AssignMessage>
In questo esempio, se i valori della variabile di flusso request.header.user-agent
o del parametro di query Country
sono null, illeggibili o con formato non corretto, Apigee assegna il valore ErrorOnCopy
alle nuove variabili.
Esempio 3
Un caso d'uso comune per <AssignVariable>
è impostare il valore predefinito di un parametro
della query, di un'intestazione o di un altro valore che può essere trasmesso con la richiesta. Ad esempio, crei
un proxy API meteo in cui la richiesta accetta un singolo parametro di query denominato w
. Questo
contiene l'ID della città di cui si desidera il meteo. L'URL della richiesta ha
il seguente formato:
http://myCO.com/v1/weather/forecastrss?w=CITY_ID
Per definire un valore predefinito per w
, crea un criterioAssignMessage come
seguenti:
<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 è nulla, significa che il parametro di query w
è stato
omesso dalla richiesta, in questo esempio viene utilizzato il valore predefinito
<Value>
. Pertanto, puoi effettuare una richiesta a questa API
proxy che omette il parametro di query w
:
http://myCO.com/v1/weather/forecastrss
...e il proxy API restituisce comunque un risultato valido.
Il valore di <Ref>
deve essere un
di flusso, ad esempio una proprietà di una request
, response
oppure
target
o il nome di una variabile di flusso personalizzata.
Se specifichi una variabile di flusso che non esiste per il valore di <Ref>
e il valore di <IgnoreUnresolvedVariables>
è false
, Apigee genera un errore.
<ResourceURL>
(elemento secondario di <AssignVariable>
)
Specifica l'URL di una risorsa di testo come origine dell'assegnazione della variabile. Apigee carica la variabile di flusso specificata in
<Name>
con i contenuti della risorsa a cui si fa riferimento. La risorsa può essere di tipo
digita XSD, XSL, WSDL, JavaScript, Property Set o OpenAPI Spec.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<AssignVariable>
|
Elementi secondari | Nessuno |
Se la risorsa specificata da <ResourceURL>
non esiste, allora: se il valore di
<IgnoreUnresolvedVariables>
è true
, Apigee
assegna il valore null
alla variabile del flusso di destinazione, mentre se il valore
<IgnoreUnresolvedVariables>
è false
, Apigee genera un errore.
La sintassi dell'elemento <ResourceURL>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <AssignVariable> <Name>VARIABLE_NAME</Name> <ResourceURL>RESOURCE_URL_OR_TEMPLATE</ResourceURL> </AssignVariable> </AssignMessage>
Il valore del testo assume un valore di stringa e viene interpretato come modello di messaggio. Tutti i seguenti valori sono validi:
<ResourceURL>jsc://my-js-file.js</ResourceURL> <ResourceURL>wsdl://{variable-goes-here}</ResourceURL> <ResourceURL>{variable-goes-here}</ResourceURL>
Esempio 1
Nell'esempio seguente viene assegnato il valore di una risorsa JSON caricata nel proxy nella
jsc
, nella variabile di flusso assigned-variable
:
<AssignMessage name='AM-From-ResourceURL-Proxy-JSC'> <AssignVariable> <Name>assigned-variable</Name> <ResourceURL>jsc://settings.json</ResourceURL> </AssignVariable> </AssignMessage>
Esempio 2
L'esempio seguente assegna il valore di una risorsa OpenAPI Spec, caricata nel proxy
nella cartella oas
, nella variabile di flusso assigned-variable
, quindi imposta
quel valore come Payload
nel corpo della risposta:
<AssignMessage name='AM-Response'> <AssignVariable> <Name>assigned-variable</Name> <ResourceURL>oas://Fulfillment.yaml</ResourceURL> </AssignVariable> <Set> <Payload contentType='application/yaml'>{assigned-variable}</Payload> </Set> </AssignMessage>
<Template>
(secondario di <AssignVariable>
)
Specifica un valore modello di messaggio. Un messaggio consente di eseguire la sostituzione di stringhe di variabili quando il criterio viene eseguito, e può combinare stringhe letterali con nomi di variabili racchiusi in caratteri parentesi graffe. Inoltre, i modelli di messaggio supportano le funzioni come la conversione delle maiuscole e la conversione delle lettere.
Utilizza l'attributo ref
per specificare una variabile di flusso in cui il valore della variabile è un modello di messaggio. Ad esempio, puoi memorizzare un modello di messaggio come
attributo personalizzato
in un'app per sviluppatori. Quando Apigee identifica l'app per sviluppatori dopo aver verificato la chiave API
o il token di sicurezza (tramite un'altra norma), l'elemento <AssignVariable>
potrebbe utilizzare il modello di messaggio dall'attributo personalizzato dell'app, che è disponibile
come variabile di flusso dal criterio di sicurezza. L'esempio seguente presuppone che il messaggio
il modello è disponibile in un attributo personalizzato denominato message_template
nella
app sviluppatore che effettua la chiamata API, in cui è stato usato il criterioVerifyAPIKey per la verifica
chiave API dell'app:
<Template ref='verifyapikey.myVerifyAPIKeyPolicy.app.name.message_template'/>
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<AssignVariable>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <Template>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <AssignVariable> <Template>MESSAGE_TEMPLATE</Template> or <Template ref='TEMPLATE_VARIABLE'></Template> </AssignVariable> </AssignMessage>
Esempio 1
L'esempio seguente utilizza la sintassi dei modelli dei messaggi 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 in cui il valore della variabile è un modello di messaggio predefinito. Utilizza questa opzione se desideri inserire un modello predefinito senza dover modificare il criterio:
<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 a cui si fa riferimento non è null, quel valore viene utilizzato come modello. Se il valore di riferimento è nullo, viene utilizzato come modello il valore di testo (in questo caso {system.uuid}-{messageid}
). Questo pattern è utile per fornire un valore override
, in cui
in alcuni casi vuoi sostituire il modello predefinito (la parte di testo) con valori
impostati in modo dinamico. Ad esempio, un'istruzione condizionale potrebbe acquisire un valore
da una mappa chiave-valore e imposta la variabile di riferimento su quel valore:
<AssignMessage name='AV-template-with-fallback'> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignVariable> <Name>my_destination_variable</Name> <Template ref='my_variable'>{system.uuid}-{messageid}</Template> </AssignVariable> </AssignMessage>
<Value>
(elemento secondario di <AssignVariable>
)
Definisce il valore della variabile del flusso di destinazione impostata con <AssignVariable>
. La
viene sempre interpretato come una stringa letterale; non puoi usare una variabile di flusso come valore,
se lo racchiudi tra parentesi ({}
). Per utilizzare una variabile di flusso, utilizza <Ref>
.
Valore predefinito | N/D |
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, viene
non risolvibile oppure 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 del flusso di destinazione myvar
al valore letterale 42
:
<AssignMessage name="assignvariable-1"> <AssignVariable> <Name>myvar</Name> <Value>42</Value> </AssignVariable> </AssignMessage>
Esempio 2
Nell'esempio seguente viene assegnato 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
a
la variabile del flusso di destinazione.
<Copy>
Copia i valori dal messaggio specificato dall'attributo source
al messaggio specificato dall'elemento <AssignTo>
. Se non specifichi
un target con <AssignTo>
, questo criterio copia i valori nella richiesta o nella risposta
a seconda della fase del flusso
in cui viene eseguito questo criterio.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<AssignMessage>
|
Elementi secondari |
<FormParams> <Headers> <Path> <Payload> <QueryParams> <StatusCode> <Verb> <Version> |
Se non specifichi nessun elemento secondario sotto l'elemento <Copy>
, verranno copiate tutte le parti
del messaggio di origine designato.
L'elemento <Copy>
utilizza la seguente sintassi:
Sintassi
<AssignMessage
continueOnError="[false|true]"
enabled="[true|false]"
name="POLICY_NAME" >
<Copy source="VARIABLE_NAME">
<!-- Can also be an empty array (<FormParams/>) -->
<FormParams>
<FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam>
...
</FormParams>
<!-- Copy all headers -->
<Headers/>
<!-- or, copy specific headers by name -->
<Headers>
<Header name="HEADER_NAME"/>
<!-- or -->
<Header name="HEADER_NAME">[false|true]</Header>
...
</Headers>
<Path>[false|true]</Path>
<Payload>[false|true]</Payload>
<!-- Can also be an empty array (<QueryParams/>) -->
<QueryParams>
<QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam>
...
</QueryParams>
<StatusCode>[false|true]</StatusCode>
<Verb>[false|true]</Verb>
<Version>[false|true]</Version>
</Copy>
<!-- Used as the destination for the <Copy>
values -->
<AssignTo createNew="[true|false]" transport="http"
type="[request|response]">DESTINATION_VARIABLE_NAME</AssignTo>
</AssignMessage>
Esempio 1
L'esempio seguente copia un'intestazione, tre parametri del modulo, il percorso e tutte le query
parametri dal messaggio request
a una nuova richiesta personalizzata denominata newRequest
:
<AssignMessage name="AM-copy-1"> <AssignTo createNew="true" transport="http" type="request">newRequest</AssignTo> <Copy source="request"> <Headers> <Header name="Header_Name_1"/> </Headers> <FormParams> <FormParam name="Form_Param_Name_1"/> <FormParam name="Form_Param_Name_2"/> <FormParam name="Form_Param_Name_3"/> </FormParams> <Path>true</Path> <QueryParams/> </Copy> </AssignMessage>
Poiché elementi come <Payload>
e <Verb>
non sono presenti, la classe
non copia quelle parti del messaggio.
Esempio 2
Il seguente esempio rimuove prima tutto dal messaggio response
esistente, poi
copia tutti i valori da un altro messaggio chiamato secondResponse
nel messaggio response
:
<AssignMessage name='AM-Copy-Response'> <AssignTo createNew="false" transport="http" type="response">response</AssignTo> <!-- first remove any existing values --> <Remove/> <!-- then copy everything from the designated message --> <Copy source="secondResponse"/> </AssignMessage>
L'elemento <Copy>
ha un solo attributo:
Attributo | Descrizione | Obbligatorio? | Tipo |
---|---|---|---|
origine |
Specifica l'oggetto di origine della copia.
|
Facoltativo | Stringa |
<FormParams>
(elemento secondario di <Copy>
)
Copia i parametri del modulo dalla richiesta specificata dall'attributo source
dell'elemento <Copy>
alla richiesta specificata dall'elemento <AssignTo>
. Questo elemento non ha alcun effetto su un
la risposta corretta.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Array di elementi <FormParam> o un array vuoto |
Elemento principale |
<Copy>
|
Elementi secondari |
<FormParam> |
La sintassi dell'elemento <FormParams>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <!-- Can also be an empty array (<FormParams/>) --> <FormParams> <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam> ... </FormParams> </Copy> </AssignMessage>
Esempio 1
L'esempio seguente copia un singolo parametro 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
Il seguente esempio 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 form con lo stesso nome, utilizza la seguente sintassi:
<AssignMessage name="copy-formparams-4"> <Copy source="request"> <FormParams> <FormParam name="f1"/> <FormParam name="f2"/> <FormParam name="f3.2"/> </FormParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Questo esempio copia f1
, f2
e il secondo valore di f3
. Se f3
ha un solo valore, non viene copiato.
Puoi utilizzare <FormParams>
solo se sono soddisfatti i seguenti criteri:
- Verbo HTTP:
POST
- Tipo di messaggio: risposta
- Uno (o entrambi) dei seguenti elementi:
- Dati del modulo: puoi impostare un valore specifico oppure "" (la stringa vuota). Ad esempio, con
curl
, aggiungi-d ""
alla tua richiesta. - Intestazione
Content-Length
: impostata su 0 (se non sono presenti dati nella richiesta originale) o sulla lunghezza corrente. Ad esempio, concurl
aggiungi-H "Content-Length: 0"
alla tua richiesta.
- Dati del modulo: puoi impostare un valore specifico oppure "" (la stringa vuota). Ad esempio, con
Quando copi <FormParams>
, <Copy>
imposta Content-Type
del messaggio su
application/x-www-form-urlencoded
prima di inviarlo al servizio di destinazione.
<Headers>
(elemento secondario di <Copy>
)
Copia le intestazioni HTTP dal messaggio di richiesta o risposta specificato dall'attributo source
dell'elemento <Copy>
al messaggio di richiesta o risposta specificato dall'elemento <AssignTo>
.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Un array di elementi <Header> o un array vuoto |
Elemento principale |
<Copy>
|
Elementi secondari |
<Header> |
L'elemento <Headers>
utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <!-- Copy all headers --> <Headers/> <!-- or, copy specific headers by name --> <Headers> <Header name="HEADER_NAME"/> <!-- or --> <Header name="HEADER_NAME">[false|true]</Header> ... </Headers> </Copy> </AssignMessage>
Esempio 1
L'esempio seguente copia l'intestazione user-agent
dalla richiesta al
nuovo oggetto di richiesta personalizzato:
<AssignMessage name="AM-copy-headers-1"> <Copy source="request"> <Headers> <Header name="user-agent"/> </Headers> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Esempio 2
Per copiare tutte le intestazioni, utilizza un elemento <Headers>
vuoto, come illustrato nell'esempio seguente:
<AssignMessage name="copy-headers-2"> <Copy source="request"> <Headers/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Esempio 3
Se esistono 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>
(secondario di <Copy>
)
Determina se il percorso deve essere copiato dalla richiesta di origine alla richiesta di destinazione. Questo elemento non ha alcun effetto su una risposta.
Se true
, questo criterio copia il percorso dal messaggio di richiesta specificato
Attributo source
dell'elemento <Copy>
alla richiesta
messaggio 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="VARIABLE_NAME"> <Path>[false|true]</Path> </Copy> </AssignMessage>
Esempio 1
L'esempio seguente indica che AssignMessage deve copiare il percorso dalla richiesta di origine al nuovo oggetto della richiesta personalizzata:
<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>
(secondario di <Copy>
)
Determina se il payload deve essere copiato dall'origine alla destinazione. L'origine e la destinazione possono essere richieste o risposte.
Se true
, questo criterio copia il payload dal messaggio specificato
Attributo source
dell'elemento <Copy>
al messaggio
specificato dall'elemento <AssignTo>
.
Valore predefinito | Falso |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Copy>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <Payload>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <Payload>[false|true]</Payload> </Copy> </AssignMessage>
Esempio 1
L'esempio seguente imposta <Payload>
su true
in modo che il payload della richiesta sia
copiato dalla richiesta alla risposta:
<AssignMessage name="AM-copy-payload-1"> <Copy source="request"> <Payload>true</Payload> </Copy> <AssignTo>response</AssignTo> </AssignMessage>
<QueryParams>
(secondario di <Copy>
)
Copia i parametri della stringa di query dalla richiesta specificata dalla
Attributo source
dell'elemento <Copy>
alla richiesta specificata
dall'elemento <AssignTo>
. Questo elemento non ha alcun effetto su una risposta.
Valore predefinito | N/D |
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="VARIABLE_NAME"> <!-- Can also be an empty array (<QueryParams/>) --> <QueryParams> <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam> ... </QueryParams> </Copy> </AssignMessage>
Esempio 1
Il seguente esempio copia il parametro di query my_param
dalla richiesta in un nuovo oggetto
personalizzato della richiesta:
<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 request personalizzato:
<AssignMessage name="copy-queryparams-2"> <Copy source="request"> <QueryParams/> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Esempio 3
Se sono presenti più parametri di query con lo stesso nome, utilizza la seguente sintassi:
<AssignMessage name="copy-queryparams-3"> <Copy source="request"> <QueryParams> <QueryParam name="qp1"/> <QueryParam name="qp2"/> <QueryParam name="qp3.2"/> </QueryParams> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
In questo esempio vengono copiati qp1
, qp2
e il secondo valore di qp3
. Se qp3
ha solo un valore, non viene copiato.
Puoi utilizzare <QueryParams>
solo se vengono soddisfatti i seguenti criteri:
- Verbi HTTP:
GET
,POST
,PATCH
,DELETE
- Tipo di messaggio: richiesta
<StatusCode>
(elemento secondario di <Copy>
)
Determina se il codice di stato viene copiato dalla risposta di origine alla risposta di destinazione. Questo elemento non ha alcun effetto su una richiesta.
Se true
, questo criterio copia il codice di stato dal messaggio di risposta specificato da
l'attributo source
dell'elemento <Copy>
alla risposta
messaggio specificato dall'elemento <AssignTo>
.
Valore predefinito | Falso |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Copy>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <StatusCode>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <StatusCode>[false|true]</StatusCode> </Copy> </AssignMessage>
Esempio 1
Nell'esempio seguente viene impostato il valore <StatusCode>
su true
, che copia il codice di stato
dall'oggetto risposta predefinito a un nuovo oggetto risposta personalizzata:
<AssignMessage name="copy-statuscode-1"> <Copy source="response"> <StatusCode>true</StatusCode> </Copy> <AssignTo createNew="true" transport="http" type="response">MyCustomResponse</AssignTo> </AssignMessage>
Puoi utilizzare <StatusCode>
solo se i messaggi di origine e di destinazione sono di tipo Risposta.
Un uso comune di <StatusCode>
è l'impostazione del codice di stato della risposta proxy su
un valore diverso da quello ricevuto dal target.
<Verb>
(secondario di <Copy>
)
Determina se il verbo HTTP viene copiato dalla richiesta di origine alla richiesta di destinazione. Questo elemento non ha alcun effetto su una risposta.
Se true
, copia il verbo trovato nell'attributo source
dell'elemento <Copy>
nella richiesta specificata nell'elemento <AssignTo>
.
Valore predefinito | Falso |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Copy>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <Verb>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <Verb>[false|true]</Verb> </Copy> </AssignMessage>
Esempio 1
L'esempio seguente imposta <Verb>
su true
, che copia il verbo dal
predefinita a una nuova richiesta personalizzata:
<AssignMessage name="copy-verb-1"> <Copy source="request"> <Verb>true</Verb> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Puoi utilizzare <Verb>
solo se sono soddisfatti i seguenti criteri:
- Tipo di messaggio: richiesta
<Version>
(elemento secondario di <Copy>
)
determina se la versione HTTP viene copiata dalla richiesta di origine alla richiesta di destinazione. Questo elemento non ha alcun effetto su una risposta.
Se true
, copia la versione HTTP trovata nell'attributo source
dell'elemento <Copy>
all'oggetto specificato dall'elemento <AssignTo>
.
Valore predefinito | Falso |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Copy>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <Version>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Copy source="VARIABLE_NAME"> <Version>[false|true]</Version> </Copy> </AssignMessage>
Esempio 1
L'esempio seguente imposta <Version>
su true
nella richiesta, che copia il valore
versione dall'oggetto di richiesta predefinito a un nuovo oggetto di richiesta personalizzato:
<AssignMessage name="copy-version-1"> <Copy source="request"> <Version>true</Version> </Copy> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Puoi utilizzare <Version>
solo se sono soddisfatti i seguenti criteri:
- Tipo di messaggio: richiesta
<DisplayName>
Da utilizzare insieme all'attributo name
per etichettare il criterio nell'editor proxy dell'interfaccia utente di gestione con un nome diverso e più naturale.
L'elemento <DisplayName>
è comune a tutti i criteri.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo. Se ometti <DisplayName> , viene utilizzato il valore dell'attributo name del criterio. |
Tipo | Stringa |
Elemento principale | <PolicyElement> |
Elementi secondari | Nessuno |
La sintassi dell'elemento <DisplayName>
è la seguente:
Sintassi
<PolicyElement> <DisplayName>POLICY_DISPLAY_NAME</DisplayName> ... </PolicyElement>
Esempio
<PolicyElement> <DisplayName>My Validation Policy</DisplayName> </PolicyElement>
L'elemento <DisplayName>
non ha attributi o elementi secondari.
<IgnoreUnresolvedVariables>
Determina se l'elaborazione si interrompe quando viene rilevata una variabile non risolta.
Valore predefinito | Falso |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<AssignMessage>
|
Elementi secondari | Nessuno |
Imposta su true
per ignorare le variabili non risolte e continuare l'elaborazione; in caso contrario, false
. Il valore predefinito è false
.
L'impostazione di <IgnoreUnresolvedVariables>
su true
è diversa dall'impostazione di continueOnError
di <AssignMessage>
su true
in quanto è specifica per l'impostazione e l'ottenimento dei valori delle variabili. Se imposti continueOnError
su true
, Apigee ignora tutti gli errori, non solo quelli rilevati durante l'utilizzo delle variabili.
La sintassi dell'elemento <IgnoreUnresolvedVariables>
è la seguente:
Sintassi
<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, questo criterio non genera un errore.
<Remove>
Rimuove intestazioni, parametri di ricerca, parametri del modulo e/o il payload dei messaggi da
un messaggio. Un tag <Remove>
vuoto rimuove tutti i dati dal messaggio.
Il messaggio interessato può essere una richiesta o una risposta. Specifica su quale messaggio <Remove>
agisce utilizzando l'elemento <AssignTo>
.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Tipo complesso |
Elemento principale |
<AssignMessage>
|
Elementi secondari |
<FormParams> <Headers> <Payload> <QueryParams> |
Un caso d'uso comune di <Remove>
è l'eliminazione di un parametro di query o di un'intestazione che contiene dati sensibili
dall'oggetto della richiesta in entrata, per evitare di passarlo al server di backend.
L'elemento <Remove>
utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Remove all form parameters --> <FormParams/> <!-- or, remove specific form parameters by name --> <FormParams> <FormParam name="FORMPARAM_NAME"/> <!-- or --> <FormParam name="FORMPARAM_NAME">[false|true]</FormParam> ... </FormParams> <!-- Remove all headers --> <Headers/> <!-- or, remove specific headers by name --> <Headers> <Header name="HEADER_NAME"/> <!-- or --> <Header name="HEADER_NAME">[false|true]</Header> ... </Headers> <Payload>[false|true]</Payload> <!-- Remove all query parameters --> <QueryParams/> <!-- or, remove specific query parameters by name --> <QueryParams> <QueryParam name="QUERYPARAM_NAME"/> <!-- or --> <QueryParam name="QUERYPARAM_NAME">[false|true]</QueryParam> ... </QueryParams> </Remove> </AssignMessage>
Esempio 1
L'esempio seguente rimuove il corpo del messaggio dalla risposta:
<AssignMessage name="AM-remove-1"> <DisplayName>remove-1</DisplayName> <Remove> <Payload>true</Payload> </Remove> <AssignTo>response</AssignTo> </AssignMessage>
Nel flusso di risposta, questo criterio rimuove il corpo della risposta, restituendo solo HTTP al client.
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 di messaggio:
<AssignMessage name="AM-remove-3"> <Remove/> <AssignTo>request</AssignTo> </AssignMessage>
In genere, esegui questa operazione solo se intendi utilizzare l'elemento <Set>
o
l'elemento <Copy>
per impostare alcuni valori di sostituzione nel messaggio.
<FormParams>
(secondario di <Remove>
)
Rimuove i parametri del modulo specificati dalla richiesta. Questo elemento non ha alcun effetto su una risposta.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Array di elementi <FormParam> o un array vuoto |
Elemento principale |
<Remove>
|
Elementi secondari |
<FormParam> |
La sintassi dell'elemento <FormParams>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Remove all form parameters --> <FormParams/> <!-- or, remove specific form parameters by name --> <FormParams> <FormParam name="FORMPARAM_NAME"/> <!-- or --> <FormParam name="FORMPARAM_NAME">[false|true]</FormParam> ... </FormParams> </Remove> </AssignMessage>
Esempio 1
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 esistono 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 vengono soddisfatti i seguenti criteri:
- Tipo di messaggio: richiesta
Content-Type
:application/x-www-form-urlencoded
<Headers>
(secondario di <Remove>
)
Rimuove le intestazioni HTTP specificate dalla richiesta o dalla risposta, come specificato dall'elemento
<AssignTo>
.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Array di elementi <Header> o un array vuoto |
Elemento principale |
<Remove>
|
Elementi secondari |
<Header> |
L'elemento <Headers>
utilizza la seguente sintassi:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Remove all headers --> <Headers/> <!-- or, remove specific headers by name --> <Headers> <Header name="HEADER_NAME"/> <!-- or --> <Header name="HEADER_NAME">[false|true]</Header> ... </Headers> </Remove> </AssignMessage>
Esempio 1
L'esempio seguente rimuove l'intestazione user-agent
dalla richiesta:
<AssignMessage name="AM-remove-one-header"> <Remove> <Headers> <Header name="user-agent"/> </Headers> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Esempio 2
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 esistono più intestazioni con lo stesso nome, utilizza la seguente sintassi:
<AssignMessage name="AM-remove-headers-3"> <Remove> <Headers> <Header name="h1"/> <Header name="h2"/> <Header name="h3.2"/> </Headers> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Questo esempio rimuove dalla richiesta h1
, h2
e il secondo valore di h3
. Se h3
ha un solo valore, non viene rimosso.
<Payload>
(elemento secondario di <Remove>
)
Determina se <Remove>
elimina il payload nella richiesta o nella risposta, che è
specificato dall'elemento <AssignTo>
. Imposta true
su
cancellare il payload; altrimenti false
. Il valore predefinito è false
.
Valore predefinito | Falso |
Obbligatorio? | Facoltativo |
Tipo | Booleano |
Elemento principale |
<Remove>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <Payload>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <Payload>[false|true]</Payload> </Remove> </AssignMessage>
Esempio 1
L'esempio seguente imposta <Payload>
su true
in modo che il payload della richiesta sia
cancellato:
<AssignMessage name="AM-remove-payload-1"> <Remove> <Payload>true</Payload> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
<QueryParams>
(elemento secondario di <Remove>
)
Rimuove i parametri di query specificati dalla richiesta. Questo elemento non ha alcun effetto su un la risposta corretta.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Array di elementi <QueryParam> o un array vuoto |
Elemento principale |
<Remove>
|
Elementi secondari |
<QueryParam> |
La sintassi dell'elemento <QueryParams>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <!-- Can also be empty to remove everything from the message (<Remove/>) --> <Remove> <!-- Remove all query parameters --> <QueryParams/> <!-- or, remove specific query parameters by name --> <QueryParams> <QueryParam name="QUERYPARAM_NAME"/> <!-- or --> <QueryParam name="QUERYPARAM_NAME">[false|true]</QueryParam> ... </QueryParams> </Remove> </AssignMessage>
Esempio 1
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 esistono più parametri di query con lo stesso nome, utilizza la seguente sintassi:
<AssignMessage name="AM-remove-queryparams-3"> <Remove> <QueryParams> <QueryParam name="qp1"/> <QueryParam name="qp2"/> <QueryParam name="qp3.2"/> </QueryParams> </Remove> <AssignTo>request</AssignTo> </AssignMessage>
Questo esempio rimuove dalla richiesta qp1
, qp2
e il secondo valore di qp3
. Se
qp3
ha un solo valore, non viene rimosso.
Esempio 4
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 vengono soddisfatti i seguenti criteri:
- Verbi HTTP:
GET
,POST
,PATCH
,DELETE
- Tipo di messaggio: richiesta
<Set>
Imposta le informazioni nel messaggio di richiesta o risposta, specificate dall'elemento
<AssignTo>
. <Set>
sovrascrive le intestazioni o
i parametri di query o del modulo esistenti nel messaggio originale o ne aggiunge di nuovi se non sono presenti.
Le intestazioni e i parametri di query e dei moduli
in un messaggio HTTP potrebbero contenere più valori. Per aggiungere altri valori per un'intestazione o un parametro, utilizza invece l'elemento <Add>
.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Tipo complesso |
Elemento principale |
<AssignMessage>
|
Elementi secondari |
<FormParams> <Headers> <Payload> <Path> <QueryParams> <StatusCode> <Verb> <Version> |
La sintassi dell'elemento <Set>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Set> <FormParams> <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam> ... </FormParams> <Headers> <Header name="HEADER_NAME">HEADER_VALUE</Header> ... </Headers> <Path>PATH</Path> <Payload contentType="CONTENT_TYPE" variablePrefix="PREFIX" variableSuffix="SUFFIX">NEW_PAYLOAD</Payload> <QueryParams> <QueryParam name="QUERYPARAM_NAME">QUERYPARAM_VALUE</QueryParam> ... </QueryParams> <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. Quando questo criterio viene allegato nel flusso di richieste, consente al sistema a monte 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, nonché l'intestazione Content-Type
.
<AssignMessage name="AM-Overwrite-Payload"> <Set> <Payload contentType="application/json">{ "status" : 42 }</Payload> </Set> <AssignTo>response</AssignTo> </AssignMessage>
<FormParams>
(elemento secondario di <Set>
)
Sostituisce i parametri del modulo esistenti in una richiesta e li sostituisce con i nuovi valori specificati con questo elemento. Questo elemento non ha alcun effetto su una risposta.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Array di elementi <FormParam> |
Elemento principale |
<Set>
|
Elementi secondari |
<FormParam> |
La sintassi dell'elemento <FormParams>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Set> <FormParams> <FormParam name="FORMPARAM_NAME">FORMPARAM_VALUE</FormParam> ... </FormParams> </Set> </AssignMessage>
Esempio 1
Nell'esempio seguente, un parametro del modulo chiamato myparam
viene impostato sul valore della variabile
request.header.myparam
in una nuova richiesta personalizzata:
<AssignMessage name="AM-set-formparams-1"> <Set> <FormParams> <FormParam name="myparam">{request.header.myparam}</FormParam> </FormParams> </Set> <AssignTo createNew="true" transport="http" type="request">MyCustomRequest</AssignTo> </AssignMessage>
Puoi utilizzare <FormParams>
solo se vengono soddisfatti i seguenti criteri:
- Verbo HTTP:
POST
- Tipo di messaggio: richiesta
Se nelle norme definisci parametri di modulo vuoti
(<Add><FormParams/></Add>
), il criterio non aggiunge nessun modulo
parametri. È come omettere <FormParams>
.
<Set>
modifica il Content-Type
del messaggio in application/x-www-form-urlencoded
prima di inviarlo all'endpoint di destinazione.
<Headers>
(elemento secondario di <Set>
)
Sostituisce le intestazioni HTTP esistenti nella richiesta o nella risposta, specificate dall'elemento
<AssignTo>
.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Array di <Header> elementi |
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
Nell'esempio seguente l'intestazione x-ratelimit-remaining
viene impostata sul valore del valore
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 nel criterio definisci intestazioni vuote (<Set><Headers/></Set>
), il criterio non ne imposta alcuna. Questo
avrà lo stesso effetto dell'omissione di <Headers>
.
<Path>
(elemento secondario di <Set>
)
<Payload>
(secondario di <Set>
)
Definisce il corpo del messaggio per una richiesta o una risposta, specificato dall'elemento
<AssignTo>
. Il payload può essere qualsiasi tipo di contenuto valido, come un
testo, JSON o XML.
Valore predefinito | stringa vuota |
Obbligatorio? | Facoltativo |
Tipo | Stringa |
Elemento principale |
<Set>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <Payload>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Set> <Payload contentType="CONTENT_TYPE" variablePrefix="PREFIX" variableSuffix="SUFFIX">NEW_PAYLOAD</Payload> </Set> </AssignMessage>
Esempio 1
L'esempio seguente imposta un payload in testo normale:
<AssignMessage name="set-payload-1"> <Set> <Payload contentType="text/plain">42</Payload> </Set> </AssignMessage>
Esempio 2
L'esempio seguente imposta un payload JSON:
<AssignMessage name="set-payload-2"> <Set> <Payload contentType="application/json"> {"name":"foo", "type":"bar"} </Payload> </Set> </AssignMessage>
Esempio 3
L'esempio seguente inserisce valori delle variabili nel payload aggregando i nomi delle variabili tra parentesi graffe:
<AssignMessage name="set-payload-3"> <Set> <Payload contentType="application/json"> {"name":"foo", "type":"{variable_name}"} </Payload> </Set> </AssignMessage>
Nelle versioni precedenti di Apigee, ad esempio prima della release 16.08.17 nel cloud, era possibile
Non utilizzare parentesi graffe per indicare i riferimenti alle variabili all'interno dei payload JSON. In queste release,
è necessario utilizzare gli attributi variablePrefix
e variableSuffix
per
specificare i delimitatori e utilizzarli per aggregare i nomi delle variabili, in questo modo:
<AssignMessage name="set-payload-3b"> <Set> <Payload contentType="application/json" variablePrefix="@" variableSuffix="#"> {"name":"foo", "type":"@variable_name#"} </Payload> </Set> </AssignMessage>
La sintassi precedente continua a funzionare.
Esempio 4
I contenuti di <Payload>
vengono trattati come un modello di messaggio. Ciò significa che il criterio AssignMessage sostituisce le variabili racchiuse tra parentesi graffe con il valore delle variabili a cui viene fatto riferimento in fase di runtime.
L'esempio seguente utilizza la sintassi delle parentesi graffe per impostare parte del payload su un valore della 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 |
Facoltativo | Stringa |
variablePrefix |
Facoltativamente, specifica il delimitatore iniziale su una variabile di flusso. Il valore predefinito è "{". Per maggiori informazioni, consulta la sezione Riferimento alle variabili di flusso. | Facoltativo | Carattere |
variableSuffix |
(Facoltativo) Specifica il delimitatore finale di una variabile di flusso. Il valore predefinito è "}". Per maggiori informazioni, consulta la sezione Riferimento alle variabili di flusso. | Facoltativo | Carattere |
<QueryParams>
(elemento secondario di <Set>
)
Sovrascrive parametri di ricerca esistenti nella richiesta con nuovi valori. Questo elemento non ha alcun effetto su una risposta.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Array di elementi <QueryParam> |
Elemento principale |
<Set>
|
Elementi secondari |
<QueryParam> |
La sintassi dell'elemento <QueryParams>
è la seguente:
Sintassi
<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 di
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:
- Verbi HTTP:
GET
,POST
,PATCH
,DELETE
- Tipo di messaggio: richiesta
Se nel criterio vengono definiti parametri di ricerca vuoti
(<Set><QueryParams/></Set>
), il criterio non imposta alcuna query
parametri. È lo stesso che omettere <QueryParams>
.
<StatusCode>
(secondario 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 |
La sintassi dell'elemento <StatusCode>
è la seguente:
Sintassi
<AssignMessage continueOnError="[false|true]" enabled="[true|false]" name="POLICY_NAME" > <Set> <StatusCode>HTTP_STATUS_CODE or {variable}</StatusCode> </Set> </AssignMessage>
Esempio 1
L'esempio seguente imposta un codice di stato semplice:
<AssignMessage name="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 esecuzione con il valore della
variabile a cui fa riferimento, come mostrato nell'esempio seguente:
<AssignMessage name="set-statuscode-2"> <Set> <StatusCode>{calloutresponse.status.code}</StatusCode> </Set> <AssignTo>response</AssignTo> </AssignMessage>
Puoi utilizzare <StatusCode>
solo se vengono soddisfatti i seguenti criteri:
- Tipo di messaggio: risposta
<Verb>
(secondario di <Set>
)
Imposta il verbo HTTP sulla richiesta. Questo elemento non ha alcun effetto su una risposta.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Stringa o VARIABLE |
Elemento principale |
<Set>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <Verb>
è la seguente:
Sintassi
<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 considerati un modello di messaggio. Ciò significa che un nome di variabile
racchiuso tra parentesi graffe verrà sostituito in fase di esecuzione con il valore della variabile
a cui fa riferimento.
L'esempio seguente utilizza una variabile per compilare un verbo:
<AssignMessage name="AM-set-verb-to-dynamic-value"> <Set> <Verb>{my_variable}</Verb> </Set> <AssignTo>request</AssignTo> </AssignMessage>
Puoi utilizzare <Verb>
solo se vengono soddisfatti i seguenti criteri:
- Tipo di messaggio: richiesta
<Version>
(secondario di <Set>
)
Imposta la versione HTTP in una richiesta. Questo elemento non ha alcun effetto su una risposta.
Valore predefinito | N/D |
Obbligatorio? | Facoltativo |
Tipo | Stringa o VARIABLE |
Elemento principale |
<Set>
|
Elementi secondari | Nessuno |
La sintassi dell'elemento <Version>
è la seguente:
Sintassi
<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
Il codice seguente utilizza una variabile tra parentesi graffe per impostare il numero di versione:
<AssignMessage name="AM-set-version-2"> <Set> <Version>{my_version}</Version> </Set> <AssignTo>request</AssignTo> </AssignMessage>
I contenuti di <Version>
vengono trattati come un modello di messaggio. Ciò significa
nome della variabile racchiuso tra parentesi graffe verrà sostituito in fase di runtime con il valore del valore
.
Puoi utilizzare <Version>
solo se sono soddisfatti i seguenti criteri:
- Tipo di messaggio: richiesta
Codice di errore | Stato HTTP | Causa | Correggi |
---|---|---|---|
steps.assignmessage.SetVariableFailed |
500 |
Il criterio non è stato in grado di impostare una variabile. Consulta la stringa di errore per il nome della variabile non risolta. | |
steps.assignmessage.VariableOfNonMsgType |
500 |
Questo errore si verifica se l'attributo Le variabili di tipo di messaggio rappresentano intere richieste e risposte HTTP. La piattaforma Apigee integrata
le variabili di flusso |
build |
steps.assignmessage.UnresolvedVariable |
500 |
Questo errore si verifica se una variabile specificata nel criterioAssignMessage è:
|
build |
Errori di deployment
Questi errori possono verificarsi quando esegui il deployment di un proxy contenente questo criterio.
Nome dell'errore | Causa | Correggi |
---|---|---|
InvalidIndex |
Se l'indice specificato negli elementi <Copy> e/o <Remove> della classe AssignMessage
è 0 o un numero negativo, il deployment del proxy API non va a buon fine.
|
build |
InvalidVariableName |
Se l'elemento secondario <Name> è vuoto o non specificato nell'elemento <AssignVariable> ,
il deployment del proxy API non riesce perché non esiste un nome di variabile valido in
a cui assegnare un valore. È necessario 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 dell'errore. | fault.name Matches "UnresolvedVariable" |
assignmessage.POLICY_NAME.failed |
POLICY_NAME è il nome specificato dall'utente del criterio che ha generato l'errore. | assignmessage.AM-SetResponse.failed = true |
Esempio di risposta di errore
{ "fault":{ "detail":{ "errorcode":"steps.assignmessage.VariableOfNonMsgType" }, "faultstring":"AssignMessage[AM-SetResponse]: value of variable is not of type Message" } }
Esempio di regola di errore
<FaultRule name="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 criterio è definito da uno schema XML (.xsd
). Come riferimento, gli schemi di criteri sono disponibili su GitHub.
Argomenti correlati
Operazione in corso esempi del criterioAssignMessage sono disponibili negli esempi della piattaforma API.
Per un esempio più avanzato di come eseguire l'override di target.url
dalla
ProxyEndpoint
, consulta questo articolo della community Apigee.
Per vedere un percorso impostato in azione in un criterio ServiceCallout, dai un'occhiata a questo esempio di apprendimento pratico negli esempi GitHub di Apigee. Basta clonare il repository
segui le istruzioni in questo argomento. L'esempio utilizzaAssignMessage per impostare un percorso di richiesta,
utilizza quindi un criterio ServiceCallout
per inviare la richiesta a un servizio esterno.