Riferimento per la configurazione dei flussi

Questa pagina si applica ad Apigee e Apigee hybrid.

Visualizza la documentazione di Apigee Edge.

Questa sezione fornisce informazioni di riferimento sugli elementi XML che utilizzi per definire i flussi del proxy API.

Gerarchia e sintassi

I seguenti esempi mostrano la gerarchia degli elementi e la sintassi degli elementi di configurazione del flusso:

Gerarchia degli elementi

L'esempio seguente mostra la gerarchia degli elementi di configurazione del flusso all'interno degli elementi <ProxyEndpoint> e <TargetEndpoint>:

<ProxyEndpoint | TargetEndpoint>
    <PreFlow>
          <Request>
                <Step>
                    <Condition>
                    <Name>
          <Response>
                <Step>
                    <Condition>
                    <Name>
          <Description>
    <Flows>
          <Flow>
                <Description>
                <Condition>
                <Request>
                      <Step>
                          
                <Response>
                      <Step>
                          
          <Description>
    <PostFlow>
          <Request>
                <Step>
                    
          <Response>
                <Step>
                    
          <Description>
    <PostClientFlow> (<ProxyEndpoint> only)
          <Response>
                
          <Description>

      // Additional configuration elements

</ProxyEndpoint | TargetEndpoint>

Sintassi

L'esempio seguente mostra la sintassi per gli elementi di configurazione del flusso. Ognuno di questi elementi è descritto dettagliatamente nelle sezioni seguenti:

<!-- ProxyEndpoint flow configuration file -->
<ProxyEndpoint ... >
  ...
  <PreFlow name="flow_name">
    <Description>flow_description</Description>
    <Request>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Request>
    <Response>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Response>
  </PreFlow>
  <Flows name="flow_name">
    <Flow name="conditional_flow_name">
      <Description>flow_description</Description>
      <Condition>property operator "value"</Condition>
      <Request>
        <Step>
          <Condition>property operator "value"</Condition>
          <Name>policy_name</Name>
        </Step>
        ...
      </Request>
      <Response>
        <Step>
          <Condition>property operator "value"</Condition>
          <Name>policy_name</Name>
        </Step>
        ...
      </Response>
    </Flow>
  </Flows>
  <PostFlow name="flow_name">
    <Description>flow_description</Description>
    <Request>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Request>
    <Response>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Response>
  </PostFlow>
  <PostClientFlow name="flow_name">
    <Description>flow_description</Description>
    <Response>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Response>
  </PostClientFlow>
  ...
</ProxyEndpoint>

<!-- TargetEndpoint flow configuration file -->
<TargetEndpoint ... >
  ...
  <PreFlow name="flow_name">
    <Description>flow_description</Description>
    <Request>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Request>
    <Response>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Response>
  </PreFlow>
  <Flows name="flow_name">
    <Flow name="conditional_flow_name">
      <Description>flow_description</Description>
      <Condition>property operator "value"</Condition>
      <Request>
        <Step>
          <Condition>property operator "value"</Condition>
          <Name>policy_name</Name>
        </Step>
        ...
      </Request>
      <Response>
        <Step>
          <Condition>property operator "value"</Condition>
          <Name>policy_name</Name>
        </Step>
        ...
      </Response>
    </Flow>
    ...
  </Flows>
  <PostFlow name="flow_name">
    <Description>flow_description</Description>
    <Request>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Request>
    <Response>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Response>
  </PostFlow>
  ...
</TargetEndpoint>

Questi elementi vengono utilizzati per definire l'esecuzione di PreFlow, Conditional Flow, PostFlow e PostClientFlow.

<Condition>

Definisce un'istruzione che viene elaborata durante il runtime. Se l'istruzione restituisce true, viene eseguito il passaggio o il flusso associato alla condizione. Se l'istruzione restituisce false, il passaggio o il flusso viene ignorato.

Tipo Stringa
Elementi principali <Flow>
<Step>
Elementi secondari Nessun valore

Puoi applicare una condizione a un passaggio specifico o a un intero flusso, a seconda che tu lo abbia inserito nell'elemento <Flow> o <Step>:

// Condition can apply to just one step:        // Or to the flow:
<Flows>                                         <Flows>
  <Flow>                                          <Flow>
    <Step>                                          <Condition>
      <Condition>                                   <Step>
      <Name>                                          <Name>
      ...                                             ...
    ...                                             ...
  ...                                             ...
