Riferimento alla configurazione dei flussi

Questa pagina si applica a Apigee e Apigee ibridi.

Visualizza la documentazione di Apigee Edge.

Questa sezione fornisce informazioni di riferimento sugli elementi XML che utilizzi per definire Flussi del proxy 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 viene descritta in dettaglio 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 i valori PreFlow, Conditional Flow, PostFlow e PostClientFlow. dell'esecuzione.

<Condition>

Definisce un'istruzione che viene elaborata in fase di esecuzione. Se l'istruzione restituisce true, viene eseguito il passaggio o il flusso associato alla condizione. Se l'istruzione è falsa, 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 abbia inserito 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 nel tuo . Ad esempio, la variabile di flusso request ha proprietà denominate path e content. Per utilizzarle in una condizione, devi specificare 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. Comuni tra cui:
>     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, vedi Operatori nel Riferimento alle condizioni.

"value"
Il valore in base al quale viene valutata la proprietà della variabile di flusso. In genere questa è 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 dei pattern, come descritti in Corrispondenza di pattern con condizionali.

Esempio 1

L'esempio seguente verifica se la variabile di flusso request verb la proprietà è 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 da una persona. 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 dell'output:

<!-- 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 restituisce true. In caso contrario, Apigee salta l'intero flusso.

Un elemento <Flows> può contenere più elementi <Flow>, ciascuno con la propria condizione e passi. 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 sempre eseguito (se nessuno degli altri flussi condizionali lo fa). A seconda di come è configurato il proxy API, questo può essere uno strumento utile in protezione contro i attacchi informatici.

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 si 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 restituisce su true, viene eseguito il flusso (e tutti i suoi 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 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 sono presenti più elementi <Flow> in <Flows>, verrà eseguito solo uno <Flow>. Questo sarà il primo flusso che non ha un elemento <Condition> o la cui condizione è stata risolta su true.

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

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 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 dal 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> in <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 valore "default" <Flow>:

<!-- 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 protezione contro i attacchi informatici.

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 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 con il 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>

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 passaggi sia per la richiesta che per la risposta definita:

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

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. Questi criteri in genere 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

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

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 flusso preliminare 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

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 spazi caratteri. 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

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 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 vengono eseguiti i passaggi all'interno del segmento di richiesta.
<Step> Stringa Specifica un criterio da eseguire nel 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

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 nel flusso PreFlow che 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 è definito nel file XML del flusso.

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

Sintassi

L'elemento <Step> utilizza la seguente sintassi:

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

Possono essere presenti 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. Passaggio con una condizione viene eseguita solo quando la richiesta è "GET" durante la risposta in base al segmento.

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 che viene elaborato in fase di runtime. Se 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.