Referência de configuração do fluxo

Esta página se aplica à Apigee e à Apigee híbrida.

Confira a documentação da Apigee Edge.

Nesta seção, fornecemos informações de referência sobre os elementos XML usados para definir os fluxos de proxy da API.

Hierarquia e sintaxe

Os exemplos a seguir mostram a hierarquia e a sintaxe dos elementos de configuração de fluxo:

Hierarquia de elementos

O exemplo a seguir mostra a hierarquia dos elementos de configuração de fluxo nos elementos <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>

Sintaxe

O exemplo a seguir mostra a sintaxe dos elementos de configuração do fluxo. Cada um desses elementos é descrito em detalhes nas seções a seguir:

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

Use esses elementos para definir a execução de PreFlow, fluxo condicional, PostFlow e PostClientFlow.

<Condition>

Define uma instrução processada no ambiente de execução. Se a instrução for avaliada como verdadeira, a etapa ou o fluxo associado à condição será executado. Se a instrução for avaliada como falsa, a etapa ou o fluxo será ignorado.

Tipo String
Elementos pais <Flow>
<Step>
Elementos filhos Nenhum

É possível aplicar uma condição a uma etapa específica ou a um fluxo inteiro, dependendo se o elemento é colocado no <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>

Se uma condição em um <Step> for avaliada como verdadeira, a Apigee executará essa etapa. Se a condição for avaliada como falsa, ela ignorará a etapa.

Se uma condição em <Flow> for avaliada como verdadeira, a Apigee processará todas as etapas no fluxo. Se a condição for avaliada como falsa, ela ignorará todo o fluxo.

Sintaxe

O elemento <Condition> usa a seguinte sintaxe:

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

Em que:

property
A propriedade da variável de fluxo que você quer usar na condição. Por exemplo, a variável de fluxo request tem propriedades chamadas path e content. Para usá-los em uma condição, especifique o flow_variable[ponto]property_name:
request.path
request.content

Para uma lista completa de variáveis de fluxo e as respectivas propriedades, consulte Referência de variáveis de fluxo.

operator
Uma construção que define como a condição é avaliada. Operadores comuns incluem:
>     greater than           <=    less than or equal to
<     less than              >=    greater than or equal to
=     equals                 &&    and
!=    not equals             ||    or

~~    JavaRegex
~     Matches
/~    MatchesPath

Para uma lista completa, consulte Operadores na referência de condições.

"value"
O valor de referência usado para avaliar a propriedade da variável de fluxo. Geralmente, esse é um tipo básico, como número inteiro ou string. Por exemplo, 200 ou /cat. O valor pode incluir caracteres curinga, como asteriscos e outros caracteres para correspondência de padrões, conforme descrito em Correspondência de padrões com condicionais.

Exemplo 1

O exemplo a seguir verifica se a propriedade verb da variável de fluxo 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 a solicitação for um GET, este exemplo executará a política Log-Request-OK.

Exemplo 2

O exemplo a seguir verifica o código de resposta:

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

Dependendo do valor do código, uma política diferente é executada.

Atributos

O elemento <Condition> não tem atributos.

Elementos filhos

O elemento <Condition> não tem elementos filhos.

<Description>

Descreve o fluxo em termos legíveis. Use esse elemento para fornecer informações sobre o fluxo para você ou outros desenvolvedores. A descrição não é visível externamente.

Tipo String
Elementos pais <Flow>
<PreFlow>
<PostFlow>
Elementos filhos Nenhum

Sintaxe

O elemento <Description> usa a seguinte sintaxe:

<Description>flow_description</Description>

Exemplo

O exemplo a seguir mostra um elemento <Description> que especifica a finalidade de um fluxo:

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

O elemento <Description> não tem atributos.

Elementos filhos

O elemento <Description> não tem elementos filhos.

<Flow>

Define um conjunto personalizado de etapas executadas pela Apigee.

Tipo Objeto complexo
Elementos pais <Flows>
Elementos filhos <Condition>
<Description>
<Request>
<Response>

Opcionalmente, especifique um <Condition> em um <Flow>. Nesse caso, a Apigee só executará as etapas no fluxo se a condição for avaliada como verdadeira. Caso contrário, a Apigee ignorará todo o fluxo.

Um elemento <Flows> pode conter vários elementos <Flow>, cada um com sua própria condição e etapas. Quando há vários elementos <Flow>, a Apigee executa apenas o primeiro em que não há condição ou a condição é avaliada como verdadeira.

É possível definir um fluxo padrão que sempre seja executado (se nenhum dos outros fluxos condicionais permitir). Dependendo da configuração do proxy da API, essa pode ser uma ferramenta útil para proteção contra ataques maliciosos.

Sintaxe

O elemento <Flow> usa a seguinte sintaxe:

<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 os elementos filhos de <Flow> são opcionais.

Exemplo 1

O exemplo a seguir mostra um <Flow> simples que sempre executa a 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>

Exemplo 2

O exemplo a seguir mostra uma <Flow> com várias etapas, cada uma com a própria condição:

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

Exemplo 3