</Flows>                                        </Flows>

Se una condizione all'interno di un oggetto <Step> ha valore true, Apigee esegue quel passaggio. Se la condizione restituisce false, Apigee ignora il passaggio.

Se una condizione all'interno di un oggetto <Flow> ha valore true, Apigee elabora tutti i passaggi del flusso. Se la condizione restituisce false, Apigee ignora l'intero flusso.

Sintassi

L'elemento <Condition> utilizza la seguente sintassi:

<Condition>property operator "value"</Condition>

Dove:

property
La proprietà della variabile di flusso che vuoi utilizzare nella tua condizione. Ad esempio, la variabile di flusso request ha proprietà denominate path e content. Per utilizzarli in una condizione, specifica flow_variable[punto]property_name:
request.path
request.content

Per un elenco completo delle variabili di flusso e delle relative proprietà, consulta Riferimento alle variabili di flusso.

operator
Un costrutto che definisce il modo in cui viene valutata la condizione. Gli operatori comuni includono:
>     greater than           <=    less than or equal to
<     less than              >=    greater than or equal to
=     equals                 &&    and
!=    not equals             ||    or

~~    JavaRegex
~     Matches
/~    MatchesPath

Per un elenco completo, consulta la sezione Operatori nel riferimento alle condizioni.

"value"
Il valore in base al quale viene valutata la proprietà della variabile di flusso. In genere si tratta di un tipo di base, ad esempio un numero intero o una stringa. Ad esempio, 200 o /cat. Il valore può includere caratteri jolly come asterischi e altri caratteri per la corrispondenza di pattern, come descritto in Corrispondenza di pattern con condizionali.

Esempio 1

L'esempio seguente controlla se la proprietà verb della variabile di flusso request è GET:

<!-- api-platform/reference/examples/flow-segments/condition-1.xml -->
<ProxyEndpoint name="default">
  <PreFlow name="my-preFlows">
    <Description>My first PreFlow</Description>
    <Request>
      <Step>
        <Condition>request.verb = "GET"</Condition>
        <Name>Log-Request-OK</Name>
      </Step>
    </Request>
  </PreFlow>
  ...
</ProxyEndpoint>

Se la richiesta è GET, in questo esempio viene eseguito il criterio Log-Request-OK.

Esempio 2

L'esempio seguente verifica il codice di risposta:

<!-- api-platform/reference/examples/flow-segments/condition-2.xml -->
<ProxyEndpoint name="default">
  <PreFlow name="my-preFlows">
    <Description>My first PreFlow</Description>
    <Response>
      <Step>
        <Condition>response.status.code LesserThanOrEquals 300</Condition>
        <Name>Log-Response-OK</Name>
      </Step>
      <Step>
        <Condition>response.status.code GreaterThan 300</Condition>
        <Name>Log-Response-NOT-OK</Name>
      </Step>
    </Response>
  </PreFlow>
  ...
</ProxyEndpoint>

A seconda del valore del codice, viene eseguito un criterio diverso.

Attributi

L'elemento <Condition> non ha attributi.

Elementi secondari

L'elemento <Condition> non ha elementi secondari.

<Description>

Descrive il flusso in termini leggibili. Utilizza questo elemento per fornire informazioni sul flusso a te o ad altri sviluppatori. La descrizione non è visibile esternamente.

Tipo Stringa
Elementi principali <Flow>
<PreFlow>
<PostFlow>
Elementi secondari Nessun valore

Sintassi

L'elemento <Description> utilizza la seguente sintassi:

<Description>flow_description</Description>

Esempio

L'esempio seguente mostra un elemento <Description> che specifica lo scopo di un flusso:

<!-- api-platform/reference/examples/flow-segments/description-1.xml -->
<ProxyEndpoint name="default">
  <Flows name="my-conditional-flows">
    <Flow name="reports">
      <Request>
        <Description>Based on the path suffix, determine which flow to use</Description>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/reports"</Condition>
          <Name>XML-to-JSON-1</Name>
        </Step>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/forecasts"</Condition>
          <Name>XML-to-JSON-1</Name>
        </Step>
      </Request>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

Attributi

L'elemento <Description> non ha attributi.

Elementi secondari

L'elemento <Description> non ha elementi secondari.

