Riferimento alla configurazione dei flussi

Questa pagina si applica a Apigee e Apigee ibridi.

Visualizza documentazione di Apigee Edge.

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

Gerarchia e sintassi

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

Gerarchia degli elementi

L'esempio seguente mostra la gerarchia degli elementi di configurazione del flusso all'interno di 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 descritto 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 restituisce un valore 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 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 valore <Step> restituisce true, Apigee esegue questo passaggio. Se la condizione restituisce un valore 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 viene valutata come false, Apigee salta 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 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 loro proprietà, consulta Riferimento per le 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 è 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, ad esempio 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

Nell'esempio seguente viene verificato 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 sugli a te o ad altri sviluppatori. La descrizione non è visibile all'esterno.

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

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 :

<!-- 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 solo i passaggi del flusso se la condizione restituisce true. Altrimenti, Apigee salta l'intera flusso di lavoro.

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 c'è alcuna condizione oppure la condizione restituisce 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

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 comando "Log-Message-OK" norme:

<!-- 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, ognuno con il proprio 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

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 elementi speciali caratteri.

Elementi secondari

Nella tabella seguente vengono descritti 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 è esterna visibile.
<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 di come è configurato il proxy API, questo può essere uno strumento utile in protezione contro i attacchi informatici.

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 <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 restituisce true. Dopo il giorno che Apigee ignora 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 restituisce true. Se non viene eseguito nessun flusso condizionale, 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 all'interno di un elemento <Flow>.

Tipo Stringa
Elementi principali <Step>
Elementi secondari Nessuno

Sintassi

L'elemento <Name> utilizza la seguente sintassi:

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

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 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. La 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 i criteri nel ProxyEndpoint che vengono eseguiti solo dopo che è stata restituita una risposta a il cliente. 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

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 spazi caratteri. 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 flusso preliminare 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 spazi caratteri. 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 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 vengono eseguiti i passaggi all'interno del segmento di richiesta.
<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 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

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

Elemento secondario Tipo Descrizione
<Condition> Stringa Determina se vengono eseguiti i passaggi all'interno del segmento di risposta.
<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 tale norma.

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

In una <Flow> può essere presente più di un passaggio che viene eseguito nella nell'ordine in cui vengono 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 restituisce true. Se la condizione è false, Apigee salta il passaggio.

Sintassi

L'elemento <Step> utilizza la seguente sintassi:

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

È possibile avere un solo <Condition> e un <Name> per <Step>, ma è possibile 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 elaborato in fase di esecuzione. 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 attuale.