Referencia de configuración de flujo

Esta página se aplica a Apigee y Apigee Hybrid.

Consulta la documentación de Apigee Edge.

En esta sección se proporciona información de referencia sobre los elementos XML que se usan para definir los flujos de proxy de API.

Jerarquía y sintaxis

En los siguientes ejemplos se muestra la jerarquía de elementos y la sintaxis de los elementos de configuración de flujo:

Jerarquía de elementos

En el siguiente ejemplo se muestra la jerarquía de los elementos de configuración del flujo dentro de los elementos <ProxyEndpoint> y <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>
    EventFlow
          <Response>
                <Step>
                    
          <Description>
    <PostClientFlow> (<ProxyEndpoint> only)
          <Response>
                
          <Description>

      // Additional configuration elements

</ProxyEndpoint | TargetEndpoint>

Sintaxis

En el siguiente ejemplo se muestra la sintaxis de los elementos de configuración de flujo. Cada uno de estos elementos se describe en detalle en las secciones siguientes:

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

Estos elementos se usan para definir la ejecución de PreFlow, Conditional Flow, PostFlow, EventFlow y PostClientFlow.

<Condition>

Define una instrucción que se procesa en el tiempo de ejecución. Si la instrucción se evalúa como verdadera, se ejecuta el paso o el flujo asociado a la condición. Si la instrucción se evalúa como falsa, se ignora el paso o el flujo.

Tipo Cadena
Elemento(s) principal(es) <Flow>
<Step>
Elemento(s) secundario(s) Ninguno

Puedes aplicar una condición a un paso concreto o a todo un flujo, en función de si colocas el elemento en el 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>

Si una condición de un <Step> se evalúa como verdadera, Apigee ejecuta ese paso. Si la condición se evalúa como falsa, Apigee omite el paso.

Si una condición de un <Flow> se evalúa como verdadera, Apigee procesa todos los pasos del flujo. Si la condición se evalúa como falsa, Apigee omite todo el flujo.

Sintaxis

El elemento <Condition> utiliza la siguiente sintaxis:

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

Donde:

property
La propiedad de la variable de flujo que quieres usar en tu condición. Por ejemplo, la variable de flujo request tiene propiedades llamadas path y content. Para usarlos en una condición, especifica el flow_variable[punto]property_name:
request.path
request.content

Para ver una lista completa de las variables de flujo y sus propiedades, consulta la referencia de variables de flujo.

operator
Una estructura que define cómo se evalúa la condición. Entre los operadores habituales se incluyen los siguientes:
>     greater than           <=    less than or equal to
<     less than              >=    greater than or equal to
=     equals                 &&    and
!=    not equals             ||    or

~~    JavaRegex
~     Matches
/~    MatchesPath

Para ver una lista completa, consulta Operadores en la referencia de condiciones.

"value"
El valor con el que se evalúa la propiedad de la variable de flujo. Normalmente, se trata de un tipo básico, como un número entero o una cadena. Por ejemplo, 200 o /cat. El valor puede incluir caracteres comodín, como asteriscos y otros caracteres para la coincidencia de patrones, tal como se describe en Coincidencia de patrones con condicionales.

Ejemplo 1

En el siguiente ejemplo se comprueba si la propiedad verb de la variable de flujo request es 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 solicitud es una GET, en este ejemplo se ejecuta la política Log-Request-OK.

Ejemplo 2

En el siguiente ejemplo se comprueba el código de respuesta:

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

En función del valor del código, se ejecuta una política diferente.

Atributos

El elemento <Condition> no tiene atributos.

Elementos secundarios

El elemento <Condition> no tiene elementos secundarios.

<Description>

Describe el flujo en términos legibles por humanos. Usa este elemento para proporcionar información sobre el flujo a ti mismo o a otros desarrolladores. La descripción no es visible externamente.

Tipo Cadena
Elemento(s) principal(es) <Flow>
<PreFlow>
<PostFlow>
Elemento(s) secundario(s) Ninguno

Sintaxis

El elemento <Description> utiliza la siguiente sintaxis:

<Description>flow_description</Description>

Ejemplo

En el siguiente ejemplo se muestra un elemento <Description> que especifica el propósito de un flujo:

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

Atributos

El elemento <Description> no tiene atributos.

Elementos secundarios

El elemento <Description> no tiene elementos secundarios.

<Flow>

Define un conjunto personalizado de pasos que ejecuta Apigee.

Tipo Objeto complejo
Elemento(s) principal(es) <Flows>
Elemento(s) secundario(s) <Condition>
<Description>
<Request>
<Response>

También puedes especificar un <Condition> en un <Flow>. En ese caso, Apigee solo ejecuta los pasos del flujo si la condición se evalúa como verdadera. De lo contrario, Apigee omitirá todo el flujo.

Un elemento <Flows> puede contener varios elementos <Flow>, cada uno con su propia condición y sus propios pasos. Cuando hay varios elementos <Flow>, Apigee ejecuta solo el primero en el que no hay ninguna condición o la condición se evalúa como verdadera.

Puedes definir un flujo predeterminado que se ejecute siempre (si no se ejecuta ninguno de los otros flujos condicionales). En función de cómo esté configurado tu proxy de API, puede ser una herramienta útil para protegerte frente a ataques maliciosos.

Sintaxis

El elemento <Flow> utiliza la siguiente sintaxis:

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

Todos los elementos secundarios de <Flow> son opcionales.

Ejemplo 1

En el siguiente ejemplo se muestra un <Flow> sencillo que siempre ejecuta la política "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>

Ejemplo 2

En el siguiente ejemplo se muestra un elemento <Flow> con varios pasos, cada uno con su propia condición:

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

Ejemplo 3

En el siguiente ejemplo se muestran varios flujos en un flujo condicional:

<!-- 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 ejecuta solo un flujo en un segmento. Ejecuta el primer flujo que no tiene una condición o cuya condición se resuelve como true.

Atributos

En la siguiente tabla se describen los atributos del elemento <Flow>:

Atributo Tipo Descripción
name Cadena Obligatorio: ID único del flujo. Por ejemplo, My-Conditional-Flow-1. El nombre no puede contener espacios ni otros caracteres especiales.

Elementos secundarios

En la siguiente tabla se describen los elementos secundarios de <Flow>:

Elemento secundario Tipo Descripción
<Condition> Cadena Define una instrucción condicional que se procesa en el tiempo de ejecución. Si la instrucción se evalúa como verdadera, se ejecuta el flujo (y todos sus pasos). Si la instrucción se evalúa como falsa, se ignora el flujo (y todos sus pasos).
<Description> Cadena Proporciona una breve descripción del flujo. Esta descripción no es visible externamente.
<Request> Objeto complejo Especifica los pasos y las condiciones del segmento de solicitud.
<Response> Objeto complejo Especifica los pasos y las condiciones del segmento de respuesta.

<Flows>

Contiene cero o más elementos <Flow>.

Tipo Objeto complejo
Elemento(s) principal(es) <ProxyEndpoint>
<TargetEndpoint>
Elemento(s) secundario(s) <Flow>

Si hay varios elementos <Flow> en <Flows>, solo se ejecutará uno.<Flow> Este será el primer flujo que no tenga un <Condition> o cuya condición se resuelva como true.

Puedes definir un flujo predeterminado que se ejecute siempre (si no se ejecuta ninguno de los demás flujos). En función de cómo esté configurado tu proxy de API, puede ser una herramienta útil para protegerte frente a ataques maliciosos.

Sintaxis

El elemento <Flows> utiliza la siguiente sintaxis:

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

Todos los elementos secundarios de <Flows> son opcionales.

Ejemplo 1

En el siguiente ejemplo se muestra un elemento <Flows> sencillo con un solo <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 ejecuta una de estas políticas en función del sufijo de ruta que obtiene de la variable de flujo proxy. Si el sufijo de la ruta no cumple ninguna de las condiciones, Apigee no ejecuta este flujo.

Ejemplo 2

En el siguiente ejemplo se muestran varios elementos <Flow> dentro de <Flows>, cada uno con su propio <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 solo ejecuta el primer flujo de un segmento cuya condición se evalúa como verdadera. Después, Apigee omite los flujos restantes del segmento.

Ejemplo 3

En el siguiente ejemplo se muestra un <Flow> "predeterminado":

<!-- 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 solo ejecuta el primer flujo de un segmento cuya condición se evalúa como verdadera. Si no se ejecuta ningún flujo condicional, se ejecuta el tercer flujo de este ejemplo (sin condición).

Un flujo predeterminado puede ser una herramienta útil para protegerse frente a ataques maliciosos.

Atributos

El elemento <Flows> no tiene atributos.

Elementos secundarios

El elemento <Flows> tiene los siguientes elementos secundarios:

Elemento secundario Tipo Descripción
<Flow> Objeto complejo Flujo que define un conjunto de pasos posible dentro del flujo condicional.

<Name>

Especifica el ID de la política que se va a ejecutar en un <Flow>.

Tipo Cadena
Elemento(s) principal(es) <Step>
Elemento(s) secundario(s) Ninguno

Sintaxis

El elemento <Name> utiliza la siguiente sintaxis:

