Stai visualizzando la documentazione di Apigee Edge.
Vai alla
documentazione di Apigee X. informazioni
Utilizza il criterio FlowCallout per richiamare un flusso condiviso da un proxy API o da un altro flusso condiviso.
In un flusso condiviso, crei una sequenza di passaggi che puoi riutilizzare in fase di esecuzione da più posizioni. Questi passaggi sono implementati come criteri, come all'interno di un proxy API. Il criterio FlowCallout ti consente di richiamare il flusso condiviso da proxy API e 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 la verifica delle chiavi API, la convalida del token OAuth e la protezione delle espressioni regolari. Questo flusso condiviso rappresenta la tua convenzione su un modo per controllare le richieste in entrata. Con i criteri FlowCallout, puoi richiamare quel flusso condiviso da più proxy API.
- Puoi chiamare un flusso condiviso da un altro implementando una norma FlowCallout da un flusso condiviso.
Samples
Verifica la chiave API nel flusso condiviso
In questo esempio viene utilizzato un flusso condiviso per eseguire attività comuni relative alla sicurezza. Qui il flusso condiviso convalida una chiave API. I proxy API e altri flussi condivisi possono utilizzare il criterio FlowCallout per effettuare chiamate in questo flusso condiviso.
La seguente definizione del flusso condiviso include un criterio Verify-API-Key
che viene eseguito
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
all'interno del flusso condiviso precedente recupera il valore della chiave 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, utilizzato in un proxy API, chiama il flusso condiviso precedente per verificare la chiave API. Il bundle di flusso condiviso verify-apikey-shared
(non mostrato qui) configura il flusso condiviso nel modo in cui 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 passare parametri da un criterio FlowCallout a un flusso condiviso. In questo caso, un criterio FlowCallout richiama un flusso condiviso progettato per eseguire le funzioni di gestione delle stringhe più comuni. Il flusso condiviso include JavaScript che concatena il suo input, lo riduce in minuscolo o esegue entrambe le operazioni. Il criterio FlowCallout definisce i parametri che specificano l'input, l'output della stringa e cosa fare con l'input.
Il criterio FlowCallout
String-Handler
chiama il flusso condiviso, trasmettendo i parametri che specificano la variabile in cui archiviare l'output del flusso condiviso, quale operazione di flusso condiviso utilizzare e quale input utilizzare (in questo caso, un valore letterale stringa, ma potrebbe anche essere una variabile 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 di
default
include un criterio JavaScriptSharedStringFunctions
che viene eseguito quando il flusso condiviso viene chiamato da un criterio FlowCallout.<?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 JavaScript SharedStringFunctions.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 eseguito dal criterio JavaScript
SharedStringFunctions
. Questo script recupera i valori dalle variabili create dagli elementiParameter
del criterio FlowCallout.// 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 passa dal criterio JavaScript al flusso condiviso, quindi al 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>
Attributi <FlowCallout>
<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 | Obbligatorie |
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 |
Elemento <SharedFlowBundle>
Specifica il nome del flusso condiviso da chiamare. Il valore di questo elemento deve essere uguale al valore dell'attributo nome dell'elemento SharedFlowBundle target.
<SharedFlowBundle/>
Nell'esempio più semplice, devi fornire il nome del flusso condiviso chiamato come valore per questo
elemento. In altre parole, il valore di questo elemento deve essere uguale al valore dell'attributo name
del flusso condiviso.
<SharedFlowBundle>Shared-Flow-Name</SharedFlowBundle>
Predefinita | N/A |
Presenza |
Obbligatorio. |
Digitare | N/A |
Attributi
Nessuna.
Elemento <Parameter>
Specifica un parametro e un valore (o l'origine valore) da passare come variabile al flusso condiviso richiamato da questo criterio.
Utilizzando un parametro, puoi specificare un valore (o una variabile contenente un valore) da trasmettere al flusso condiviso richiamato dal criterio. È concettualmente simile alla specifica di un parametro in una chiamata di funzione. Come nel caso di un parametro della funzione, il valore di un parametro FlowCallout può variare in base al contesto della chiamata del flusso condiviso.
I parametri FlowCallout sono visibili solo durante l'esecuzione del flusso condiviso.
Sintassi
Puoi utilizzare questo elemento con una qualsiasi delle seguenti forme di sintassi. Tieni presente che, dove utilizzi un valore letterale, il formato del valore specificato dipenderà dal codice che lo utilizza.
<!- 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 FlowCallout di String-Handler
consente di trasmettere parametri che specificano dove
archiviare l'output del flusso condiviso e quale input utilizzare. Gli elementi Parameter
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="outputVariable">string.handler.output</Parameter> </Parameters> <SharedFlowBundle>StringHandler</SharedFlowBundle> </FlowCallout>
Predefinita | N/A |
Presenza |
Obbligatorio. |
Digitare | N/A |
Attributi
Attributo | Descrizione | Predefinito | Presenza | Tipo |
---|---|---|---|---|
nome | Il nome della variabile di runtime da creare con questo parametro. | Nessuna. | Obbligatorio. | Stringa |
rif |
La variabile contiene il valore da utilizzare durante l'esecuzione. Ometti questo attributo se stai specificando un valore letterale da utilizzare. |
Nessuna. | Campo facoltativo. | Stringa |
valore | Il valore da utilizzare nella variabile di runtime creata con questo parametro. Ometti questo attributo se stai specificando il nome di una variabile che dovrebbe essere l'origine del valore. | Nessuna. | Campo facoltativo. | Stringa |
Elemento <Parameters>
Specifica l'insieme di elementi <Parameter> da trasmettere come variabili al flusso condiviso chiamato da questo criterio.
Sintassi
<Parameters> <Parameter name="parameter-name" value='parameter-value' /> </Parameters>
Predefinita | N/A |
Presenza |
Campo facoltativo. |
Digitare | N/A |
Attributi
Nessuna.
Schemi
Variabili di flusso
Le variabili di flusso consentono il comportamento dinamico dei criteri e dei flussi in fase di runtime, in base alle intestazioni HTTP, ai contenuti dei messaggi o al contesto del flusso. Per saperne di più sulle variabili di flusso, consulta Informazioni di riferimento sulle variabili.
Variabile | Descrizione |
---|---|
|
Ambito: durante l'esecuzione del flusso condiviso Valore dell'attributo nome del flusso condiviso. |
|
Ambito: durante l'esecuzione del flusso condiviso collegato all'hook di flusso. 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 Edge quando questo criterio attiva un errore. Queste informazioni sono importanti per sapere se stai 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