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 utilizzati per definire i flussi proxy dell'API.

Gerarchia e sintassi

Gli esempi seguenti mostrano la gerarchia 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. Ciascuno di questi elementi è descritto in dettaglio nelle sezioni che seguono:

<!-- 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>

Utilizza questi elementi per definire l'esecuzione di PreFlow, Conditional Flow, PostFlow e PostClientFlow.

<Condition>

Definisce un'istruzione che viene elaborata in fase di 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 Nessuno

Puoi applicare una condizione a un passaggio specifico o a un intero flusso, a seconda che tu inserisca l'elemento 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 <Step> restituisce true, Apigee esegue quel passaggio. Se la condizione restituisce false, Apigee salta il passaggio.

Se una condizione all'interno di un <Flow> restituisce true, Apigee elabora tutti i passaggi del flusso. Se la condizione è falsa, Apigee salta l'intero flusso.

Sintassi

La sintassi dell'elemento <Condition> è la seguente:

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

Dove:

property
La proprietà della variabile di flusso che vuoi utilizzare nella condizione. Ad esempio, la variabile di flusso request ha proprietà denominate path e content. Per utilizzarli in una condizione, specifica flow_variable[dot]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 Operatori nella documentazione di riferimento sulle condizioni.

"value"
Il valore in base al quale viene valutata la proprietà della variabile di flusso. Di solito si tratta di un tipo di base come 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 a pattern, come descritto in Corrispondenza a pattern con i criteri condizionali.

Esempio 1

L'esempio seguente verifica 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, questo esempio esegue il criterio Log-Request-OK.

Esempio 2

L'esempio seguente controlla 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 all'esterno.

Tipo Stringa
Elementi principali <Flow>
<PreFlow>
<PostFlow>
Elementi secondari Nessuno

Sintassi

La sintassi dell'elemento <Description> è la seguente:

<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 insieme di passaggi personalizzati eseguiti da Apigee.

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

Facoltativamente, puoi specificare un <Condition> in un <Flow>. In questo caso, Apigee esegue solo i passaggi del flusso se la condizione è vera. 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 è valutata come true.

Puoi definire un flusso predefinito che viene eseguito sempre (se non viene eseguito nessuno degli altri flussi condizionali). A seconda della configurazione del proxy API, questo può essere uno strumento utile per difendersi da attacchi malintenzionati.

Sintassi

La sintassi dell'elemento <Flow> è la seguente:

<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 semplice <Flow> 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 <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 un solo flusso in un segmento; esegue il primo flusso che non ha una condizione o la cui condizione risolve in true.

Attributi

La tabella seguente descrive 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

La tabella seguente descrive gli elementi secondari di <Flow>:

Elemento secondario Tipo Descrizione
<Condition> Stringa Definisce un'istruzione condizionale che viene elaborata in fase di esecuzione. Se l'istruzione è valutata come true, il flusso (e tutti i relativi passaggi) viene eseguito. 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 all'esterno.
<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 in <Flows> sono presenti più elementi <Flow>, verrà eseguito un solo <Flow>. Si tratta del primo flusso che non ha un <Condition> o la cui condizione è true.

Puoi definire un flusso predefinito che viene eseguito sempre (se non viene eseguito nessuno degli altri flussi). A seconda della configurazione del proxy API, questo può essere uno strumento utile per difendersi da attacchi malintenzionati.

Sintassi

La sintassi dell'elemento <Flows> è la seguente:

<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 semplice elemento <Flows> con un singolo <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 è valutata come true. Dopodiché, Apigee salta i flussi rimanenti nel segmento.

Esempio 3

L'esempio seguente mostra un <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 è valutata come true. Se non vengono eseguiti flussi condizionali, viene eseguito il terzo flusso in questo esempio (senza condizione).

Un flusso predefinito può essere uno strumento utile per difendersi da attacchi dannosi.

Attributi

L'elemento <Flows> non ha attributi.

Elementi secondari

L'elemento <Flows> prevede 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 un <Flow>.

Tipo Stringa
Elementi principali <Step>
Elementi secondari Nessuno

Sintassi

La sintassi dell'elemento <Name> è la seguente:

<Name>policy_name</Name>

Esempio

L'esempio seguente mostra due criteri aggiunti ai flussi in base al 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 seguire nel PostFlow della richiesta e della risposta.

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

La sintassi dell'elemento <PostFlow> è la seguente:

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 i passaggi definiti sia per la richiesta sia per la risposta:

<!-- 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

La tabella seguente descrive 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

La tabella seguente descrive 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 i criteri in ProxyEndpoint che vengono eseguiti solo dopo che è stata restituita una risposta al client. In genere, questi criteri registrano i messaggi relativi alla risposta.

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

Sintassi

La sintassi dell'elemento <PostClientFlow> è la seguente:

<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

L'esempio seguente mostra 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

La tabella seguente descrive 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

La tabella seguente descrive 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

La sintassi dell'elemento <PreFlow> è la seguente:

<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 un flusso di 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

La tabella seguente descrive 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

La tabella seguente descrive 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

La sintassi dell'elemento <Request> è la seguente:

<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 sia 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

La tabella seguente descrive gli elementi secondari di <Request>:

Elemento secondario Tipo Descrizione
<Condition> Oggetto complesso Determina se i passaggi all'interno del segmento della richiesta vengono eseguiti.
<Step> Stringa Specifica un criterio da eseguire nel segmento della 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

La sintassi dell'elemento <Response> è la seguente:

<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

La tabella seguente descrive 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 eseguire o meno il criterio.

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

In un <Flow> può essere definito più di un passaggio, che viene eseguito nell'ordine in cui sono definiti nel file XML del flusso.

I passaggi senza una condizione vengono sempre eseguiti. I passaggi con una condizione vengono eseguiti solo se la condizione viene valutata come true. Se la condizione restituisce false, Apigee salta il passaggio.

Sintassi

La sintassi dell'elemento <Step> è la seguente:

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

Può essere presente un solo <Condition> e un solo <Name> per <Step>, ma possono essere presenti 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 verrà eseguito ogni volta durante il segmento di richiesta. Il passaggio con una condizione verrà 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

La tabella seguente descrive gli elementi secondari di <Step>:

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