Documentation de référence sur la configuration des flux

Cette page s'applique à Apigee et à Apigee hybrid.

Consultez la documentation d'Apigee Edge.

Cette section fournit des informations de référence sur les éléments XML que vous utilisez pour définir vos flux de proxy d'API.

Hiérarchie et syntaxe

Les exemples suivants montrent la hiérarchie et la syntaxe des éléments de configuration de flux :

Hiérarchie des éléments

L'exemple suivant montre la hiérarchie des éléments de configuration de flux au sein des éléments <ProxyEndpoint> et <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>

Syntaxe

L'exemple suivant montre la syntaxe des éléments de configuration de flux. Chacun de ces éléments est décrit en détail dans les sections suivantes :

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

Vous utilisez ces éléments pour définir votre exécution PreFlow, Conditional Flow, PostFlow et PostClientFlow.

<Condition>

Définit une instruction traitée au moment de l'exécution. Si l'instruction renvoie la valeur "true", l'étape (ou le flux associé à la condition) est exécutée. Si l'instruction renvoie la valeur "false", l'étape (ou le flux) est ignorée.

Type Chaîne
Élément(s) parent(s) <Flow>
<Step>
Élément(s) enfant(s) Aucun

Vous pouvez appliquer une condition à une étape spécifique ou à un flux entier, selon que vous placez l'élément dans l'élément <Flow> ou <Step> :

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

Si une condition dans <Step> renvoie la valeur "true", Apigee exécute cette étape. Si la condition renvoie la valeur "false", Apigee ignore l'étape.

Si une condition dans <Flow> renvoie la valeur "true", Apigee traite toutes les étapes du flux. Si la condition renvoie la valeur "false", Apigee ignore l'intégralité du flux.

Syntaxe

L'élément <Condition> utilise la syntaxe suivante :

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

Où :

property
Propriété de la variable de flux que vous souhaitez utiliser dans votre condition. Par exemple, la variable de flux request possède des propriétés nommées path et content. Pour les utiliser dans une condition, spécifiez flow_variable[point]property_name :
request.path
request.content

Pour obtenir la liste complète des variables de flux et leurs propriétés, consultez la Documentation de référence sur les variables de flux.

operator
Concept permettant de définir le mode d'évaluation de votre condition. Les opérateurs courants sont les suivants :
>     greater than           <=    less than or equal to
<     less than              >=    greater than or equal to
=     equals                 &&    and
!=    not equals             ||    or

~~    JavaRegex
~     Matches
/~    MatchesPath

Pour obtenir une liste complète, consultez la section Opérateurs dans la documentation de référence sur les conditions.

"value"
Valeur par rapport à laquelle la propriété de variable de flux est évaluée. Il s'agit généralement d'un type de base tel qu'un entier ou une chaîne. Par exemple, 200 ou /cat. La valeur peut inclure des caractères génériques, tels que des astérisques et d'autres caractères pour la correspondance de modèles, comme décrit dans la section Correspondance de modèles avec des expressions conditionnelles.

Exemple 1

L'exemple suivant vérifie si la propriété verb de la variable de flux request est 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>

Si la requête est GET, cet exemple exécute la stratégie Log-Request-OK.

Exemple 2

L'exemple suivant recherche le code de réponse :

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

Une autre stratégie est exécutée en fonction de la valeur du code.

Attributs

L'élément <Condition> ne comporte aucun attribut.

Éléments enfants

L'élément <Condition> ne comporte aucun élément enfant.

<Description>

Décrit le flux en termes lisibles. Utilisez cet élément afin de fournir des informations sur le flux à vous-même ou à d'autres développeurs. La description n'est pas visible en externe.

Type Chaîne
Élément(s) parent(s) <Flow>
<PreFlow>
<PostFlow>
Élément(s) enfant(s) None

Syntaxe

L'élément <Description> utilise la syntaxe suivante :

<Description>flow_description</Description>

Exemple

L'exemple suivant montre un élément <Description> qui spécifie l'usage d'un flux :

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

Attributs

L'élément <Description> ne comporte aucun attribut.

Éléments enfants