<Flow>

Definisce un set personalizzato di passaggi eseguiti da Apigee.

Tipo Oggetto complesso
Elementi principali <Flows>
Elementi secondari <Condition>
<Description>
<Request>
<Response>

Facoltativamente, puoi specificare un <Condition> su un <Flow>. In questo caso, Apigee esegue i passaggi nel flusso solo se la condizione è true. In caso contrario, Apigee salta l'intero flusso.

Un elemento <Flows> può contenere più elementi <Flow>, ciascuno con la propria condizione e i propri passaggi. Quando sono presenti più elementi <Flow>, Apigee esegue solo il primo in cui non è presente alcuna condizione o la condizione restituisce true.

Puoi definire un flusso predefinito che venga sempre eseguito (se nessuno degli altri flussi condizionali lo fa). A seconda di come è configurato il proxy API, questo può essere uno strumento utile per la protezione dagli attacchi dannosi.

Sintassi

L'elemento <Flow> utilizza la seguente sintassi:

<Flow name="conditional_flow_name">
  <Description>flow_description</Description>
  <Condition>property operator "value"</Condition>
  <Request>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Request>
  <Response>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Response>
</Flow>

Tutti gli elementi secondari di <Flow> sono facoltativi.

Esempio 1

L'esempio seguente mostra un <Flow> semplice che esegue sempre il criterio "Log-Message-OK":

<!-- api-platform/reference/examples/flow-segments/flow-1.xml -->
<ProxyEndpoint name="default">
  <Flows name="my-flow">
    <Flow>
      <Request>
        <Step>
          <Name>Log-Message-OK</Name>
        </Step>
      </Request>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

Esempio 2

L'esempio seguente mostra un oggetto <Flow> con più passaggi, ciascuno con la propria condizione:

<!-- api-platform/reference/examples/flow-segments/flow-2.xml -->
<ProxyEndpoint name="default">
  <Flows name="my-conditional-flows">
    <Flow name="reports">
      <Request>
        <Description>Based on the path suffix, determine which flow to use</Description>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/reports"</Condition>
          <Name>XML-to-JSON-1</Name>
        </Step>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/forecasts"</Condition>
          <Name>Verify-Auth-1</Name>
        </Step>
      </Request>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

Esempio 3

L'esempio seguente mostra più flussi in un flusso condizionale:

<!-- api-platform/reference/examples/flow-segments/flows-2.xml -->
<ProxyEndpoint name="default">
  <Flows>
    <Flow name="my-flow-1">
      <Response>
        <Step>
          <Condition>response.status.code = 200</Condition>
          <Name>Assign-Message-1</Name>
        </Step>
      </Response>
    </Flow>
    <Flow name="my-flow-2">
      <Response>
        <Step>
          <Condition>response.status.code >= 400</Condition>
          <Name>Assign-Message-2</Name>
        </Step>
      </Response>
    </Flow>
    <Flow name="my-flow-3">
      <Response>
        <Step>
          <Condition>response.status.code >= 300</Condition>
          <Name>Assign-Message-3</Name>
        </Step>
      </Response>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

Apigee esegue solo un flusso in un segmento; esegue il primo flusso che non ha una condizione o la cui condizione si risolve in true.

Attributi

Nella tabella seguente vengono descritti gli attributi dell'elemento <Flow>:

Attributo Tipo Descrizione
name Stringa (Obbligatorio) Un ID univoco per il flusso. Ad esempio, My-Conditional-Flow-1. Il nome non può contenere spazi o altri caratteri speciali.

Elementi secondari

Nella tabella seguente vengono descritti gli elementi secondari di <Flow>:

Elemento secondario Tipo Descrizione
<Condition> Stringa Definisce un'istruzione condizionale elaborata durante il runtime. Se l'istruzione restituisce true, vengono eseguiti il flusso (e tutti i relativi passaggi). Se l'istruzione restituisce false, il flusso (e tutti i relativi passaggi) vengono ignorati.
<Description> Stringa Fornisce una breve descrizione del flusso. Questa descrizione non è visibile esternamente.
<Request> Oggetto complesso Specifica i passaggi e le condizioni per il segmento di richiesta.
<Response> Oggetto complesso Specifica i passaggi e le condizioni per il segmento di risposta.

<Flows>

Contiene zero o più elementi <Flow>.

