Fluxos condicionais

Esta página aplica-se ao Apigee e ao Apigee Hybrid.

Veja a documentação do Apigee Edge.

Num fluxo condicional, as políticas são executadas apenas se a condição do fluxo for avaliada como true (ao contrário das políticas anexadas ao PreFlow ou PostFlow, que são sempre executadas). Esta secção descreve como criar um fluxo condicional.

Acerca dos fluxos condicionais

Durante o processamento de um pedido e de uma resposta, apenas é executado um fluxo condicional por segmento, ou seja, o primeiro fluxo cuja condição é avaliada como true.

Pode criar condições que incluam os operadores ||(OU) e &&(E). No entanto, por predefinição, o operador || tem uma precedência superior ao operador &&. Por exemplo, uma condição escrita como A && B || C && D é avaliada como A && (B || C) && D. Certifique-se de que coloca a expressão entre parênteses se quiser alterar a precedência quando usar estes operadores.

Os exemplos seguintes ilustram algumas formas de usar fluxos condicionais.

Exemplo 1

A seguinte definição de ProxyEndpoint mostra um fluxo condicional que é executado pelo ProxyEndpoint em qualquer pedido HTTP GET ao proxy de API:

<ProxyEndpoint name="default">
  <PreFlow>
    <Request/>
    <Response/>
  </PreFlow>
  <Flows>
    <Flow name="Flow-1">
      <Condition>request.verb="GET"</Condition>
      <Request/>
      <Response/>
    </Flow>
  </Flows>
  <PostFlow>
    <Request/>
    <Response/>
  </PostFlow>
  ...
</ProxyEndpoint>

Tenha em atenção que a condição faz referência à request.verb variável flow. Uma variável de fluxo é uma referência com nome que contém informações de estado associadas a uma transação de API processada pelo Apigee. O Apigee define muitas variáveis de estado que pode referenciar.

Exemplo 2

Se o seu serviço de back-end fornecer relatórios meteorológicos e previsões meteorológicas, a sua API pode definir dois fluxos condicionais que mapeiam esses recursos da API: /reports e /forecasts. Quando uma chamada API inclui um desses recursos no URL, a condição é avaliada como verdadeira e a lógica anexada ao fluxo condicional é executada.

Em seguida, os programadores de apps acedem aos seus recursos fazendo pedidos a um URL no seguinte formato:

http://myAPIs.myCo.com/weather/reports

ou:

http://myAPIs.myCo.com/weather/forecasts

Num proxy de API, pode definir um fluxo condicional que corresponda a um recurso específico:

<ProxyEndpoint name="default">
  <PreFlow>
    <Request/>
    <Response/>
  </PreFlow>
  <Flows>
    <Flow name="Flow-1">
      <Condition>(proxy.pathsuffix MatchesPath "/reports")</Condition>
      <Request/>
      <Response/>
    </Flow>
    <Flow name="Flow-2">
      <Condition>(proxy.pathsuffix MatchesPath "/forecasts")</Condition>
      <Request/>
      <Response/>
    </Flow>
  </Flows>
  <PostFlow>
    <Request/>
    <Response/>
  </PostFlow>
  ...
</ProxyEndpoint>

Neste exemplo, faz referência à variável de fluxo proxy.pathsuffix, que contém a parte do sufixo do URL usado para aceder ao proxy de API. Em seguida, pode anexar políticas diferentes ao fluxo condicional para cada recurso.

Exemplo: criar um fluxo condicional

O exemplo seguinte:

  • Cria um fluxo condicional que é executado apenas quando a mensagem de pedido é um HTTP GET.
  • Adiciona uma política ao novo fluxo.

Adicionar um fluxo condicional

Novo editor de proxy

Para adicionar um fluxo condicional:

  1. Selecione o separador Desenvolver no editor de proxy.
  2. Selecione Terminais de proxy > predefinição no painel do lado esquerdo.

    Selecione Proxy endpoints > default no painel do lado esquerdo.

    Nota: pode ter de expandir o editor visual no painel do lado direito para ver todos os elementos. Para o fazer, clique e arraste ligeiramente a barra de divisão entre o editor visual e o editor de texto.

  3. Clique no botão + acima do painel Resposta.

    Botão Adicionar fluxo condicional

  4. Na caixa de diálogo Adicionar fluxo condicional, selecione Caminho e verbo e, no campo Caminho, introduza o sufixo do caminho que quer que esteja no caminho do pedido para que o fluxo condicional seja executado. Consulte o Exemplo 2 acima.

    Botão Adicionar fluxo condicional

    O fluxo condicional só é executado se o pedido for um pedido GET (mas não para PUT, POST, etc.).

    O novo fluxo, denominado Flow-1, é agora apresentado no painel Ponto final do proxy.

    Fluxo condicional apresentado nos pontos finais do proxy.

  5. O código XML do novo fluxo condicional é apresentado no editor de texto.

    Fluxo condicional apresentado nos pontos finais do proxy.