O exemplo a seguir mostra vários fluxos em um fluxo 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>

A Apigee executa apenas um fluxo em um segmento, ou seja, o primeiro fluxo que não tem uma condição ou com a condição resolvida como verdadeira.

Atributos

A tabela a seguir descreve os atributos do elemento <Flow>:

Atributo Tipo Descrição
name String (Obrigatório) Um ID exclusivo para o fluxo. Por exemplo, My-Conditional-Flow-1. O nome não pode ter espaços ou outros caracteres especiais.

Elementos filhos

A tabela a seguir descreve os elementos filhos de <Flow>:

Elemento filho Tipo Descrição
<Condition> String Define uma instrução condicional processada no ambiente de execução. Se a instrução for avaliada como verdadeira, o fluxo (e todas as etapas) serão executados. Se a instrução for avaliada como falsa, o fluxo (e todas as etapas) serão ignorados.
<Description> String Fornece uma breve descrição do fluxo. Essa descrição não é visível externamente.
<Request> Objeto complexo Especifica as etapas e condições para o segmento de solicitação.
<Response> Objeto complexo Especifica as etapas e condições do segmento de resposta.

<Flows>

Contém zero ou mais elementos <Flow>.

Tipo Objeto complexo
Elementos pais <ProxyEndpoint>
<TargetEndpoint>
Elementos filhos <Flow>

Se houver vários elementos <Flow> em <Flows>, apenas um <Flow> será executado. Este será o primeiro fluxo que não tem <Condition> ou com condição é resolvida como verdadeira.

É possível definir um fluxo padrão que sempre seja executado (se nenhum dos outros fluxos permitir). Dependendo da configuração do proxy da API, essa pode ser uma ferramenta útil para proteção contra ataques maliciosos.

Sintaxe

O elemento <Flows> usa a seguinte sintaxe:

<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 os elementos filhos de <Flows> são opcionais.

Exemplo 1

O exemplo a seguir mostra um elemento <Flows> simples com um único <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>

A Apigee executa uma dessas políticas com base no sufixo do caminho coletado na variável de fluxo proxy. Se o sufixo do caminho não corresponder a nenhuma das condições, a Apigee não executará esse fluxo.

Exemplo 2

O exemplo a seguir mostra vários elementos <Flow> em <Flows>, cada um com o próprio <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>

A Apigee executa apenas o primeiro fluxo em um segmento com condição avaliada como verdadeira. Depois disso, ela pula os fluxos restantes no segmento.

Exemplo 3

O exemplo a seguir mostra um <Flow> "padrão":

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

A Apigee executa apenas o primeiro fluxo em um segmento com condição avaliada como verdadeira. Se nenhum fluxo condicional for executado, o terceiro fluxo nesse exemplo (sem condição) será executado.

Um fluxo padrão pode ser uma ferramenta útil na proteção contra ataques maliciosos.

Atributos

O elemento <Flows> não tem atributos.

Elementos filhos

O elemento <Flows> tem os seguintes elementos filhos:

Elemento filho Tipo Descrição
<Flow> Objeto complexo Um fluxo que define um conjunto possível de etapas do fluxo condicional.

<Name>

Especifica o ID da política a ser executada em um <Flow>.

Tipo String
Elementos pais <Step>
Elementos filhos Nenhum

Sintaxe

O elemento <Name> usa a seguinte sintaxe:

<Name>policy_name</Name>

Exemplo

O exemplo a seguir mostra duas políticas que são adicionadas aos fluxos pelo 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>

Atributos

O elemento <Name> não tem atributos.

Elementos filhos

O elemento <Name> não tem elementos filhos.

<PostFlow>

Define as etapas para receber o PostFlow da solicitação e da resposta.

Tipo Objeto complexo
Elementos pais <ProxyEndpoint>
<TargetEndpoint>
Elementos filhos <Description>
<Request>
<Response>

O elemento <PostFlow> usa a seguinte sintaxe:

Sintaxe

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

Exemplo

O exemplo a seguir mostra um PostFlow com as etapas de solicitação e resposta definidas:

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

A tabela a seguir descreve os atributos do elemento <PostFlow>:

Atributo Tipo Descrição
name String Um ID exclusivo para o fluxo (exclusivo no endpoint). Por exemplo, My-PostFlow-1. O valor não pode incluir espaços ou outros caracteres especiais.

Elementos filhos

A tabela a seguir descreve os elementos filhos de <PostFlow>:

Elemento filho Tipo Descrição
<Description> String Fornece uma breve descrição do fluxo.
<Request> Objeto complexo Define as políticas a serem executadas durante o PostFlow da solicitação.
<Response> Objeto complexo Define as políticas a serem executadas durante o PostFlow da resposta.

<PostClientFlow>

Define políticas no ProxyEndpoint que são executadas somente depois que uma resposta é retornada ao cliente. Essas políticas geralmente registram mensagens relacionadas à resposta.

Tipo Objeto complexo
Elementos pais <ProxyEndpoint>
Elementos filhos <Description>
<Response>

Sintaxe

O elemento <PostClientFlow> usa a seguinte sintaxe:

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

