Como encadear proxies de API

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

Confira a documentação da Apigee Edge.

Você pode especificar que um proxy é o endpoint de destino de outro, conectando efetivamente os dois proxies em uma cadeia de proxy. Encadear proxies dessa maneira pode ajudar a evitar um salto de rede e, portanto, melhorar o desempenho geral.

Com o encadeamento de proxy, você especifica que um proxy é o endpoint de destino local do outro. Em vez de usar o elemento HTTPTargetConnection para fazer uma chamada para o segundo proxy, use o elemento LocalTargetConnection.

<LocalTargetConnection>
    <APIProxy>myproxy2</APIProxy>
    <ProxyEndpoint>default</ProxyEndpoint>
</LocalTargetConnection>

A cadeia de proxy pode ser útil quando você tem um proxy que oferece alguma funcionalidade discreta de baixo nível que outros proxies consumirão. Por exemplo, um proxy que expõe operações de criação/leitura/atualização/exclusão com um armazenamento de dados de back-end pode ser o proxy de destino para vários outros proxies que expõem os dados aos clientes.

Vídeo: assista a um pequeno vídeo para saber mais sobre o encadeamento de proxies de API.

Como funciona o encadeamento de proxy

O encadeamento de proxy usa uma conexão local para minimizar a sobrecarga de rede ao chamar um proxy de outro. Essa conexão local é mais eficiente porque ignora recursos de rede, como balanceadores de carga, roteadores e processadores de mensagens.

Veja a seguir a diferença entre a conexão de proxies com HTTPTargetConnection e LocalTargetConnection (encadeamento de proxy):

Diagrama de chamada de proxy para proxy sem encadeamento de proxy.

Diagrama de chamada de proxy para proxy com encadeamento de proxy.

Você conecta proxies especificando que um é um endpoint de destino local do outro. Para a configuração no diagrama acima (chamada de proxy para proxy com encadeamento de proxy), você especificaria que ProxyB (/proxyB) é um endpoint de destino local de ProxyA (/proxyA). Isso faz com que as solicitações recebidas no ProxyA sejam encaminhadas para o ProxyB.

Você pode criar uma conexão local entre proxies de duas maneiras:

  • Especificando o nome do proxy de destino e um nome ProxyEndpoint
  • Especificando um caminho para o endpoint do proxy de destino

Você conecta proxies de destino em uma configuração TargetEndpoint usando um elemento LocalTargetConnection, conforme descrito abaixo.

Como conectar proxies por nome de proxy

É possível especificar o proxy de destino pelo nome. Isso pode ser útil quando você cria a conexão desde o início e desenvolve os proxies juntos. Se você não souber o nome (ou o nome pode mudar), considere se conectar com o caminho de endpoint do proxy de destino, conforme descrito abaixo.

Ao se conectar a um proxy de destino por nome, você especifica o nome do proxy e o nome de ProxyEndpoint.

O exemplo a seguir especifica um proxy de destino chamado data-manager, com o nome ProxyEndpoint exposto por data-manager. Para informações de referência, consulte a referência de configuração do proxy de API.

<TargetEndpoint name="datamanager">
    <PreFlow name="PreFlow">
        <!-- PreFlow policies -->
    </PreFlow>
    <PostFlow name="PostFlow">
        <!-- PostFlow policies -->
    </PostFlow>
    <LocalTargetConnection>
        <APIProxy>data-manager</APIProxy>
        <ProxyEndpoint>default</ProxyEndpoint>
    </LocalTargetConnection>
</TargetEndpoint>

Como conectar proxies por caminho

É possível especificar o proxy de destino por caminho de endpoint. Convém fazer isso dessa maneira quando você não souber o nome do proxy ou quando ele for alterado.

Se o proxy for simplesmente o consumidor do proxy de destino, como quando você não está desenvolvendo ambos, o caminho pode ser a maneira mais confiável de se conectar. Por exemplo, se o proxy ao qual você está se conectando for desenvolvido e mantido por outra equipe, convém se conectar usando um caminho de endpoint confiável.

No exemplo a seguir, especificamos um proxy de destino em /v1/streetcarts/foodcarts/data-manager, em que o host é considerado igual ao proxy atual. Para informações de referência, consulte a referência da configuração do proxy de API.

<TargetEndpoint name="datamanager">
    <PreFlow name="PreFlow">
        <!-- PreFlow policies -->
    </PreFlow>
    <PostFlow name="PostFlow">
        <!-- PostFlow policies -->
    </PostFlow>
    <LocalTargetConnection>
        <Path>/v1/streetcarts/foodcarts/data-manager</Path>
    </LocalTargetConnection>
</TargetEndpoint>

O elemento <Path> em <LocalTargetConnection> pode ser uma string. Também é possível usar um modelo de mensagem para atribuir um valor dinamicamente.

Como conectar proxies usando a IU da Apigee

Também é possível conectar proxies, por nome de proxy ou caminho, usando a IU da Apigee. No exemplo a seguir, há dois proxies, ProxyA e ProxyB, e você quer que o ProxyB seja um endpoint de destino do ProxyA. Para conectar os proxies pelo nome do proxy, siga estes passos:

  1. Faça login na IU da Apigee.
  2. Selecione Desenvolver > Proxies no painel esquerdo.
  3. Na lista de proxies, selecione ProxyA.
  4. Clique na guia Desenvolver.
  5. No painel Código, substitua a seção <TargetEndpoint> do XML pelo seguinte:
    <TargetEndpoint>
      <LocalTargetConnection>
        <APIProxy>ProxyB</APIProxy>
        <ProxyEndpoint>default</ProxyEndpoint>
      </LocalTargetConnection>
    </TargetEndpoint>
  6. Clique em Save.

Proxies em cadeia, produtos de API e segurança

O encadeamento de proxy é ideal nos casos em que ambos os proxies estão no mesmo produto da API. Por padrão, ambos estão disponíveis para os clientes. No momento, a Apigee não oferece suporte ao agrupamento do segundo proxy em um produto de API separado, em que os clientes não podem ter acesso.

Se o segundo proxy precisar ser protegido contra solicitações de cliente direto, considere adicionar lógica para que o segundo proxy examine o endereço IP do cliente. No caso de uma chamada feita por encadeamento, o endereço IP será local. O código pode validar que ele é local antes de permitir que o processamento continue. Consulte a Política de controle de acesso para ver uma maneira de fazer isso.