Mejores prácticas para construir APIs confiables

A medida que tus APIs escalan, la necesidad de hacerlas confiables y robustas aumenta.

Este artículo discute las mejores prácticas para construir APIs confiables introduciendo un tipo especial de proxies inversos llamados API gateways.

Veremos:

  1. Problemas con los diseños tradicionales de APIs
  2. Qué son los API gateways
  3. Cómo los API gateways mejoran las APIs y
  4. Patrones y ejemplos usando API gateways

Pero primero, ¿qué son las APIs "confiables"?

¿Qué hace que una API sea confiable?

Como proveedor de servicios, podrías tener acuerdos de nivel de servicio (SLAs) con tus clientes, usualmente expresados en tiempo de actividad (uptime)—la cantidad de tiempo que el servicio está garantizado para estar en línea y operativo.

El tiempo de actividad es una visión miope de la confiabilidad. Para entender lo que significa ser confiable, debes mirar los factores que afectan el tiempo de actividad. Una vez que entiendas estos factores, estarás en una mejor posición para construir servicios confiables.

Veamos estos factores y las preguntas que plantean:

  1. Latencia: ¿Qué tan rápido responde tu API a las solicitudes?
  2. Seguridad: ¿Quién puede acceder a tu API? ¿Es segura?
  3. Frecuencia de caídas: ¿Con qué frecuencia está caída tu API?
  4. Consistencia: ¿Son constantes los endpoints de tu API? ¿Necesitan los consumidores cambiar su código con frecuencia?
  5. Monitoreo y reportes: ¿Puedes observar problemas y fallas en tu API? ¿Los estás reportando a tus consumidores?

network error/api.png

A medida que las organizaciones se mueven hacia arquitecturas nativas de la nube, se vuelve difícil para los equipos de desarrollo tener en cuenta estos factores en cada uno de sus servicios. Y a medida que estos sistemas escalan, sería mucho más fácil delegar estas responsabilidades a un sistema único y separado. ¡Dale la bienvenida a los API gateways!

API Gateway, el punto de entrada unificado

Un API gateway actúa como intermediario entre tus clientes y tus APIs. Aceptará todo el tráfico (llamadas API) como los proxies inversos, reenvía la solicitud a los servicios requeridos en tu backend y devuelve los resultados necesarios.

network error/api gateway.png

Un API gateway puede ser el punto central que maneja todas las preocupaciones de autenticación, seguridad, control de tráfico y monitoreo, permitiendo que los desarrolladores de APIs se concentren en las necesidades del negocio y facilitando la mejora de la confiabilidad.

network error/api gateway reliability.png

Hay muchas ofertas de API gateways de código abierto y gestionados disponibles. En este artículo, estaré usando Apache APISIX.

La siguiente sección describirá algunas de las mejores prácticas para hacer tus APIs confiables usando API gateways.

Mejores prácticas de confiabilidad con API gateways

Nos enfocaremos más en el patrón subyacente que en la implementación real, ya que puede variar según tu elección de API gateway.

Dividiré estos patrones en tres categorías:

  1. Autenticación y seguridad
  2. Monitoreo y observabilidad
  3. Control de versiones y tiempo de inactividad cero

Veremos cada categoría en detalle a continuación.

Autenticación y Seguridad

Autenticación de Usuario

Las solicitudes autenticadas con API gateways aseguran las interacciones cliente-API. Después de que un cliente se autentica, tu API gateway puede usar los detalles del cliente obtenidos para un control granular.

network error/user authentication.png

APISIX maneja la autenticación directamente a través de plugins como key-auth y jwt-auth. APISIX también soporta autenticación OAuth y sistemas de control de acceso basados en roles como wolf a través de plugins como openid-connect y wolf-rbac, respectivamente.

Limitación de Tasa

Los picos de tráfico intencionales (ataques DoS) y no intencionales (clientes haciendo demasiadas solicitudes) a tus APIs pueden derribarlas como un castillo de naipes. Configurar limitación de tasa mejorará la confiabilidad de tus sistemas para manejar tales escenarios.

Puedes configurar la limitación de tasa en tu API gateway, y si el número de solicitudes aumenta por encima de un umbral, el API gateway podría retrasar o rechazar las solicitudes excedentes.

network error/rate limiting.png