Todos os elementos filhos de <PostClientFlow> são opcionais.

Exemplo

O exemplo a seguir mostra um PostClientFlow simples que executa uma única 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

A tabela a seguir descreve os atributos do elemento <PostClientFlow>:

Atributo Tipo Descrição
name String Um ID exclusivo para o fluxo. O nome não pode incluir espaços ou outros caracteres especiais. Por exemplo, My-PostClientFlow-1

Elementos filhos

A tabela a seguir descreve os elementos filhos de <PostClientFlow>:

Elemento filho Tipo Descrição
<Description> String Fornece uma breve descrição do fluxo.
<Response> Objeto complexo Define as políticas a serem executadas durante o PostFlow da resposta.

<PreFlow>

Define as políticas a serem executadas no PreFlow da solicitação e da resposta.

Tipo Objeto complexo
Elementos pais <ProxyEndpoint>
<TargetEndpoint>
Elementos filhos <Description>
<Request>
<Response>

Sintaxe

O elemento <PreFlow> usa a seguinte sintaxe:

<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 os elementos filhos de <PreFlow> são opcionais.

Exemplo

O exemplo a seguir mostra um PreFlow com uma solicitação e um fluxo de resposta 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

A tabela a seguir descreve os atributos do elemento <PreFlow>:

Atributo Tipo Descrição
name String Um ID exclusivo para o fluxo. O nome não pode incluir espaços ou outros caracteres especiais. Por exemplo, My-PreFlow-1

Elementos filhos

A tabela a seguir descreve os elementos filhos de <PreFlow>:

Elemento filho Tipo Descrição
<Description> String Fornece uma breve descrição do fluxo.
<Request> Objeto complexo Define as políticas a serem executadas durante o PreFlow da solicitação.
<Response> Objeto complexo Define as políticas a serem executadas durante o PreFlow da resposta.

<Request>

Define as políticas a serem executadas durante o segmento de solicitação do fluxo.

Tipo Objeto complexo
Elementos pais <Flow>
<PreFlow>
<PostFlow>
Elementos filhos <Condition>
<Step>

Sintaxe

O elemento <Request> usa a seguinte sintaxe:

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

Todos os elementos filhos de <Request> são opcionais.

Exemplo

O exemplo a seguir mostra fluxos definidos para a solicitação no PreFlow e no 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

O elemento <Request> não tem atributos.

Elementos filhos

A tabela a seguir descreve os elementos filhos de <Request>:

Elemento filho Tipo Descrição
<Condition> Objeto complexo Determina se as etapas do segmento de solicitação são executadas.
<Step> String Especifica uma política a ser executada do segmento da solicitação.

<Response>

Define as políticas a serem executadas durante o segmento de resposta do fluxo.

Tipo Objeto complexo
Elementos pais <Flow>
<PreFlow>
<PostClientFlow>
<PostFlow>
Elementos filhos <Condition>
<Step>

Sintaxe

O elemento <Response> usa a seguinte sintaxe:

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

Todos os elementos filhos de <Response> são opcionais.

Exemplo

O exemplo a seguir mostra fluxos definidos para a resposta no PreFlow e no 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

O elemento <Response> não tem atributos.

Elementos filhos

A tabela a seguir descreve os elementos filhos de <Response>:

Elemento filho Tipo Descrição
<Condition> String Determina se as etapas do segmento de resposta são executadas.
<Step> String Especifica uma política a ser executada no segmento da resposta.

<Step>

Especifica uma política a ser executada e, opcionalmente, uma condição que determina se é necessário executá-la.

Tipo Objeto complexo
Elementos pais <Request>
<Response>
Elementos filhos <Condition>
<Name>

Pode haver mais de uma etapa definida em um <Flow> e as etapas são executadas na ordem em que são definidas no XML do fluxo.

Etapas sem condição sempre são executadas. As etapas com condição serão executadas somente se a condição for avaliada como verdadeira. Se a condição for avaliada como falsa, a Apigee ignorará a etapa.

Sintaxe

O elemento <Step> usa a seguinte sintaxe:

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

Pode haver apenas um <Condition> e um <Name> por <Step>, mas pode haver várias etapas em um <Flow>.

Todos os elementos filhos de <Step> são opcionais.

Exemplo 1

O exemplo a seguir mostra uma etapa com condição e uma etapa sem condição:

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

A etapa sem condição será executada todas as vezes durante o segmento de solicitação. A etapa com uma condição será executada apenas quando a solicitação for "GET" durante o segmento de resposta.

Exemplo 2

O exemplo a seguir mostra várias etapas em um único 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>

Etapas sem condição sempre são executadas.

Atributos

O elemento <Step> não tem atributos.

Elementos filhos

A tabela a seguir descreve os elementos filhos de <Step>:

Elemento filho Tipo Descrição
<Condition> String Define uma instrução condicional processada para a etapa no ambiente de execução. Se a instrução for avaliada como verdadeira, a Apigee executará a etapa. Se a instrução for avaliada como falsa, ela pulará a etapa.
<Name> String Especifica o ID da política a ser executada no fluxo atual.