Tipo Oggetto complesso
Elementi principali <ProxyEndpoint>
<TargetEndpoint>
Elementi secondari <Flow>

Se sono presenti più elementi <Flow> all'interno di <Flows>, verrà eseguito un solo elemento <Flow>. Questo sarà il primo flusso che non ha un elemento <Condition> o la cui condizione diventa true.

Puoi definire un flusso predefinito che venga sempre eseguito (se nessuno degli altri flussi lo fa). A seconda di come è configurato il proxy API, questo può essere uno strumento utile per la protezione dagli attacchi dannosi.

Sintassi

L'elemento <Flows> utilizza la seguente sintassi:

<Flows name="flow_name">
  <Flow name="conditional_flow_name">
    <Description>flow_description</Description>
    <Condition>property operator "value"</Condition>
    <Request>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Request>
    <Response>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Response>
  </Flow>
</Flows>

Tutti gli elementi secondari di <Flows> sono facoltativi.

Esempio 1

L'esempio seguente mostra un elemento <Flows> semplice con un singolo elemento <Flow>:

<!-- api-platform/reference/examples/flow-segments/flows-1.xml -->
<ProxyEndpoint name="default">
  <Flows name="my-conditional-flows">
    <Flow name="reports">
      <Request>
        <Description>Based on the path suffix, determine which flow to use</Description>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/reports"</Condition>
          <Name>XML-to-JSON-1</Name>
        </Step>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/forecasts"</Condition>
          <Name>Verify-Auth-1</Name>
        </Step>
      </Request>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

Apigee esegue uno di questi criteri in base al suffisso del percorso che raccoglie dalla variabile di flusso proxy. Se il suffisso del percorso non corrisponde a nessuna delle condizioni, Apigee non esegue questo flusso.

Esempio 2

L'esempio seguente mostra più elementi <Flow> all'interno di <Flows>, ciascuno con il proprio <Condition>:

<!-- api-platform/reference/examples/flow-segments/flows-2.xml -->
<ProxyEndpoint name="default">
  <Flows>
    <Flow name="my-flow-1">
      <Response>
        <Step>
          <Condition>response.status.code = 200</Condition>
          <Name>Assign-Message-1</Name>
        </Step>
      </Response>
    </Flow>
    <Flow name="my-flow-2">
      <Response>
        <Step>
          <Condition>response.status.code >= 400</Condition>
          <Name>Assign-Message-2</Name>
        </Step>
      </Response>
    </Flow>
    <Flow name="my-flow-3">
      <Response>
        <Step>
          <Condition>response.status.code >= 300</Condition>
          <Name>Assign-Message-3</Name>
        </Step>
      </Response>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

Apigee esegue solo il primo flusso in un segmento la cui condizione è vera. Dopodiché, Apigee ignora i flussi rimanenti nel segmento.

Esempio 3

L'esempio seguente mostra un valore <Flow> "predefinito":

<!-- api-platform/reference/examples/flow-segments/flows-3.xml -->
<ProxyEndpoint name="default">
  <Flows>
    <Flow name="my-conditional-flow-1">
      <Response>
        <Step>
          <Condition>response.status.code = 200</Condition>
          <Name>Assign-Message-1</Name>
        </Step>
      </Response>
    </Flow>
    <Flow name="my-conditional-flow-2">
      <Response>
        <Step>
          <Condition>response.header.someheader = "42"</Condition>
          <Name>Assign-Message-2</Name>
        </Step>
      </Response>
    </Flow>
    <Flow name="my-default-flow">
      <Response>
        <Step>
          <Name>Assign-Message-3</Name>
        </Step>
      </Response>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

Apigee esegue solo il primo flusso in un segmento la cui condizione è vera. Se non vengono eseguiti flussi condizionali, viene eseguito il terzo flusso di questo esempio (senza condizione).

Un flusso predefinito può essere uno strumento utile per la protezione dagli attacchi dannosi.

Attributi

L'elemento <Flows> non ha attributi.

Elementi secondari

L'elemento <Flows> ha i seguenti elementi secondari:

Elemento secondario Tipo Descrizione
<Flow> Oggetto complesso Un flusso che definisce un possibile insieme di passaggi all'interno del flusso condizionale.

<Name>

Specifica l'ID del criterio da eseguire in una <Flow>.

Tipo Stringa
Elementi principali <Step>
Elementi secondari Nessun valore

Sintassi

L'elemento <Name> utilizza la seguente sintassi:

<Name>policy_name</Name>

Esempio

L'esempio seguente mostra due criteri che vengono aggiunti ai flussi in base al loro nome:

<!-- api-platform/reference/examples/flow-segments/name-1.xml -->
<ProxyEndpoint name="default">
  <Flows name="my-conditional-flows">
    <Flow name="reports">
      <Request>
        <Description>Based on the path suffix, determine which flow to use</Description>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/reports"</Condition>
          <Name>XML-to-JSON-1</Name>
        </Step>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/forecasts"</Condition>
          <Name>Verify-Auth-1</Name>
        </Step>
      </Request>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

Attributi

L'elemento <Name> non ha attributi.

Elementi secondari

L'elemento <Name> non ha elementi secondari.

<PostFlow>

Definisce i passaggi da eseguire nel PostFlow della richiesta e della risposta.

Tipo Oggetto complesso
Elementi principali <ProxyEndpoint>
<TargetEndpoint>
Elementi secondari <Description>
<Request>
<Response>

L'elemento <PostFlow> utilizza la seguente sintassi:

Sintassi

<PostFlow name="flow_name">
  <Description>flow_description</Description>
  <Request>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Request>
  <Response>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Response>
</PostFlow>

Esempio

L'esempio seguente mostra un PostFlow con passaggi per la richiesta e la risposta definiti:

<!-- api-platform/reference/examples/flow-segments/postflow-1.xml -->
<ProxyEndpoint name="default">
  <PostFlow name="my-postflows">
    <Description>My first PostFlow</Description>
    <Request>
      <Step>
        <Condition>request.verb = "GET"</Condition>
        <Name>Log-Request-OK</Name>
      </Step>
    </Request>
    <Response>
      <Step>
        <Name>Set-Response-Headers</Name>
      </Step>
    </Response>
  </PostFlow>
  ...
</ProxyEndpoint>

Attributi

Nella tabella seguente vengono descritti gli attributi dell'elemento <PostFlow>:

Attributo Tipo Descrizione
name Stringa Un ID univoco per il flusso (univoco all'interno dell'endpoint). Ad esempio, My-PostFlow-1. Il valore non può includere spazi o altri caratteri speciali.

Elementi secondari

Nella tabella seguente vengono descritti gli elementi secondari di <PostFlow>:

Elemento secondario Tipo Descrizione
<Description> Stringa Fornisce una breve descrizione del flusso.
<Request> Oggetto complesso Definisce i criteri da eseguire durante il PostFlow della richiesta.
<Response> Oggetto complesso Definisce i criteri da eseguire durante il PostFlow della risposta.

<PostClientFlow>

Definisce in ProxyEndpoint i criteri che vengono eseguiti solo dopo che è stata restituita una risposta al client. Questi criteri in genere registrano i messaggi relativi alla risposta.

Tipo Oggetto complesso
Elementi principali <ProxyEndpoint>
Elementi secondari <Description>
<Response>

Sintassi

L'elemento <PostClientFlow> utilizza la seguente sintassi:

<PostClientFlow name="flow_name">
  <Description>flow_description</Description>
  <Response>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Response>
</PostClientFlow>

Tutti gli elementi secondari di <PostClientFlow> sono facoltativi.

Esempio

Nell'esempio seguente viene mostrato un semplice PostClientFlow che esegue un singolo criterio:

<!-- api-platform/reference/examples/flow-segments/postclientflow-1.xml -->
<ProxyEndpoint name="default">
  <PostClientFlow name="my-postclientflows">
    <Description>My first PostClientFlow. Processed after the response is sent back to the client.</Description>
    <Response>
      <Step>
        <Name>Message-Logging-OK</Name>
      </Step>
    </Response>
  </PostClientFlow>
  ...
</ProxyEndpoint>

Attributi

Nella tabella seguente vengono descritti gli attributi dell'elemento <PostClientFlow>:

Attributo Tipo Descrizione
name Stringa Un ID univoco per il flusso. Il nome non può includere spazi o altri caratteri speciali. Ad esempio, My-PostClientFlow-1.

Elementi secondari

Nella tabella seguente vengono descritti gli elementi secondari di <PostClientFlow>:

Elemento secondario Tipo Descrizione
<Description> Stringa Fornisce una breve descrizione del flusso.
<Response> Oggetto complesso Definisce i criteri da eseguire durante il PostFlow della risposta.

<PreFlow>

Definisce i criteri da eseguire nel preFlow della richiesta e della risposta.

Tipo Oggetto complesso
Elementi principali <ProxyEndpoint>
<TargetEndpoint>
Elementi secondari <Description>
<Request>
<Response>

Sintassi

L'elemento <PreFlow> utilizza la seguente sintassi:

<PreFlow name="flow_name">
  <Description>flow_description</Description>
  <Request>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Request>
  <Response>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Response>
</PreFlow>

Tutti gli elementi secondari di <PreFlow> sono facoltativi.

Esempio

L'esempio seguente mostra un PreFlow con una richiesta e un flusso di risposta definiti:

<!-- api-platform/reference/examples/flow-segments/preflow-1.xml -->
<ProxyEndpoint name="default">
  <PreFlow name="my-preFlows">
    <Description>My first PreFlow</Description>
    <Request>
      <Step>
        <Condition>request.verb = "GET"</Condition>
        <Name>Log-Request-OK</Name>
      </Step>
    </Request>
    <Response>
      <Step>
        <Condition>response.status.code LesserThanOrEquals 300</Condition>
        <Name>Log-Response-OK</Name>
      </Step>
      <Step>
        <Condition>response.status.code GreaterThan 300</Condition>
        <Name>Log-Response-NOT-OK</Name>
      </Step>
    </Response>
  </PreFlow>
  ...
</ProxyEndpoint>

Attributi

Nella tabella seguente vengono descritti gli attributi dell'elemento <PreFlow>:

Attributo Tipo Descrizione
name Stringa Un ID univoco per il flusso. Il nome non può includere spazi o altri caratteri speciali. Ad esempio, My-PreFlow-1.

Elementi secondari

Nella tabella seguente vengono descritti gli elementi secondari di <PreFlow>:

Elemento secondario Tipo Descrizione
<Description> Stringa Fornisce una breve descrizione del flusso.
<Request> Oggetto complesso Definisce i criteri da eseguire durante il PreFlow della richiesta.
<Response> Oggetto complesso Definisce i criteri da eseguire durante il PreFlow della risposta.

<Request>

Definisce i criteri da eseguire durante il segmento di richiesta del flusso.

Tipo Oggetto complesso
Elementi principali <Flow>
<PreFlow>
<PostFlow>
Elementi secondari <Condition>
<Step>

Sintassi

L'elemento <Request> utilizza la seguente sintassi:

<Request>
  <Step>
    <Condition>property operator "value"</Condition>
    <Name>policy_name</Name>
  </Step>
  ...
</Request>

Tutti gli elementi secondari di <Request> sono facoltativi.

Esempio

L'esempio seguente mostra i flussi definiti per la richiesta sia in PreFlow che in PostFlow:

<!-- api-platform/reference/examples/flow-segments/request-1.xml -->
<ProxyEndpoint name="default">
  <PreFlow name="my-preFlows">
    <Description>My first PreFlow</Description>
    <Request>
      <Step>
        <Condition>request.verb = "GET"</Condition>
        <Name>Log-Request-OK</Name>
      </Step>
    </Request>
  </PreFlow>
  <PostFlow name="my-postflows">
    <Description>My first PostFlow</Description>
    <Request>
      <Step>
        <Condition>request.verb = "GET"</Condition>
        <Name>Log-Request-OK</Name>
      </Step>
    </Request>
  </PostFlow>
  ...
</ProxyEndpoint>

Attributi

L'elemento <Request> non ha attributi.

Elementi secondari

Nella tabella seguente vengono descritti gli elementi secondari di <Request>:

Elemento secondario Tipo Descrizione
<Condition> Oggetto complesso Determina se i passaggi all'interno del segmento di richiesta vengono eseguiti.
<Step> Stringa Specifica un criterio da eseguire all'interno del segmento di richiesta.

<Response>

Definisce i criteri da eseguire durante il segmento di risposta del flusso.

Tipo Oggetto complesso
Elementi principali <Flow>
<PreFlow>
<PostClientFlow>
<PostFlow>
Elementi secondari <Condition>
<Step>

Sintassi

L'elemento <Response> utilizza la seguente sintassi:

<Response>
  <Step>
    <Condition>property operator "value"</Condition>
    <Name>policy_name</Name>
  </Step>
  ...
</Response>

Tutti gli elementi secondari di <Response> sono facoltativi.

Esempio

L'esempio seguente mostra i flussi definiti per la risposta, sia in PreFlow che in PostFlow:

<!-- api-platform/reference/examples/flow-segments/response-1.xml -->
<ProxyEndpoint name="default">
    <PreFlow name="my-preFlows">
        <Description>My first PreFlow</Description>
        <Response>
            <Step>
                <Condition>response.status.code LesserThanOrEquals 300</Condition>
                <Name>Log-Response-OK</Name>
            </Step>
            <Step>
                <Condition>response.status.code GreaterThan 300</Condition>
                <Name>Log-Response-NOT-OK</Name>
            </Step>
        </Response>
    </PreFlow>
    <PostFlow name="my-postflows">
        <Description>My first PostFlow</Description>
        <Response>
            <Step>
                <Name>Set-Response-Headers</Name>
            </Step>
        </Response>
    </PostFlow>
  ...
</ProxyEndpoint>

Attributi

L'elemento <Response> non ha attributi.

Elementi secondari

Nella tabella seguente vengono descritti gli elementi secondari di <Response>:

Elemento secondario Tipo Descrizione
<Condition> Stringa Determina se i passaggi all'interno del segmento di risposta vengono eseguiti.
<Step> Stringa Specifica un criterio da eseguire all'interno del segmento di risposta.

<Step>

Specifica un criterio da eseguire e, facoltativamente, una condizione che determina se eseguirlo.

Tipo Oggetto complesso
Elementi principali <Request>
<Response>
Elementi secondari <Condition>
<Name>

In una <Flow> può essere definito più di un passaggio e i passaggi vengono eseguiti nell'ordine in cui sono definiti nel codice XML del flusso.

I passaggi senza una condizione vengono sempre eseguiti. I passaggi con una condizione vengono eseguiti solo se la condizione ha valore true. Se la condizione restituisce false, Apigee ignora il passaggio.

Sintassi

L'elemento <Step> utilizza la seguente sintassi:

<Step>
  <Condition>property operator "value"</Condition>
  <Name>policy_name</Name>
</Step>

Possono esserci solo un <Condition> e un <Name> per <Step>, ma possono esserci più passaggi in un <Flow>.

Tutti gli elementi secondari di <Step> sono facoltativi.

Esempio 1

L'esempio seguente mostra un passaggio con una condizione e un passaggio senza una condizione:

<!-- api-platform/reference/examples/flow-segments/step-1.xml -->
<ProxyEndpoint name="default">
  <PostFlow name="my-postflows">
      <Description>My first PostFlow</Description>
      <Request>
          <Step>
              <Condition>request.verb = "GET"</Condition>
              <Name>Log-Request-OK</Name>
          </Step>
      </Request>
      <Response>
          <Step>
              <Name>Set-Response-Headers</Name>
          </Step>
      </Response>
  </PostFlow>
  ...
</ProxyEndpoint>

Il passaggio senza la condizione viene eseguito ogni volta durante il segmento di richiesta. Il passaggio con una condizione viene eseguito solo quando la richiesta è "GET" durante il segmento di risposta.

Esempio 2

L'esempio seguente mostra più passaggi in un singolo segmento:

<!-- api-platform/reference/examples/flow-segments/step-2.xml -->
<ProxyEndpoint name="default">
    <PostFlow name="PostFlow">
        <Response>
            <Step>
                <Name>Assign-Message-1</Name>
            </Step>
            <Step>
                <Name>Assign-Message-2</Name>
            </Step>
        </Response>
    </PostFlow>
  ...
</ProxyEndpoint>

I passaggi senza una condizione vengono sempre eseguiti.

Attributi

L'elemento <Step> non ha attributi.

Elementi secondari

Nella tabella seguente vengono descritti gli elementi secondari di <Step>:

Elemento secondario Tipo Descrizione
<Condition> Stringa Definisce un'istruzione condizionale per il passaggio elaborato in fase di runtime. Se l'istruzione restituisce true, Apigee esegue il passaggio. Se l'istruzione restituisce false, Apigee ignora il passaggio.
<Name> Stringa Specifica l'ID del criterio da eseguire nel flusso attuale.