Riferimento per la configurazione dei flussi

Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X.
informazioni

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

Gerarchia e sintassi

I seguenti esempi mostrano la gerarchia degli elementi e la sintassi degli elementi di configurazione dei flussi:

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 dettagliatamente nelle sezioni seguenti:

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

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

Questi elementi consentono di 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.

Digitare 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 elemento <Step> restituisce true, Edge esegue quel passaggio. Se la condizione è falsa, Edge salta il passaggio.

Se una condizione all'interno di un oggetto <Flow> restituisce true, Edge elabora tutti i passaggi del flusso. Se la condizione restituisce false, Edge ignora 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 tua condizione. Ad esempio, la variabile di flusso request ha proprietà denominate path e content. Per utilizzarle in una condizione, specifica flow_variable[dot]property_name:
request.path
request.content

Per un elenco completo delle variabili di flusso e delle loro proprietà, consulta il riferimento sulle 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 nel riferimento 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, ad esempio un numero intero o una stringa. Ad esempio, 200 o "/cat". Il valore può includere caratteri jolly, come asterischi e altri caratteri per la corrispondenza del pattern, come descritto in Corrispondenza di pattern con condizionali.

Esempio 1

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

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

Se la richiesta è di tipo "GET", questo esempio esegue il criterio "Log-Request-OK".

Esempio 2

L'esempio seguente verifica il codice di risposta:

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

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

Attributi

L'elemento <Condition> non ha attributi.

Elementi secondari

L'elemento <Condition> non ha elementi secondari.

<Description>

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

Digitare 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 personalizzato di passaggi eseguiti da Edge.

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

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

Un elemento <Flows> può contenere più elementi <Flow>, ciascuno con la propria condizione e i propri passaggi. Quando ci sono più elementi <Flow>, Edge esegue solo il primo in cui non sono presenti condizioni o in cui la condizione è 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 per la protezione da attacchi dannosi.

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 <Flow> semplice che esegue sempre il criterio "Log-Message-OK":

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

Esempio 2

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

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

Esempio 3

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

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

Edge esegue un solo flusso in un segmento; esegue il primo flusso che non ha una condizione o la cui condizione viene risolta in true.

Attributi

La tabella seguente descrive gli attributi dell'elemento <Flow>:

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

Elementi secondari

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

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

<Flows>

Contiene zero o più elementi <Flow>.

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

Se sono presenti più elementi <Flow> all'interno di <Flows>, verrà eseguito un solo elemento <Flow>. Questo sarà il primo flusso che non ha un valore <Condition> o la cui condizione si risolve in 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 per la protezione da attacchi dannosi.

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 elemento <Flows> semplice con un singolo elemento <Flow>:

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

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

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

Esempio 3

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

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

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

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

Attributi

L'elemento <Flows> non ha attributi.

Elementi secondari

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

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

<Name>

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

Digitare 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 che vengono 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 eseguire nel PostFlow della richiesta e della risposta.

Digitare 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 per la richiesta e la risposta definiti:

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

Attributi

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

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

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

<PostClientFlow>

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

Digitare 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

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

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

Attributi

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

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 pre-flusso della richiesta e della risposta.

Digitare 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

Nell'esempio seguente viene mostrato un flusso preliminare 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

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

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 preflusso della richiesta.
<Response> Oggetto complesso Definisce i criteri da eseguire durante il preflusso della risposta.

<Request>

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

Digitare 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 che in PostFlow:

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

Attributi

L'elemento <Request> non ha attributi.

Elementi secondari

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

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

<Response>

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

Digitare 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

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

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

<Step>

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

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

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

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

Sintassi

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

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

Possono esserci solo un <Condition> e un <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 viene eseguito ogni volta durante il segmento della richiesta. Il passaggio con una condizione viene eseguito solo quando la richiesta è "GET" durante il segmento di risposta.

Esempio 2

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

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

I passaggi senza una condizione vengono sempre eseguiti.

Attributi

L'elemento <Step> non ha attributi.

Elementi secondari

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

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