Flows

¿Qué son los flujos de APIs?

La arquitectura para exposición de APIs ampliamente adoptada en el mercado prevé la separación de responsabilidades, donde la presencia de un gateway de APIs como elemento intermediario entre los clientes y los servicios en servidores es fundamental.

Por defecto, todos los datos de una petición (request) son pasados sin modificaciones para el servidor, apuntado por el enrutamiento del gateway. Lo mismo sucede con la respuesta (response) enviada por el servidor. Por defecto, todos los datos de la respuesta son pasados sin modificaciones para el cliente que originó la petición.

Sin embargo, hay diversas situaciones donde es necesario modificar los datos de la petición antes de enviarla al servidor, o modificar la respuesta estándar que será devuelta al cliente. Por ejemplo, un usuario puede desear:

  • adicionar informaciones a la petición antes de enviarla al servidor (enriquecimiento de mensajes);

  • retirar o mascarar informaciones sensibles que no deben ser almacenadas en logs;

  • tomar decisiones de rutas con base en el contenido de los mensajes;

  • componer más de una llamada a servicios internos en una misma petición externa.

La definición de una API incluye la configuración de los flujos de entrada y salida de los mensajes. En el camino de estos flujos, pueden ser adicionados interceptores en puntos específicos, que serán ejecutados en un orden bien definido. Los interceptores son los elementos que ejecutan lógicas y establecen comportamientos específicos.

La ejecución de los interceptores sigue una jerarquía en árbol, respetando el orden de su configuración.

A continuación, un escenario donde los interceptores son adicionados en los flujos de entrada y salida de los mensajes:

flow all interceptor

Puede agregar interceptores estándar (que ya están listos para usar en su Manager) o interceptores personalizados a sus flujos de APIs. Acceda a esta página para leer acerca de los interceptores disponibles.

Cómo configurar flujos de API

En la configuración del flujo, pueden ser definidos:

  1. El alcance de la ejecución del flujo, que incluye:

    • Resources: exhibe todos los recursos de la API. Cuando es seleccionado "All", el flujo se aplicará en todos los recursos. flow resource interceptor

    • Operations: exhibe todas las operaciones para el recurso seleccionado. Sigue el mismo concepto de los recursos: si es seleccionado "All", se aplicará en todas las operaciones de un recurso. flow operation interceptor

  2. El conjunto de interceptores, que se dividen en: Traffic, Security, Mediation, Tracing, Transformation, Custom.

  3. El punto de ejecución de la petición realizada desde el cliente para el servidor. El orden de los interceptores — de la izquierda para la derecha — define cómo será el procesamiento. Todos los interceptores son válidos para este punto de ejecución;

  4. El punto de ejecución de la respuesta retornada desde el servidor para el cliente, mediante algún procesamiento de los interceptores. El orden de ejecución de los interceptores es de la derecha para la izquierda. Algunos interceptores no forman parte de este punto de ejecución, como: Client ID Validation, Access Token Validation y OAuth.

  5. El destino (destination) de la API, que puede ser lo mismo para todas las peticiones a la API o específico para un dado recurso o operación (dependiendo de si ha elegido "All" en los campos Resources y Operations o si ha definido un recurso o operación específicos). Para configurar el destino, hacer clic en el botón icon backend, a través del cual también puede definir el certificado a utilizar y un tiempo de espera (timeout) específico.

    • El timeout determina el tiempo límite de espera de consumo de un determinado recurso o operación. Cuando el tiempo de una petición exceda el valor del timeout configurado, la petición será abortada y una excepción será lanzada por el sistema con el status 502.

      • El timeout puede ser definido directamente a través de un valor en segundos en el campo Timeout, o a través de una variable de entorno.

      • El timeout presente en los destinos sigue una jerarquía de ejecución: es ejecutado desde el nivel más genérico para el más específico. Ejemplo: un timeout definido para "All" será replicado para todos los recursos y operaciones, al menos que sea definido un timeout diferente en un componente más específico.

flow destination

Herencia de flujos

Podemos crear varios flujos para una llamada a la API.

Los flujos siguen un modelo de jerarquía, o sea, los interceptores del padre serán heredados por sus hijos, pero las modificaciones en los hijos no serán reflejadas en el padre, conforme muestran las figuras anteriores.

Los interceptores heredados de un padre estarán en gris oscuro, mientras los propios estarán coloreados:

flows pai filho

Quiebra de flujo

Una quiebra de flujo es caracterizada por una modificación en el orden de los interceptores heredados de un flujo padre. En este caso, las modificaciones hechas en los interceptores del flujo padre no serán pasadas para sus hijos.

¿Qué causa quiebra de flujo?

  • cambio del orden de los interceptores heredados del padre;

  • cambio del orden de los interceptores del hijo, al frente de los heredados del padre;

  • cambio del orden de los interceptores del hijo, en el medio de los heredados del padre;

  • adición de un nuevo interceptor, al frente de los interceptores heredados del padre;

  • adición de un nuevo interceptor, en el medio de los interceptores heredados del padre.

¿Qué NO causa quiebra de flujo?

  • Cambio del orden de los interceptores del hijo, después del interceptores del padre;

  • Adición de un nuevo interceptor, después de los interceptores heredados del padre;

  • Modificación de los valores de los interceptores del padre.

Los valores modificados en el hijo serán transmitidos para sus hijos herederos; sin embargo, si hubiere una modificación en el valor del padre, esta no será transmitida para los hijos ni para los hijos herederos.

La imagen a continuación representa un flujo hijo normal, donde los interceptores en gris son heredados y fue adicionado un interceptor de Log en el flujo de petición, obedeciendo el orden de los interceptores.

interceptors ordem natural

Enseguida tenemos un ejemplo de una quiebra de flujo. El orden de los interceptores fue modificado: fue adicionado un interceptor de Client ID Validation antes del primer interceptor heredado del flujo padre (Rate Limit). Así, cualquier modificación hecha en el flujo padre no será reflejada en el flujo en cuestión.

quebra de fluxo

Es posible revertir la quiebra de flujo haciendo clic en el botón Restore localizado al lado del campo de selección Operations.

quebra de fluxo restore
Thanks for your feedback!
EDIT

Share your suggestions with us!
Click here and then [+ Submit idea]