Questa pagina si applica a Apigee e Apigee ibridi.
Visualizza
documentazione di Apigee Edge.
Utilizza il criterio FlowCallout
per richiamare un flusso condiviso da un proxy API o da un altro
un flusso condiviso.
In un flusso condiviso, crei una sequenza di passaggi che puoi riutilizzare in fase di esecuzione da più
luoghi. Questi passaggi sono implementati come criteri, ad esempio all'interno di un proxy API. Il criterio FlowCallout
consente di richiamare il flusso condiviso dai proxy API e da altri flussi condivisi.
Funziona come una chiamata di funzione in un linguaggio di programmazione tradizionale.
- Ad esempio, immagina di aver creato un flusso condiviso con funzionalità di sicurezza come
Verifica delle chiavi API, convalida del token OAuth e protezione tramite espressioni regolari. Questo flusso condiviso
rappresenta la convenzione relativa a un modo per controllare le richieste in entrata.
Utilizzando i criteri
FlowCallout
, puoi richiamare il flusso condiviso da più proxy API. - Puoi chiamare un flusso condiviso da un altro implementando un criterio
FlowCallout
dall'interno di un flusso condiviso.
Questo criterio è una norma estendibile e il suo utilizzo potrebbe comportare costi o di utilizzo delle applicazioni, a seconda della licenza Apigee. Per informazioni sui tipi di norme e le implicazioni per l'utilizzo, consulta Tipi di criteri.
Esempi
Verifica la chiave API nel flusso condiviso
In questo esempio, viene utilizzato un flusso condiviso per eseguire attività comuni relative alla sicurezza. In questo caso,
un flusso condiviso convalida una chiave API. I proxy API e altri flussi condivisi possono utilizzare
FlowCallout
per effettuare chiamate in questo flusso condiviso.
La seguente definizione di flusso condiviso include un criterio Verify-API-Key
che esegue
Quando il flusso condiviso viene chiamato da un criterio FlowCallout
in un proxy API.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <SharedFlow name="default"> <Step> <Name>Verify-API-Key</Name> </Step> </SharedFlow>
Il criterio VerifyAPIKey
nel flusso condiviso precedente recupera la chiave
valore e lo verifica.
<VerifyAPIKey async="false" continueOnError="false" enabled="true" name="Verify-API-Key"> <DisplayName>Verify API Key</DisplayName> <APIKey ref="request.queryparam.apikey"/> </VerifyAPIKey>
Il seguente criterio FlowCallout
, usato in un proxy API, chiama la precedente
un flusso condiviso per verificare la chiave API. Il bundle del flusso condiviso verify-apikey-shared
(non mostrato qui) configura il flusso condiviso come un bundle APIProxy configura un proxy.
<FlowCallout async="false" continueOnError="false" enabled="true" name="Auth-Flow-Callout"> <DisplayName>Auth Flow Callout</DisplayName> <SharedFlowBundle>verify-apikey-shared</SharedFlowBundle> </FlowCallout>
Passare i parametri a un flusso condiviso
Questo esempio illustra come trasferire i parametri da un criterio FlowCallout
a una
un flusso condiviso. In questo caso, un criterio FlowCallout
chiama un flusso condiviso progettato per eseguire
per la gestione delle stringhe. Il flusso condiviso include JavaScript che concatena il suo input,
il suo input in minuscolo, o entrambi. Il criterio FlowCallout
definisce i parametri che specificano
l'input della stringa, l'output e cosa fare con l'input.
Il criterio
String-Handler
FlowCallout
chiama il flusso condiviso, passando i parametri che specificano la variabile in cui memorizzare l'output del flusso condiviso, il flusso dell'operazione e quale input usare (in questo caso un valore letterale stringa, ma potrebbe anche essere di flusso). Gli elementiParameter
specificano i nomi e i valori delle variabili per creare il runtime. Il flusso condiviso può recuperare queste variabili per utilizzarle nel proprio codice.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <FlowCallout async="false" continueOnError="false" enabled="true" name="String-Handler"> <DisplayName>String Handler</DisplayName> <Parameters> <Parameter name="input">Gladys Kravitz</Parameter> <Parameter name="operations">concatenate tolowercase</Parameter> <Parameter name="outputVariable">string.handler.output</Parameter> </Parameters> <SharedFlowBundle>StringHandler</SharedFlowBundle> </FlowCallout>
Il seguente flusso condiviso
default
include unSharedStringFunctions
criterio JavaScript che viene eseguito quando il flusso condiviso viene chiamato da un criterioFlowCallout
.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <SharedFlow name="default"> <Step> <Name>SharedStringFunctions</Name> </Step> </SharedFlow>
Nel flusso condiviso, il seguente criterio JavaScript
SharedStringFunctions
specifica il file JavaScriptSharedStringFunctions.js
con il codice da eseguire.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="SharedStringFunctions"> <DisplayName>SharedStringFunctions</DisplayName> <Properties/> <ResourceURL>jsc://SharedStringFunctions.js</ResourceURL> </Javascript>
Il seguente codice JavaScript,
SharedStringFunctions.js
, viene eseguitoSharedStringFunctions
criterio JavaScript. Questo script recupera i valori da variabili create dagli elementiFlowCallout
del criterioParameter
.// Input value from the calling API proxy. var handledString = context.getVariable("input"); // Variable to use for output from this script. var outputVariable = context.getVariable("outputVariable"); // A space-separated list of things to do to the input string. // Convert to lower case to handle unintentional capitals in configuration. var operation = context.getVariable("operations").toLowerCase(); // If "lowercase" was given as an operation, convert the input to lowercase. if (operation.includes("tolowercase")) { handledString = handledString.toLowerCase(); } // If "concatenate" was given as an operation, concatenate the input. if (operation.includes("concatenate")) { handledString = handledString.replace(/\s+/g, ''); } // Assign the resulting string to the output variable specified by // the calling API proxy. context.setVariable(outputVariable, handledString);
- L'esecuzione torna dal criterio JavaScript al flusso condiviso, quindi
Criterio
FlowCallout
nel proxy API di origine.
Riferimento elemento
Di seguito sono riportati gli elementi e gli attributi che puoi configurare su questo criterio:
<FlowCallout async="false" continueOnError="false" enabled="true" name="Flow-Callout-1"> <DisplayName>Custom label used in UI</DisplayName> <SharedFlowBundle>thereferencedsharedflowbundle</SharedFlowBundle> </FlowCallout>
<FlowCallout> attributi
<FlowCallout async="false" continueOnError="false" enabled="true" name="Flow-Callout-1">
La tabella seguente descrive gli attributi comuni a tutti gli elementi principali dei criteri:
Attributo | Descrizione | Predefinito | Presenza |
---|---|---|---|
name |
Il nome interno della norma. Il valore dell'attributo Facoltativamente, utilizza l'elemento |
N/A | Obbligatorio |
continueOnError |
Impostalo su Imposta su |
false | Facoltativo |
enabled |
Imposta il criterio su Impostala su |
true | Facoltativo |
async |
Questo attributo è obsoleto. |
false | Deprecata |
Elemento <DisplayName>
Utilizzalo in aggiunta all'attributo name
per etichettare il criterio nell'editor proxy dell'interfaccia utente di gestione con un nome diverso in linguaggio naturale.
<DisplayName>Policy Display Name</DisplayName>
Predefinito |
N/A Se ometti questo elemento, viene utilizzato il valore dell'attributo |
---|---|
Presenza | Facoltativo |
Tipo | Stringa |
<SharedFlowBundle> elemento
Specifica il nome del flusso condiviso da chiamare. Il valore di questo elemento deve corrispondere al valore
valore dell'attributo nome dell'elemento <SharedFlowBundle>
target.
<SharedFlowBundle/>
Nell'esempio più semplice, assegni come valore il nome del flusso condiviso
. Ciò significa che il valore di questo elemento deve essere uguale a name
del flusso condiviso
valore dell'attributo.
<SharedFlowBundle>Shared-Flow-Name</SharedFlowBundle>
Predefinito | N/D |
---|---|
Presenza | Obbligatorio |
Tipo | N/D |
Attributi
Nessuno.
<Parameter> elemento
Specifica un parametro e un valore (o un'origine valore) da trasmettere come variabile al flusso condiviso chiamato da questo .
Utilizzando un parametro, puoi specificare un valore (o una variabile contenente un valore) che deve essere
passate al flusso condiviso chiamato dal criterio. Questo è concettualmente simile alla specifica di una
in una chiamata di funzione. Come per il parametro di una funzione, il valore di un parametro FlowCallout
può
variano in base al contesto della chiamata a un flusso condiviso.
I parametri FlowCallout
sono visibili solo durante l'esecuzione del flusso condiviso.
Sintassi
Puoi utilizzare questo elemento con uno qualsiasi dei seguenti formati di sintassi. Tieni presente che un valore letterale, il formato del valore specificato dipenderà dal codice ne consuma.
<!- A literal value in an attribute. --/> <Parameter name="parameter-name" value='parameter-value' /> <!- A reference to a variable in an attribute. --/> <Parameter name="parameter-name" ref='source-variable-name' /> <!- A literal value in the element content. --/> <Parameter name="parameter-name">parameter-value</Parameter> <!- An reference to an attribute in the element content. --/> <Parameter name="parameter-name">{source-variable-name}</Parameter>
Esempio
Questo criterio String-Handler
FlowCallout
trasmette i parametri che specificano dove
per archiviare l'output del flusso condiviso e l'input da utilizzare. Gli elementi Parameter
e specificare i nomi e i valori delle variabili
per creare il runtime. Il flusso condiviso può recuperare
a queste variabili per usarle nel proprio codice.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <FlowCallout async="false" continueOnError="false" enabled="true" name="String-Handler"> <DisplayName>String Handler</DisplayName> <Parameters> <Parameter name="input">Gladys Kravitz</Parameter> <Parameter name="outputVariable">string.handler.output</Parameter> </Parameters> <SharedFlowBundle>StringHandler</SharedFlowBundle> </FlowCallout>
Predefinito | N/D |
---|---|
Presenza | Obbligatorio |
Tipo | N/D |
Attributi
Attributo | Descrizione | Predefinito | Presenza | Tipo |
---|---|---|---|---|
name |
Il nome della variabile di runtime da creare con questo parametro. | Nessuno | Obbligatorio | Stringa |
ref |
La variabile che contiene il valore da utilizzare in fase di esecuzione. Ometti questo attributo se stai che specifica un valore letterale da utilizzare. |
Nessuno | Facoltativo | Stringa |
value |
Il valore da utilizzare nella variabile di runtime creata con questo parametro. Ometti questo attributo se specifichi il nome di una variabile che dovrebbe essere l'origine valore. | Nessuno | Facoltativo | Stringa |
<Parameters> elemento
Specifica l'insieme di elementi <Parameter> da passare come nel flusso condiviso richiamato da questo criterio.
Sintassi
<Parameters> <Parameter name="parameter-name" value='parameter-value' /> </Parameters>
Predefinito | N/D |
---|---|
Presenza | Facoltativo |
Tipo | N/D |
Attributi
Nessuno.
Schemi
Variabili di flusso
Le variabili di flusso consentono il comportamento dinamico di criteri e flussi in fase di runtime, in base a HTTP intestazioni, contenuti dei messaggi o contesto del flusso. Per ulteriori informazioni sulle variabili di flusso, consulta Riferimento per le variabili.
Variabile | Descrizione |
---|---|
|
Ambito: durante l'esecuzione del flusso condiviso Il valore dell'attributo nome del flusso condiviso. |
|
Ambito: durante l'esecuzione del flusso condiviso collegato al flusso
hook. Il nome dell'hook di flusso. |
Messaggi di errore
Questa sezione descrive i codici e i messaggi di errore restituiti e le variabili di errore impostate da Apigee quando questo criterio attiva un errore. Queste informazioni sono importanti per sapere se si stanno sviluppando regole di errore per la gestione degli errori. Per scoprire di più, consulta gli articoli Cosa devi sapere sugli errori relativi alle norme e Gestione degli errori.
Errori di runtime
Questi errori possono verificarsi quando il criterio viene eseguito.
Codice di errore | Stato HTTP | Causa | Correggi |
---|---|---|---|
flow.SharedFlowNotFound |
500 |
Il flusso condiviso non esiste oppure il flusso condiviso esiste, ma non è stato eseguito il deployment. | build |
Errori di deployment
N/A
Argomenti correlati
- Creazione di flussi condivisi: Flussi condivisi riutilizzabili
- Esecuzione di flussi condivisi su più proxy: Collegamento di un flusso condiviso utilizzando un hook di flusso