<Name>policy_name</Name>

Ejemplo

En el siguiente ejemplo se muestran dos políticas que se añaden a los flujos por su nombre:

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

Atributos

El elemento <Name> no tiene atributos.

Elementos secundarios

El elemento <Name> no tiene elementos secundarios.

<PostFlow>

Define los pasos que se deben seguir en PostFlow de la solicitud y la respuesta.

Tipo Objeto complejo
Elemento(s) principal(es) <ProxyEndpoint>
<TargetEndpoint>
Elemento(s) secundario(s) <Description>
<Request>
<Response>

El elemento <PostFlow> utiliza la siguiente sintaxis:

Sintaxis

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

Ejemplo

En el siguiente ejemplo se muestra un PostFlow con pasos definidos tanto para la solicitud como para la respuesta:

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

Atributos

En la siguiente tabla se describen los atributos del elemento <PostFlow>:

Atributo Tipo Descripción
name Cadena ID único del flujo (único en el endpoint). Por ejemplo, My-PostFlow-1. El valor no puede incluir espacios ni otros caracteres especiales.

Elementos secundarios

En la siguiente tabla se describen los elementos secundarios de <PostFlow>:

Elemento secundario Tipo Descripción
<Description> Cadena Proporciona una breve descripción del flujo.
<Request> Objeto complejo Define las políticas que se deben ejecutar durante el PostFlow de la solicitud.
<Response> Objeto complejo Define las políticas que se van a ejecutar durante el PostFlow de la respuesta.

<EventFlow>

Define los pasos que se deben seguir en el EventFlow. EventFlow se usa para admitir el streaming de eventos enviados por el servidor. Para obtener más información, consulta Transmitir eventos enviados por el servidor.

Tipo Objeto complejo
Elemento(s) principal(es) <TargetEndpoint>
Elemento(s) secundario(s) <Description>
<Response>

El elemento EventFlow utiliza la siguiente sintaxis:

Sintaxis

  <EventFlow name="flow_name" content-type="text/event-stream">>
    <Description>flow_description</Description>
    <Response>
      <Step>
        <Name>policy_name</Name>
      </Step>
    </Response>
  </EventFlow>

Ejemplo

En el siguiente ejemplo se muestra un EventFlow:

<TargetEndpoint name="default">
  <EventFlow name="EF-1" content-type="text/event-stream">
    <Response>
      <Step>
        <Name>Raise-Fault-Cred-Invalid</Name>
        <Condition>fault.name equals "invalid_access_token"</Condition>
      </Step>
    </Response>
  </EventFlow>
  <HTTPTargetConnection>
</TargetEndpoint></pre>

Atributos

En la siguiente tabla se describen los atributos del elemento EventFlow:

Atributo Tipo Descripción
name Cadena ID único del flujo (único en el endpoint). Por ejemplo, My-EventFlow-1. El valor no puede incluir espacios ni otros caracteres especiales.
content-type Cadena (Obligatorio) Debe tener el valor content-type="text/event-stream".

Elementos secundarios

En la siguiente tabla se describen los elementos secundarios de EventFlow:

Elemento secundario Tipo Descripción
<Description> Cadena Proporciona una breve descripción del flujo.
<Response> Objeto complejo Define las políticas que se deben ejecutar durante el EventFlow de la respuesta.

<PostClientFlow>

Define las políticas de ProxyEndpoint que se ejecutan solo después de que se haya devuelto una respuesta al cliente. Estas políticas suelen registrar mensajes relacionados con la respuesta.

Tipo Objeto complejo
Elemento(s) principal(es) <ProxyEndpoint>
Elemento(s) secundario(s) <Description>
<Response>

Sintaxis

El elemento <PostClientFlow> utiliza la siguiente sintaxis:

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

Todos los elementos secundarios de <PostClientFlow> son opcionales.

Ejemplo

En el siguiente ejemplo se muestra un PostClientFlow sencillo que ejecuta una sola política:

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

Atributos

En la siguiente tabla se describen los atributos del elemento <PostClientFlow>:

Atributo Tipo Descripción
name Cadena ID único del flujo. El nombre no puede incluir espacios ni otros caracteres especiales. Por ejemplo, My-PostClientFlow-1.

Elementos secundarios

En la siguiente tabla se describen los elementos secundarios de <PostClientFlow>:

Elemento secundario Tipo Descripción
<Description> Cadena Proporciona una breve descripción del flujo.
<Response> Objeto complejo Define las políticas que se van a ejecutar durante el PostFlow de la respuesta.

<PreFlow>

Define las políticas que se van a ejecutar en el PreFlow de la solicitud y la respuesta.