Con APISIX, puedes usar cualquiera de los tres plugins para configurar límites de tasa basados en el número de solicitudes, el número de solicitudes concurrentes por cliente y el conteo (limit-req, limit-conn, limit-count).

Monitoreo y Observabilidad

La confiabilidad de tu API y tu configuración de monitoreo van de la mano. Y puedes monitorear tus métricas de confiabilidad configurando el monitoreo en tu API gateway.

network error/monitoring and observability.png

Los registros de API y los rastreos proporcionan información detallada sobre una llamada API. Esta información te ayudará a saber cuándo tu API ha fallado o tiene un error lo antes posible. Los fallos silenciosos llevan a errores no corregidos que pueden causar problemas en el futuro.

Con alguna configuración, también podrás predecir y anticipar el tráfico para el futuro, ayudándote a escalar de manera confiable.

APISIX tiene plugins que se integran con plataformas/especificaciones de registro (Apache SkyWalking, RocketMQ), métricas (Prometheus, Datadog), y rastreo (OpenTelemetry, Zipkin). Puedes leer más sobre Observabilidad de API con Plugins de APISIX.

Control de Versiones y Tiempo de Inactividad Cero

Lanzamiento Canario

Al cambiar a nuevas versiones de tus APIs, debes asegurarte de no perder tu tráfico. Los clientes aún deberían poder hacer solicitudes a tu API y obtener la respuesta correcta.

Con un API gateway, puedes configurar lanzamientos canarios. Esto asegurará que tu API permanezca funcional durante la transición, y también puedes volver a la versión anterior si hay algún problema.

Inicialmente, el API gateway enrutará todo el tráfico a la versión antigua de tu API.

network error/old version.png

Cuando tengas una nueva versión, puedes configurar el API gateway para enrutar parte de tu tráfico a esta nueva versión. Puedes seguir aumentando el porcentaje de tráfico a tu nuevo servicio y verificar si todo está funcionando como se espera.

network error/canary release.png

Finalmente, puedes enrutar todo el tráfico a tu nueva API.

network error/new API

APISIX usa el plugin traffic-split que te permite controlar el tráfico a tus servicios. Puedes usarlo para configurar lanzamientos canarios o tu configuración de lanzamiento personalizada.

Circuit Breaking

Cuando uno de tus servicios upstream no está disponible o está experimentando alta latencia, necesita ser desconectado de tu sistema. De lo contrario, el cliente seguirá reintentando la solicitud, lo que llevará al agotamiento de recursos. Este fallo puede extenderse a otros servicios en tu sistema y derribarlos.

Al igual que los interruptores eléctricos aíslan componentes defectuosos de un circuito, los API gateways tienen una función de circuit breaker que desconecta servicios defectuosos, manteniendo el sistema saludable. El tráfico a estos servicios se redirige o retrasa hasta que el servicio se vuelve saludable.

network error/circuit breaking.png

APISIX viene con un plugin api-breaker que implementa este patrón.

Redirecciones

A medida que actualizas tus APIs, sus endpoints pueden sufrir algunos cambios. Tradicionalmente, esto significaría que la aplicación cliente debería enviar solicitudes al /new-api-endpoint en lugar del /old-api-endpoint, lo que significa que tus consumidores deben cambiar manualmente cada llamada a este endpoint API.

Si no se anticipa, esto puede romper las aplicaciones cliente.

Con un API gateway, puedes proporcionar una capa de abstracción y redirigir las solicitudes al /new-api-endpoint sin que los clientes tengan que cambiar sus solicitudes. Con códigos de estado y mensajes de redirección adecuados, puedes depreciar gradualmente el /old-api-endpoint sin que tus consumidores experimenten ningún tiempo de inactividad.

network error/redirect.png

Con APISIX, puedes usar el plugin redirect para configurar redirecciones.

Conclusión

Cuando la confiabilidad se convierte en una preocupación principal, es evidente que los API gateways son necesarios a medida que más organizaciones dividen sus monolitos en microservicios y se mueven a arquitecturas nativas de la nube.

Sin embargo, esto no significa que los API gateways sean para todos. Dependiendo del tamaño y uso de tu API, un API gateway podría ser excesivo, y podrías arreglártelas usando un proxy inverso con capacidades básicas de enrutamiento y balanceo de carga.

Los casos de uso mencionados aquí solo arañan la superficie de las capacidades de un API gateway. Puedes aprender más sobre API gateways y Apache APISIX en apisix.apache.org.

Share article link