Se quiser, pode editar o elemento Condição. Consulte o artigo Adicionar lógica aos fluxos.

Anexar uma política ao fluxo

Agora que criou o fluxo condicional, pode anexar-lhe uma política. O exemplo seguinte adiciona uma política de quotas, que restringe o número de mensagens de pedidos que um proxy de API permite durante um período, ao fluxo:

  1. No painel do lado esquerdo, clique no botão + à direita de Políticas.
  2. Na caixa de diálogo Criar política, clique no campo Selecionar tipo de política e desloque a página para baixo até Gestão de tráfego e selecione Quota.
  3. Clique em Criar para criar a política.
  4. Clique no botão + junto a Flow-1 no painel Pedido.

    Clique no botão de mais junto a Flow-1 no painel de pedidos.

  5. Na caixa de diálogo Adicionar passo de política, clique no campo Selecionar política existente e selecione Quota-1.
  6. Clique em Adicionar.

O painel Pedido apresenta agora o fluxo e a política anexada, Quota-1.

Painel de pedidos a mostrar o novo fluxo e a política de quotas.

O editor de texto apresenta agora um passo que contém a política Quota-1 no elemento Flow-1 do XML:

Fluxo condicional e política de quotas apresentados em XML

Com esta configuração, a política de quotas é aplicada aos pedidos de GET. Os pedidos de outros tipos não contribuem para o número máximo de pedidos na política de quotas.

Editor de proxy clássico

Para adicionar um fluxo condicional, selecione o separador Desenvolver no criador de proxy de API.

Separador Desenvolver do criador de proxies

Clique em no ponto final pretendido.

Botão Adicionar fluxo condicional

O formulário Novo fluxo condicional permite-lhe atribuir um nome ao fluxo e configurar uma condição. No exemplo seguinte, adiciona uma condição simples que avalia o HTTP da mensagem de pedido para um verbo GET (em oposição a PUT, POST, etc.) em qualquer URI após o caminho base.

No painel Novo fluxo condicional, o fluxo tem o nome Flow-1 e o tipo de condição,
    caminho e verbo estão configurados.

(Saiba como criar declarações condicionais em condições com variáveis de fluxo.)

O novo fluxo, denominado Flow-1, é agora apresentado no menu Navigator.

Flow-1 realçado

Agora, observe a configuração XML do ProxyEndpoint. Selecione Flow-1 no menu Navegador.

É apresentada a seguinte configuração.

<PreFlow name="PreFlow">
    <Request/>
    <Response/>
</PreFlow>
<Flows>
  <Flow name="Flow-1">
    <Request/>
    <Response/>
    <Condition>(proxy.pathsuffix MatchesPath "/**") and (request.verb = "GET")</Condition>
  </Flow>
</Flows>
<PostFlow name="PostFlow">
  <Request/>
  <Response/>
</PostFlow>

Depois de criar um fluxo condicional, este fica disponível para associação de políticas. Com o fluxo selecionado, clique no ícone + Passo no diagrama de pedido ou resposta para adicionar uma política nova ou existente ao fluxo.

No menu Navigator, é realçado um exemplo de fluxo condicional denominado problema e, no painel Flow, é apresentado o botão Step.

No painel Adicionar passo, é criada uma nova instância da política com o tipo de política Quota e o nome a apresentar Quota-2.

Ao anexar a política ao fluxo selecionado, está a configurar o proxy de API para aplicar a política de quota apenas a pedidos feitos a essa combinação de URI e verbo de fluxo. Por exemplo, se anexar a política ao fluxo learn no pedido, o seguinte XML é gerado no editor de texto:

<ProxyEndpoint name="default">
...
   <Flow name="issue">
        <Description/>
        <Request>
            <Step>
                <Name>Quota-2</Name>
            </Step>
        </Request>
        <Response/>
        <Condition>(proxy.pathsuffix MatchesPath "/issue/**") and (request.verb = "GET")</Condition>
    </Flow>
...
</ProxyEndpoint>

Nesta configuração, se um pedido GET for recebido no proxy de API com um padrão de URI .../issue/** (/issue/ com qualquer coisa no URI após a última barra invertida), a quota é aplicada a essa chamada de API.

Passos seguintes

Os seguintes tópicos fornecem mais detalhes sobre a criação de condições e a utilização de variáveis: