Encadena proxies de API

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

Consulta la documentación de Apigee Edge.

Puedes especificar que un proxy sea el extremo de destino de otro y que conecte de forma efectiva los dos proxies en una cadena de proxy. La cadena de proxies de esta forma puede ayudarte a evitar un salto de red y, así, mejorar el rendimiento general.

Con el encadenamiento de proxies, debes especificar que un proxy es el extremo de destino local del otro. En lugar de usar el elemento HTTPTargetConnection para realizar una llamada al segundo proxy, debes usar el elemento LocalTargetConnection.

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

Puede resultarte útil encadenar un proxy cuando tienes un proxy que ofrece funcionalidad discreta de bajo nivel que consumirán otros proxies. Por ejemplo, un proxy que expone operaciones de creación, lectura, actualización y eliminación con un almacén de datos de backend puede ser el proxy de destino para varios otros proxies que exponen los datos a los clientes.

Video: Mira este video breve para obtener más información sobre el encadenamiento de proxy de API.

Cómo funciona la encadenamiento de proxy

El encadenamiento usa un sistema local para minimizar la sobrecarga de la red cuando se llama a un proxy desde otro. Esta conexión local es más eficiente porque omite funciones de red, como balanceadores de cargas, routers y procesadores de mensajes.

A continuación, se ilustra la diferencia entre la conexión de proxies con HTTPTargetConnection y LocalTargetConnection (encadenamiento de proxies):

Diagrama de una llamada de proxy a proxy sin encadenamiento de proxy.

Diagrama de una llamada de proxy a proxy con encadenamiento de proxy.

Para conectar proxies, debes especificar que uno es un extremo de destino local del otro. Para la configuración del diagrama anterior (llamada de proxy a proxy con encadenamiento de proxies), debes especificar que ProxyB (/proxyB) es un extremo de destino local de ProxyA (/proxyA). Esto hace que las solicitudes que llegan a ProxyA se reenvíen a ProxyB.

Puedes crear una conexión local entre proxies de dos maneras:

  • Con la especificación del nombre del proxy de destino y un nombre ProxyEndpoint
  • Especifica una ruta de acceso al extremo del proxy de destino

Conecta los proxies de destino dentro de una configuración TargetEndpoint, mediante un elemento LocalTargetConnection, como se describe a continuación.

.

Conecta proxies por nombre de proxy

Puedes especificar el proxy de destino por nombre. Esto puede resultar muy útil cuando creas la conexión desde el principio y desarrollas los proxies juntos. Si no conoces el nombre (o el nombre puede cambiar), considera conectarte con la ruta de acceso del extremo del proxy de destino, como se describe a continuación.

Cuando te conectas a un proxy de destino por nombre, debes especificar su nombre y el nombre de su ProxyEndpoint.

En el ejemplo siguiente, se especifica un proxy de destino llamado data-manager, junto con el nombre de ProxyEndpoint que expone data-manager. Para obtener información de referencia, consulta la Referencia de la configuración del 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>

Conecta proxies por ruta

Puedes especificar el proxy de destino según su ruta de extremo. Se recomienda hacerlo de esta manera cuando no sepas el nombre del proxy o cuando el nombre cambie.

Si tu proxy es simplemente el consumidor del proxy de destino, como cuando no estás desarrollando ambos, la ruta puede ser la forma más confiable de conectarte. Por ejemplo, si otro equipo desarrolla y mantiene el proxy al que te estás conectando, puedes conectarte mediante una ruta de acceso confiable de extremos.

En el ejemplo siguiente, se especifica un proxy de destino en /v1/streetcarts/foodcarts/data-manager, en el que se supone que el host es el mismo que el proxy actual. Para obtener información de referencia, consulta la Referencia de la configuración del 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>

El elemento <Path> en <LocalTargetConnection> puede ser una string, o puedes usar una plantilla de mensajes para asignar un valor de forma dinámica.

Conecta proxies con la IU de Apigee

También puede conectar proxies, ya sea por nombre de proxy o ruta, utilizando la IU de Apigee. En el siguiente ejemplo, hay dos proxies, ProxyA y ProxyB, y quieres que ProxyB sea un extremo objetivo de ProxyA. Para conectar los proxies por nombre, sigue estos pasos:

  1. Accede a la IU de Apigee.
  2. Selecciona Desarrollar > Proxies en el panel de la izquierda.
  3. En la lista de proxies, selecciona ProxyA.
  4. Haz clic en la pestaña Desarrollar:
  5. En el panel Código, reemplaza la sección <TargetEndpoint> del XML por lo siguiente:
    <TargetEndpoint>
      <LocalTargetConnection>
        <APIProxy>ProxyB</APIProxy>
        <ProxyEndpoint>default</ProxyEndpoint>
      </LocalTargetConnection>
    </TargetEndpoint>
  6. Haga clic en Save.

Proxies cadenados, productos de API y seguridad

El encadenamiento de proxy es mejor cuando los proxies están en el mismo producto de API. De forma predeterminada, ambas están disponibles para los clientes. Por el momento, Apigee no admite la agrupación del segundo proxy en un producto de API distinto al que los clientes no deberían tener acceso.

Si tu segundo proxy debe estar protegido contra las solicitudes de cliente directas, considera agregar lógica para que tu segundo proxy analice la dirección IP del cliente. En el caso de una llamada realizada con una cadena, la dirección IP será local. Tu código puede validar que es local antes de permitir que continúe el procesamiento. Consulta la política AccessControl para encontrar una manera de hacerlo.