Antipatrón: invocar un proxy dentro de otro proxy mediante código personalizado o como destino

Estás consultando la documentación de Apigee y Apigee Hybrid.
Consulta la documentación de Apigee Edge.

Apigee te permite invocar un proxy de API desde otro proxy de API. Esta función es especialmente útil si tienes un proxy de API que contiene código reutilizable que pueden usar otros proxies de API.

Antipatrón

Si invocas un proxy de API desde otro mediante HTTPTargetConnection en el endpoint de destino o con código JavaScript personalizado, se producirá un salto de red adicional.

Invocar el proxy 2 desde el proxy 1 mediante HTTPTargetConnection

El siguiente código de ejemplo invoca el proxy 2 desde el proxy 1 mediante HTTPTargetConnection:

<!-- /antipatterns/examples/2-1.xml -->
<HTTPTargetConnection>
  <URL>https://api-test.example.com/proxy2</URL>
</HTTPTargetConnection>

Invocar el proxy 2 desde el proxy 1 mediante código JavaScript

En el siguiente ejemplo de código se invoca el proxy 2 desde el proxy 1 mediante JavaScript:

<!-- /antipatterns/examples/2-2.xml -->
var response = httpClient.send('https://api-test.example.com/proxy2);
response.waitForComplete();

Flujo de código

Para entender por qué esto supone una desventaja inherente, debemos comprender la ruta que sigue una solicitud, tal como se muestra en el diagrama siguiente:

1) El cliente envía una solicitud al proxy 1. 2) La solicitud del proxy 1 al proxy 2 incurre en un salto de red.
            3) Solicitud del proxy 2 al destino.
Imagen 1: Flujo de código

Como se muestra en el diagrama, una solicitud atraviesa varios componentes distribuidos, incluidos el enrutador y el procesador de mensajes.

En los ejemplos de código anteriores, invocar el proxy 2 desde el proxy 1 significa que la solicitud se tiene que enrutar a través de la ruta tradicional (Router > MP) en el tiempo de ejecución. Sería como invocar una API desde un cliente, lo que provocaría varios saltos de red que aumentarían la latencia. Estos saltos no son necesarios, ya que la solicitud del proxy 1 ya ha llegado al MP.

Impacto

Invocar un proxy de API desde otro proxy de API conlleva saltos de red innecesarios, es decir, la solicitud tiene que pasar de un procesador de mensajes a otro.

Práctica recomendada

  • Usa la función de encadenamiento de proxies para invocar un proxy de API desde otro. El encadenamiento de proxies es más eficiente, ya que usa una conexión local para hacer referencia al endpoint de destino (otro proxy de API).

    El código de ejemplo muestra el encadenamiento de proxies mediante LocalTargetConnection en la definición de tu endpoint:

    <!-- /antipatterns/examples/2-3.xml -->
    <LocalTargetConnection>
      <APIProxy>proxy2</APIProxy>
      <ProxyEndpoint>default</ProxyEndpoint>
    </LocalTargetConnection>

    El proxy de API invocado se ejecuta en el mismo procesador de mensajes, por lo que se evita el salto de red, como se muestra en la siguiente figura:

    1) El cliente envía una solicitud al proxy 1. 2) Se envía una solicitud del proxy 1 al proxy 2
                mediante una llamada pseudolocal. 3) Se envía una solicitud del proxy 2 al destino.
    Figura 2: Proceso de código con encadenamiento de proxies

Más información