L'élément <Description> ne comporte aucun élément enfant.

<Flow>

Définit un ensemble personnalisé d'étapes exécutées par Apigee.

Type Objet complexe
Élément(s) parent(s) <Flows>
Élément(s) enfant(s) <Condition>
<Description>
<Request>
<Response>

Vous pouvez éventuellement spécifier une <Condition> sur un <Flow>. Dans ce cas, Apigee n'exécute les étapes du flux que si la condition renvoie "true". Sinon, Apigee ignore l'intégralité du flux.

Un élément <Flows> peut contenir plusieurs éléments <Flow>, chacun possédant ses propres conditions et étapes. Lorsqu'il existe plusieurs éléments <Flow>, Apigee n'exécute que le premier élément dans lequel il n'y a pas de condition ou la condition renvoie "true".

Vous pouvez définir un flux par défaut qui s'exécute toujours (si aucun des autres flux conditionnels ne l'est). Selon la configuration de votre proxy d'API, il peut s'agir d'un outil utile afin de garantir une protection contre les attaques malveillantes.

Syntaxe

L'élément <Flow> utilise la syntaxe suivante :

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

Tous les éléments enfants de <Flow> sont facultatifs.

Exemple 1

L'exemple suivant montre un simple <Flow> qui exécute toujours la stratégie "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>

Exemple 2

L'exemple suivant montre un <Flow> avec plusieurs étapes, chacune possédant sa propre condition :

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

Exemple 3

L'exemple suivant montre plusieurs flux dans un flux conditionnel :

<!-- 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 n'exécute qu'un seul flux dans un segment. En effet, il exécute le premier flux qui n'a pas de condition ou dont la condition renvoie la valeur "true".

Attributs

Le tableau suivant décrit les attributs de l'élément <Flow> :

Attribut Type Description
name Chaîne (Obligatoire) Identifiant unique pour le flux. Par exemple, My-Conditional-Flow-1. Le nom ne peut pas contenir d'espaces ou autres caractères spéciaux.

Éléments enfants

Le tableau suivant décrit les éléments enfants de <Flow> :

Élément enfant Type Description
<Condition> Chaîne Définit une instruction conditionnelle traitée au moment de l'exécution. Si l'instruction renvoie la valeur "true", le flux (et toutes ses étapes) est exécuté. Si l'instruction renvoie la valeur "false", le flux (et toutes ses étapes) est ignoré.
<Description> Chaîne Fournit une brève description du flux. Cette description n'est pas visible de l'extérieur.
<Request> Objet complexe Spécifie les étapes et les conditions pour le segment de requête.
<Response> Objet complexe Spécifie les étapes et les conditions pour le segment de réponse.

<Flows>

Contient zéro ou plusieurs éléments <Flow>.

Type Objet complexe
Élément(s) parent(s) <ProxyEndpoint>
<TargetEndpoint>
Élément(s) enfant(s) <Flow>

S'il existe plusieurs éléments <Flow> dans <Flows>, un seul élément <Flow> s'exécute. Il s'agit du premier flux qui n'a pas de <Condition> ou dont la condition renvoie la valeur "true".

Vous pouvez définir un flux par défaut qui s'exécute toujours (si aucun des autres flux ne l'est). Selon la configuration de votre proxy d'API, il peut s'agir d'un outil utile afin de garantir une protection contre les attaques malveillantes.

Syntaxe

L'élément <Flows> utilise la syntaxe suivante :

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

Tous les éléments enfants de <Flows> sont facultatifs.

Exemple 1

L'exemple suivant montre un élément <Flows> simple avec un seul <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 exécute l'une de ces stratégies en fonction du suffixe de chemin qu'elle recueille à partir de la variable de flux proxy. Si le suffixe de chemin ne correspond à aucune des conditions, Apigee n'exécute pas ce flux.

Exemple 2

L'exemple suivant montre plusieurs éléments <Flow> dans <Flows>, chacun avec sa propre <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 n'exécute que le premier flux d'un segment dont la condition renvoie la valeur "true". Apigee ignore ensuite les flux restants dans le segment.

Exemple 3

L'exemple suivant montre un <Flow> par défaut :

<!-- 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 n'exécute que le premier flux d'un segment dont la condition renvoie la valeur "true". Si aucun flux conditionnel ne s'exécute, le troisième flux de cet exemple (sans condition) est exécuté.

Un flux par défaut peut s'avérer être un outil utile de protection contre les attaques malveillantes.

Attributs

L'élément <Flows> ne comporte aucun attribut.

Éléments enfants

L'élément <Flows> comporte les éléments enfants suivants :

Élément enfant Type Description
<Flow> Objet complexe Un flux qui définit un ensemble d'étapes possible dans le flux conditionnel.

<Name>

Spécifie l'ID de la stratégie à exécuter dans un <Flow>.

Type Chaîne
Élément(s) parent(s) <Step>
Élément(s) enfant(s) None

Syntaxe

L'élément <Name> utilise la syntaxe suivante :

<Name>policy_name</Name>

Exemple

L'exemple suivant montre deux stratégies ajoutées aux flux par leur nom :

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

Attributs

L'élément <Name> ne comporte aucun attribut.

Éléments enfants

L'élément <Name> ne comporte aucun élément enfant.

<PostFlow>

Définit les étapes à suivre dans le PostFlow de la requête et de la réponse.

Type Objet complexe
Élément(s) parent(s) <ProxyEndpoint>
<TargetEndpoint>
Élément(s) enfant(s) <Description>
<Request>
<Response>

L'élément <PostFlow> utilise la syntaxe suivante :

Syntaxe

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

Exemple

L'exemple suivant montre un PostFlow avec des étapes pour la demande et la réponse définies :

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

Attributs

Le tableau suivant décrit les attributs de l'élément <PostFlow> :

Attribut Type Description
name Chaîne Un identifiant unique pour le flux (unique dans le point de terminaison). Par exemple, My-PostFlow-1. La valeur ne peut pas inclure d'espaces ni d'autres caractères spéciaux.

Éléments enfants

Le tableau suivant décrit les éléments enfants de <PostFlow> :

Élément enfant Type Description
<Description> Chaîne Fournit une brève description du flux.
<Request> Objet complexe Définit les stratégies à exécuter pendant le PostFlow de la requête.
<Response> Objet complexe Définit les stratégies à exécuter pendant le PostFlow de la réponse.

<PostClientFlow>

Définit les règles dans le ProxyEndpoint qui ne s'exécutent qu'après qu'une réponse a été renvoyée au client. Ces règles consignent généralement les messages liés à la réponse.

Type Objet complexe
Élément(s) parent(s) <ProxyEndpoint>
Élément(s) enfant(s) <Description>
<Response>

Syntaxe

L'élément <PostClientFlow> utilise la syntaxe suivante :

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

Tous les éléments enfants de <PostClientFlow> sont facultatifs.

Exemple

L'exemple suivant montre un PostClientFlow simple qui exécute une seule stratégie :

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

Attributs

Le tableau suivant décrit les attributs de l'élément <PostClientFlow> :

Attribut Type Description
name Chaîne Un identifiant unique pour le flux. Le nom ne peut pas inclure d'espaces ni d'autres caractères spéciaux. Par exemple, My-PostClientFlow-1.

Éléments enfants

Le tableau suivant décrit les éléments enfants de <PostClientFlow> :

Élément enfant Type Description
<Description> Chaîne Fournit une brève description du flux.
<Response> Objet complexe Définit les stratégies à exécuter pendant le PostFlow de la réponse.

<PreFlow>

Définit les stratégies à exécuter dans le PreFlow de la demande et de la réponse.

Type Objet complexe
Élément(s) parent(s) <ProxyEndpoint>
<TargetEndpoint>
Élément(s) enfant(s) <Description>
<Request>
<Response>

Syntaxe

L'élément <PreFlow> utilise la syntaxe suivante :

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

Tous les éléments enfants de <PreFlow> sont facultatifs.

Exemple

L'exemple suivant montre un PreFlow avec une requête et un flux de réponse définis :

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

Attributs

Le tableau suivant décrit les attributs de l'élément <PreFlow> :

Attribut Type Description
name Chaîne Un identifiant unique pour le flux. Le nom ne peut pas inclure d'espaces ni d'autres caractères spéciaux. Par exemple, My-PreFlow-1.

Éléments enfants

Le tableau suivant décrit les éléments enfants de <PreFlow> :

Élément enfant Type Description
<Description> Chaîne Fournit une brève description du flux.
<Request> Objet complexe Définit les stratégies à exécuter pendant le PreFlow de la requête.
<Response> Objet complexe Définit les stratégies à exécuter pendant le PreFlow de la réponse.

<Request>

Définit les stratégies à exécuter pendant le segment de requête du flux.

Type Objet complexe
Élément(s) parent(s) <Flow>
<PreFlow>
<PostFlow>
Élément(s) enfant(s) <Condition>
<Step>

Syntaxe

L'élément <Request> utilise la syntaxe suivante :

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

Tous les éléments enfants de <Request> sont facultatifs.

Exemple

L'exemple suivant montre les flux définis pour la requête dans le PreFlow et le 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>

Attributs

L'élément <Request> ne comporte aucun attribut.

Éléments enfants

Le tableau suivant décrit les éléments enfants de <Request> :

Élément enfant Type Description
<Condition> Objet complexe Détermine si les étapes du segment de requête sont exécutées.
<Step> Chaîne Spécifie une stratégie à exécuter dans le segment de requête.

<Response>

Définit les stratégies à exécuter pendant le segment de réponse du flux.

Type Objet complexe
Élément(s) parent(s) <Flow>
<PreFlow>
<PostClientFlow>
<PostFlow>
Élément(s) enfant(s) <Condition>
<Step>

Syntaxe

L'élément <Response> utilise la syntaxe suivante :

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

Tous les éléments enfants de <Response> sont facultatifs.

Exemple

L'exemple suivant montre les flux définis pour la réponse dans le PreFlow et le 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>

Attributs

L'élément <Response> ne comporte aucun attribut.

Éléments enfants

Le tableau suivant décrit les éléments enfants de <Response> :

Élément enfant Type Description
<Condition> Chaîne Détermine si les étapes du segment de réponse sont exécutées.
<Step> Chaîne Spécifie une stratégie à exécuter dans le segment de réponse.

<Step>

Spécifie une stratégie à exécuter et (éventuellement) une condition déterminant s'il faut exécuter cette stratégie.

Type Objet complexe
Élément(s) parent(s) <Request>
<Response>
Élément(s) enfant(s) <Condition>
<Name>

Plusieurs étapes peuvent être définies dans un <Flow>. Les étapes sont exécutées dans l'ordre dans lequel elles ont été définies dans le XML du flux.

Les étapes sans condition s'exécutent toujours. Les étapes avec une condition ne s'exécutent que si celle-ci renvoie la valeur "true". Si la condition renvoie la valeur "false", Apigee ignore l'étape.

Syntaxe

L'élément <Step> utilise la syntaxe suivante :

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

Il ne peut y avoir qu'une seule <Condition> et un <Name> par <Step>, mais un <Flow> peut comporter plusieurs étapes.

Tous les éléments enfants de <Step> sont facultatifs.

Exemple 1

L'exemple suivant montre une étape avec une condition et une étape sans condition :

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

L'étape sans condition est exécutée chaque fois pendant le segment de requête. L'étape avec condition ne s'exécute que lorsque la requête est un "GET" pendant le segment de réponse.

Exemple 2

L'exemple suivant montre plusieurs étapes dans un seul segment :

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

Les étapes sans condition s'exécutent toujours.

Attributs

L'élément <Step> ne comporte aucun attribut.

Éléments enfants

Le tableau suivant décrit les éléments enfants de <Step> :

Élément enfant Type Description
<Condition> Chaîne Définit une instruction conditionnelle pour l'étape traitée au moment de l'exécution. Si l'instruction renvoie la valeur "true", Apigee exécute l'étape. Si l'instruction renvoie la valeur "false", Apigee ignore l'étape.
<Name> Chaîne Spécifie l'ID de la stratégie à exécuter dans le flux actuel.