Tipo Objeto complejo
Elemento(s) principal(es) <ProxyEndpoint>
<TargetEndpoint>
Elemento(s) secundario(s) <Description>
<Request>
<Response>

Sintaxis

El elemento <PreFlow> utiliza la siguiente sintaxis:

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

Todos los elementos secundarios de <PreFlow> son opcionales.

Ejemplo

En el siguiente ejemplo se muestra un PreFlow con un flujo de solicitud y un flujo de respuesta definidos:

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

Atributos

En la siguiente tabla se describen los atributos del elemento <PreFlow>:

Atributo Tipo Descripción
name Cadena ID único del flujo. El nombre no puede incluir espacios ni otros caracteres especiales. Por ejemplo, My-PreFlow-1.

Elementos secundarios

En la siguiente tabla se describen los elementos secundarios de <PreFlow>:

Elemento secundario Tipo Descripción
<Description> Cadena Proporciona una breve descripción del flujo.
<Request> Objeto complejo Define las políticas que se ejecutarán durante el PreFlow de la solicitud.
<Response> Objeto complejo Define las políticas que se van a ejecutar durante el PreFlow de la respuesta.

<Request>

Define las políticas que se van a ejecutar durante el segmento de solicitud del flujo.

Tipo Objeto complejo
Elemento(s) principal(es) <Flow>
<PreFlow>
<PostFlow>
Elemento(s) secundario(s) <Step>

Sintaxis

El elemento <Request> utiliza la siguiente sintaxis:

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

Todos los elementos secundarios de <Request> son opcionales.

Ejemplo

En el siguiente ejemplo se muestran los flujos definidos para la solicitud en PreFlow y 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>

Atributos

El elemento <Request> no tiene atributos.

Elementos secundarios

En la siguiente tabla se describen los elementos secundarios de <Request>:

Elemento secundario Tipo Descripción
<Step> Cadena Especifica una política que se va a ejecutar en el segmento de solicitud. Este tipo de hijo puede aparecer varias veces.

<Response>

Define las políticas que se van a ejecutar durante el segmento de respuesta del flujo.

Tipo Objeto complejo
Elemento(s) principal(es) <Flow>
<PreFlow>
<PostClientFlow>
<PostFlow>
Elemento(s) secundario(s) <Step>

Sintaxis

El elemento <Response> utiliza la siguiente sintaxis:

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

Todos los elementos secundarios de <Response> son opcionales.

Ejemplo

En el siguiente ejemplo se muestran los flujos definidos para la respuesta, tanto en PreFlow como en 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>

Atributos

El elemento <Response> no tiene atributos.

Elementos secundarios

En la siguiente tabla se describen los elementos secundarios de <Response>:

Elemento secundario Tipo Descripción
<Step> Cadena Especifica una política que se va a ejecutar en el segmento de respuesta. Este tipo de hijo puede aparecer varias veces.

<Step>

Especifica una política que se va a ejecutar y, opcionalmente, una condición que determina si se debe ejecutar esa política.

Tipo Objeto complejo
Elemento(s) principal(es) <Request>
<Response>
Elemento(s) secundario(s) <Condition>
<Name>

Se puede definir más de un paso en un <Flow>, y los pasos se ejecutan en el orden en el que se definen en el XML del flujo.

Los pasos sin condición se ejecutan siempre. Los pasos con una condición solo se ejecutan si la condición se evalúa como verdadera. Si la condición se evalúa como falsa, Apigee omite el paso.

Sintaxis

El elemento <Step> utiliza la siguiente sintaxis:

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

Solo puede haber un <Condition> y un <Name> por cada <Step>, pero puede haber varios pasos en un <Flow>.

Todos los elementos secundarios de <Step> son opcionales.

Ejemplo 1

En el siguiente ejemplo se muestra un paso con una condición y otro sin ella:

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

El paso sin la condición se ejecutará cada vez durante el segmento de solicitud. El paso con una condición solo se ejecutará cuando la solicitud sea "GET" durante el segmento de respuesta.

Ejemplo 2

En el siguiente ejemplo se muestran varios pasos en un solo 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>

Los pasos sin condición se ejecutan siempre.

Atributos

El elemento <Step> no tiene atributos.

Elementos secundarios

En la siguiente tabla se describen los elementos secundarios de <Step>:

Elemento secundario Tipo Descripción
<Condition> Cadena Define una instrucción condicional para el paso que se procesa en el tiempo de ejecución. Si la instrucción se evalúa como verdadera, Apigee ejecuta el paso. Si la instrucción se evalúa como falsa, Apigee omite el paso.
<Name> Cadena Especifica el ID de la política que se va a ejecutar en el flujo actual.