Norme di FlowCallout

Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione Documentazione di Apigee X.
Informazioni

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. Norme di 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 di FlowCallout, puoi richiamare quel flusso condiviso da più proxy API.
  • Puoi chiamare un flusso condiviso da un altro implementando un criterio FlowCallout flusso di lavoro.
di Gemini Advanced.

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 il valore chiave e la 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 a e 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. Qui, un criterio FlowCallout richiama 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.

  1. Il criterio di FlowCallout String-Handler 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 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="operations">concatenate tolowercase</Parameter>
        <Parameter name="outputVariable">string.handler.output</Parameter>
      </Parameters>
      <SharedFlowBundle>StringHandler</SharedFlowBundle>
    </FlowCallout>
    
  2. Il seguente flusso condiviso default include un criterio JavaScript SharedStringFunctions 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>
  3. 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>
  4. Il seguente codice JavaScript, SharedStringFunctions.js, viene eseguito dal SharedStringFunctions criterio JavaScript. Questo script recupera i valori da variabili create dagli elementi Parameter 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);
  5. 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>

&lt;FlowCallout&gt; attributi

<FlowCallout async="false" continueOnError="false" enabled="true" name="Flow-Callout-1">

La tabella seguente descrive gli attributi comuni a tutti gli elementi principali del criterio:

Attributo Descrizione Predefinito Presenza
name

Il nome interno del criterio. Il valore dell'attributo name può Deve contenere lettere, numeri, spazi, trattini, trattini bassi e punti. Questo valore non può superare i 255 caratteri.

Se vuoi, puoi utilizzare l'elemento <DisplayName> per etichettare il criterio in l'editor proxy della UI di gestione con un nome diverso in linguaggio naturale.

N/D Obbligatorio
continueOnError

Imposta il valore su false per restituire un errore quando un criterio non viene eseguito. Si tratta di un comportamento previsto per la maggior parte dei criteri.

Imposta su true per fare in modo che l'esecuzione del flusso continui anche dopo un criterio non riesce.

falso Facoltativo
enabled

Imposta il valore su true per applicare il criterio.

Imposta false per disattivare il criterio. Il criterio non verrà applicata anche se rimane collegata a un flusso.

true Facoltativo
async

Questo attributo è obsoleto.

falso Deprecato

&lt;DisplayName&gt; elemento

Da utilizzare in aggiunta all'attributo name per etichettare il criterio in editor proxy della UI di gestione con un nome diverso e in linguaggio naturale.

<DisplayName>Policy Display Name</DisplayName>
Predefinito

N/D

Se ometti questo elemento, il valore dell'attributo name del criterio è in uso.

Presenza Facoltativo
Tipo Stringa

&lt;SharedFlowBundle&gt; 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 di destinazione.

<SharedFlowBundle/>

Nell'esempio più semplice, assegni il nome del flusso condiviso chiamato come valore . Ciò significa che il valore di questo elemento deve essere uguale a name del flusso condiviso valore dell'attributo.

<SharedFlowBundle>Shared-Flow-Name</SharedFlowBundle>
 
Predefinita N/D
Presenza

Obbligatorio.

Tipo N/D

Attributi

Nessuno.

&lt;Parameter&gt; elemento

Specifica un parametro e un valore (o un'origine valore) da trasferire 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 funzione, il valore del 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 di trasferimento dei parametri FlowCallout String-Handler consente di specificare 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>
Predefinita N/D
Presenza

Obbligatorio.

Tipo N/D

Attributi

Attributo Descrizione Predefinito Presenza Tipo
nome Il nome della variabile di runtime da creare con questo parametro. Nessuno. Obbligatorio. Stringa
riferimento

La variabile contiene il valore da utilizzare in fase di esecuzione. Ometti questo attributo se stai che specifica un valore letterale da utilizzare.

Nessuno. (Facoltativo) Stringa
valore 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

&lt;Parameters&gt; elemento

Specifica l'insieme di elementi &lt;Parameter&gt; da passare come variabili nel flusso condiviso chiamato da questo .

Sintassi

<Parameters>
  <Parameter name="parameter-name" value='parameter-value' />
</Parameters>
Predefinita 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

apigee.edge.sharedflow.name

Ambito: durante l'esecuzione del flusso condiviso
Tipo: stringa
Autorizzazione: lettura

Il valore dell'attributo nome del flusso condiviso.

apigee.edge.flowhook.name

Ambito: durante l'esecuzione del flusso condiviso collegato al flusso hook.
Tipo: stringa
Autorizzazione: lettura

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.

Errori di deployment

N/A

Argomenti correlati