Questa pagina si applica ad Apigee e Apigee hybrid.
Visualizza la documentazione di Apigee Edge.
Le variabili di flusso sono oggetti a cui puoi accedere dai tuoi criteri o dalle tue utilità (ad esempio lo strumento di debug). Ti consentono di mantenere lo stato associato a una transazione API elaborata da Apigee.
Che cosa sono le variabili di flusso?
Le variabili di flusso esistono nel contesto di un flusso di proxy API e monitorano lo stato in una transazione API come le variabili denominate monitorano lo stato in un programma software. Le variabili di flusso memorizzano informazioni come:
- L'indirizzo IP, le intestazioni, il percorso dell'URL e il payload inviati dall'app che effettua la richiesta
- Informazioni di sistema come la data e l'ora in cui Apigee riceve una richiesta
- Dati ricavati durante l'esecuzione di un criterio. Ad esempio, dopo l'esecuzione di un criterio che convalida un token OAuth, Apigee crea variabili di flusso che contengono informazioni come il nome dell'applicazione richiedente.
- Informazioni sulla risposta del sistema di destinazione
Alcune variabili sono integrate in Apigee e vengono compilate automaticamente ogni volta che viene ricevuta una richiesta API. Sono disponibili durante l'intera transazione API. Puoi anche creare le tue variabili personalizzate utilizzando criteri come il criterio Assegna messaggio o in codice JavaScript e Java.
Come vedrai, le variabili hanno un ambito e la loro accessibilità dipende in parte da quando vengono create nel flusso del proxy API. In generale, quando una variabile viene creata, è disponibile per tutti i criteri e il codice che vengono eseguiti in un secondo momento nel flusso di transazioni dell'API.
Come vengono utilizzate le variabili di flusso?
Le variabili di flusso vengono utilizzate nei policies e nei flussi condizionali:
- I criteri possono recuperare lo stato dalle variabili di flusso e utilizzarlo per svolgere il proprio lavoro.
Ad esempio, un criterio VerifyJWT può recuperare il token da verificare da una variabile di flusso ed eseguire la verifica. Un altro esempio è un regolamento JavaScript che può recuperare le variabili di flusso e codificare i dati contenuti al loro interno.
- I flussi condizionali possono fare riferimento alle variabili di flusso per indirizzare il flusso di un'API tramite Apigee, in modo simile al funzionamento di un'istruzione switch in programmazione.
Ad esempio, un criterio per restituire un errore potrebbe essere eseguito solo quando viene impostata una determinata variabile di flusso.
Vediamo alcuni esempi di come le variabili vengono utilizzate in ciascuno di questi contesti.
Variabili di flusso nei criteri
Alcune policies accettano come input le variabili di flusso.
Ad esempio, la seguente policy AssignMessage prende il valore della variabile di flusso client.ip
e lo inserisce in un'intestazione della richiesta denominata My-Client-IP
. Se aggiunto al flusso di richiesta, questo criterio imposta un'intestazione
che viene passata al target di backend. Se impostato nel flusso di risposta, l'intestazione viene inviata nuovamente all'app client.
<AssignMessage name="set-ip-in-header"> <AssignTo createNew="false" transport="http" type="request">request</AssignTo> <Set> <Headers> <Header name="My-Client-IP">{client.ip}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </AssignMessage>
Un altro esempio è che, quando viene eseguito un criterio per le quote, diverse variabili di flusso vengono compilate con valori correlati ai criteri. Una di queste variabili è chiamata ratelimit.my-quota-policy.used.count
(dove my-quota-policy
è il nome del criterio di quota che ti interessa).
In un secondo momento, potresti eseguire un flusso condizionale
che dica "se il conteggio della quota corrente è inferiore al 50% del massimo e siamo tra le 9:00 e le 17:00,
applica una quota diversa". Questa condizione potrebbe dipendere dal valore del conteggio della quota corrente
e da una variabile di flusso denominata system.time
, che è una delle variabili Apigee predefinite.
Variabili di flusso nei flussi condizionali
I flussi condizionali valutano le variabili di flusso e consentono ai proxy di comportarsi in modo dinamico. Le condizioni vengono in genere utilizzate per modificare il comportamento di flussi, passaggi e regole di routing.
Ecco un flusso condizionale che valuta
il valore della variabile request.verb
in un passaggio del flusso proxy. In questo caso, se il verbo della richiesta è POST, viene eseguita la norma VerifyAPIKey. Questo è uno schema comune utilizzato nelle configurazioni proxy API.
<PreFlow name="PreFlow"> <Request> <Step> <Condition>request.verb equals "POST"</Condition> <Name>VerifyApiKey</Name> </Step> </Request> </PreFlow>
Ora potresti chiederti da dove provengono variabili come request.verb
,
client.ip
e system.time
. Quando vengono attivati e completati con un valore? Per capire quando vengono create le variabili e quando sono disponibili, consulta Visualizzare il flusso di un proxy API.
Variabili di flusso nel codice JavaScript chiamate con il criterio JavaScript
Con il criterio JavaScript, puoi eseguire codice JavaScript nel contesto di un flusso proxy API. Il codice JavaScript eseguito da questo criterio utilizza il modello di oggetti JavaScript di Apigee, che fornisce al codice personalizzato l'accesso agli oggetti di richiesta, risposta e contesto associati al flusso del proxy API in cui viene eseguito il codice. Ad esempio, questo codice imposta un'intestazione di risposta con il valore ottenuto dalla variabile del flusso target.name.
context.setVariable("response.header.X-Apigee-Target", context.getVariable("target.name"));
Questa tecnica di utilizzo di JavaScript per leggere e impostare le variabili è simile a quella che puoi svolgere con il criterio Assegna messaggio (mostrato in precedenza). È solo un altro modo per eseguire le stesse operazioni su Apigee. La cosa importante da ricordare è che il codice JavaScript eseguito dal criterio JavaScript ha accesso a tutte le variabili di flusso esistenti e in ambito all'interno del flusso dell'proxy API.
Visualizzazione del flusso di un proxy API
Per comprendere l'ambito delle variabili di flusso, è importante capire o visualizzare il modo in cui i messaggi vengono inviati tramite un proxy API. Un proxy API è costituito da una serie di passaggi di elaborazione dei messaggi organizzati come un flusso. In ogni passaggio di un flusso proxy, il proxy valuta le informazioni a sua disposizione e decide cosa fare dopo. Durante il percorso, il proxy può eseguire codice di criteri o eseguire ramificazioni condizionali.
La figura seguente illustra questa sequenza di flussi. Tieni presente che i flussi sono composti da quattro segmenti principali: richiesta ProxyEndpoint, richiesta TargetEndpoint, risposta TargetEndpoint e risposta ProxyEndpoint.
Tieni presente questa struttura di flusso mentre inizieremo a esplorare le variabili di flusso nel resto di questo argomento.
Come l'ambito delle variabili è correlato al flusso del proxy
Non appena riesci a visualizzare il flusso dei messaggi attraverso un proxy, come descritto in precedenza, puoi iniziare a comprendere l'ambito delle variabili. Per ambito si intende il punto nel ciclo di vita del flusso proxy in cui viene eseguita l'inizializzazione di una variabile.
Ad esempio, se hai un criterio collegato al segmento di richiesta ProxyEndpoint, questo criterio non potrà accedere alle variabili con ambito nel segmento di richiesta TargetEndpoint. Il motivo è che il segmento di richiesta TargetEndpoint del flusso non è ancora stato eseguito, quindi il proxy API non ha avuto la possibilità di compilare le variabili in questo ambito.
La tabella seguente elenca l'insieme completo di ambiti delle variabili e indica quando diventano disponibili nel flusso del proxy.
Ambito della variabile | Dove vengono completate queste variabili |
---|---|
richiesta proxy | Il segmento di richiesta ProxyEndpoint |
richiesta target | Il segmento di richiesta TargetEndpoint |
risposta target | Il segmento di risposta TargetEndpoint |
risposta proxy | Il segmento di risposta ProxyEndpoint |
sempre disponibili | Non appena il proxy riceve una richiesta. Queste variabili sono disponibili durante tutto il ciclo di vita del flusso proxy. |
Ad esempio, esiste una variabile Apigee integrata denominata client.ip
. Questa
variabile ha
ambito richiesta proxy. Viene compilato automaticamente con l'indirizzo IP del client che ha chiamato il proxy. Viene compilato quando una richiesta raggiunge per la prima volta ProxyEndpoint e rimane disponibile per tutto il ciclo di vita del flusso del proxy.
Esiste un'altra variabile integrata chiamata target.url
. L'ambito di questa variabile è
richiesta target. Viene compilato nel segmento della richiesta TargetEndpoint con l'URL della richiesta inviato al target di backend. Se provi ad accedere a target.url
nel segmento della richiesta ProxyEndpoint, riceverai un valore NULL
. Se provi a impostare questa variabile prima che rientri nell'ambito, il proxy non fa nulla, non genera un errore e non imposta la variabile.
Ecco un semplice esempio che mostra come considerare l'ambito delle variabili. Supponiamo che tu voglia copiare l'intero contenuto di un oggetto della richiesta (intestazioni, parametri, corpo) e assegnarlo al payload della risposta da inviare nuovamente all'app chiamante. Per questa attività puoi utilizzare il Rispetta le norme di assegnazione del messaggio. Il codice delle norme ha il seguente aspetto:
<AssignMessage name="CopyRequestToResponse"> <AssignTo type="response" createNew="false">response</AssignTo> <Copy source="request"/> </AssignMessage>
Questo criterio copia semplicemente l'oggetto request
e lo assegna all'oggetto response
. Ma dove deve essere posizionata questa norma nel flusso del proxy? La risposta è che deve essere posizionata nella risposta TargetEndpoint, perché l'ambito della variabile di risposta è risposta target.
Fare riferimento alle variabili di flusso
Tutte le variabili predefinite in Apigee seguono una convenzione di denominazione con la notazione a punti. Questa convenzione
semplifica la determinazione dello scopo della variabile. Ad esempio, system.time.hour
e request.content
.
Apigee riserva vari prefissi per organizzare in modo appropriato le variabili pertinenti. Questi prefìsi includono:
request
response
system
target
Per fare riferimento a una variabile in un criterio, racchiudila tra parentesi graffe. Ad esempio,
la seguente policy AssignMessage prende il valore della variabile client.ip
e lo inserisce in un'intestazione della richiesta denominata Client-IP
.
<AssignMessage name="set-ip-in-header"> <AssignTo createNew="false" transport="http" type="request">request</AssignTo> <Set> <Headers> <Header name="Client-IP">{client.ip}</Header> </Headers> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </AssignMessage>
Nei flussi condizionali, le parentesi graffe non sono necessarie. La seguente condizione di esempio
valuta la variabile request.header.accept
:
<Step> <Condition>request.header.accept = "application/json"</Condition> <Name>XMLToJSON</Name> </Step>
Puoi anche fare riferimento alle variabili di flusso nel codice JavaScript e Java. Per ulteriori informazioni, vedi:
Tipo di dati delle variabili di flusso
Ogni proprietà di una variabile di flusso ha un tipo di dati ben definito, ad esempio Stringa, Long, Intero, Booleano o Raccolta. Puoi trovare i tipi di dati elencati nel riferimento alle variabili di flusso. Per le variabili create da un criterio, consulta l'argomento di riferimento specifico del criterio per informazioni sul tipo di dati.
Le variabili create manualmente assumono il tipo specificato al momento della creazione e dipendono dai tipi di valori consentiti.
Utilizzare le variabili di flusso nei criteri
Molti criteri creano variabili di flusso durante la normale esecuzione. Il riferimento alle norme descrive tutte queste variabili specifiche per le norme.
Quando utilizzi proxy e criteri, consulta obbligatoriamente il riferimento ai criteri per scoprire quali variabili vengono create e a cosa servono. Ad esempio, il criterio di quota crea un insieme di variabili che contengono informazioni su conteggi e limiti di quota, data di scadenza e così via.
Alcune variabili dei criteri sono utili per il debug. Puoi utilizzare lo strumento di debug, ad esempio, per vedere quali variabili sono state impostate in una determinata istanza in un flusso proxy.
Il criterio ExtractVariables ti consente di compilare le variabili personalizzate con i dati estratti dai messaggi. Puoi estrarre parametri di query, intestazioni e altri dati. Ad esempio, puoi analizzare i messaggi di richiesta e risposta utilizzando pattern per estrarre dati specifici dai messaggi.
Nell'esempio seguente, il criterio ExtractVariables analizza un messaggio di risposta e memorizza
dati specifici estratti dalla risposta. Il criterio crea due variabili personalizzate, geocoderesponse.latitude
e geocoderesponse.longitude
, e li assegna ai valori.
<ExtractVariables name="ParseGeocodingResponse"> <Source>response</Source> <VariablePrefix>geocoderesponse</VariablePrefix> <JSONPayload> <Variable name="latitude"> <JSONPath>$.results[0].geometry.location.lat</JSONPath> </Variable> <Variable name="longitude"> <JSONPath>$.results[0].geometry.location.lng</JSONPath> </Variable> </JSONPayload> </ExtractVariables>
Tieni presente che molti criteri creano automaticamente variabili. Puoi accedere a queste variabili nel contesto del flusso proxy e sono documentate nella sezione di riferimento delle norme relativa a ogni singolo argomento delle norme.
Utilizzare le variabili di flusso nel codice JavaScript
Puoi accedere e impostare le variabili direttamente nel codice JavaScript in esecuzione nel contesto di un proxy API. Tramite il modello oggetto JavaScript di Apigee, il codice JavaScript in esecuzione su Apigee ha accesso diretto alle variabili del flusso del proxy.
Per accedere alle variabili nel codice JavaScript, chiama i metodi getter/setter su uno di questi oggetti:
context
proxyRequest
proxyResponse
targetRequest
targetResponse
Come puoi vedere, questi riferimenti agli oggetti mappano i segmenti familiari del modello di flusso del proxy come spiegato in precedenza in Visualizzazione del flusso di un proxy API.
L'oggetto context
corrisponde alle variabili disponibili a livello globale, ad esempio le variabili di sistema. Ad esempio, puoi chiamare getVariable()
sull'oggetto context
per ottenere l'anno corrente:
var year = context.getVariable('system.time.year');
Analogamente, puoi chiamare setVariable()
per impostare il valore di una variabile personalizzata o di qualsiasi variabile predefinita e modificabile. Qui creiamo una variabile personalizzata denominata
organization.name.myorg
e le assegniamo un valore.
var org = context.setVariable('organization.name.myorg', value);
Poiché questa variabile viene creata con l'oggetto context
, sarà disponibile per tutti i segmenti di flusso (in sostanza, è come creare una variabile globale).
Puoi anche ottenere o impostare le variabili del flusso del proxy nel codice Java che esegui con il criterio JavaCallout.
Che cosa devi ricordare
Di seguito sono riportati alcuni aspetti importanti da ricordare sulle variabili di flusso:
- Alcune variabili out-of-the-box vengono create e compilate automaticamente dal proxy stesso. Queste sono documentate nella sezione Riferimento alle variabili di flusso.
- Puoi creare variabili personalizzate disponibili per l'utilizzo nel flusso proxy. È possibile creare variabili utilizzando criteri come il criterio Assegna messaggio e il criterio JavaScript.
- Le variabili hanno un ambito. Ad esempio, alcune variabili vengono completate automaticamente quando il primo proxy riceve una richiesta da un'app. Altre variabili vengono completate nel segmento del flusso di risposta del proxy. Queste variabili di risposta rimangono non definite fino all'esecuzione del segmento di risposta.
- Quando vengono eseguiti, i criteri possono creare e compilare variabili specifiche per i criteri. La documentazione di ciascun criterio elenca tutte queste variabili specifiche del criterio pertinenti.
- I flussi condizionali in genere valutano una o più variabili. Devi conoscere le variabili se vuoi creare flussi condizionali.
- Molti criteri utilizzano le variabili come input o output. È possibile che una variabile creata da un criterio venga utilizzata in un secondo momento da un altro.
Argomenti correlati
- Tutte le variabili che vengono compilate automaticamente in un proxy API sono elencate nel riferimento alle variabili di flusso. Il riferimento elenca anche il tipo e l'ambito di ogni variabile.
- Se vuoi sapere quali variabili vengono compilate da una specifica norma, consulta l'argomento di riferimento per la norma. Ad esempio, consulta Voci di flusso nel riferimento ai criteri di quota.