Header Ads Widget

Ticker

6/recent/ticker-posts

¿Debería crear una puerta de enlace API internamente?

 



Hay cientos de soluciones prediseñadas para todas las API, ya sea autorización, documentación o alguna otra funcionalidad. Si bien existe una amplia gama de opciones para sus soluciones de puerta de enlace API , especialmente en los últimos años, las mejores pueden costar bastante y no siempre se adaptan a sus necesidades.

Esto fue lo que descubrió el equipo de API de Allegro , la plataforma de compras en línea más grande de Polonia, cuando salieron a la búsqueda de un paquete de puerta de enlace en 2014. Con más de seis millones de usuarios activos y alrededor de un millón de productos vendidos todos los días, necesitaban una puerta de enlace que no costaría la tierra. El desarrollador de software senior Michał Trojanowski nos contó más sobre sus requisitos de puerta de enlace y la decisión de construir uno ellos mismos en nuestra Cumbre de Plataformas 2018 .

Vea a Michał Trojanowski presente en la Cumbre de Plataformas de APIs Nórdicas:

Allegro y sus API

Para dar un contexto rápido, la plataforma de compras en línea de Allegro gira en torno a un mercado simple y elegante , aunque también organiza subastas y, desde 2015, ha mantenido una sucursal minorista. Con 700 personas en TI, Allegro es sin duda una empresa de tecnología.

¡Pero a las API! Estaba claro que Allegro necesitaba una API para los vendedores, por lo que crearon una. De hecho, crearon dos: una API SOAP heredada más antigua y una API REST más reciente Entre los dos, hay alrededor de 30.000 vendedores que utilizan las propias API, y cada API registra más de 100.000 solicitudes por minuto durante las horas pico.

Si bien hay terceros que usan ambas API, el equipo de desarrollo interno de Allegro usa solo la API REST para todos los datos que necesitan, lo cual es especialmente importante en la interfaz, incluidas sus aplicaciones móviles.

El equipo de desarrollo de Michał tiene dos propósitos principales, dice. El primero es desarrollar y mantener la base de código de la puerta de enlace para sus API, y el segundo es ayudar a otros desarrolladores , internos o externos, diseñando los modelos, rutas y puntos finales que necesitan para extraer datos valiosos del back-end.

La necesidad de una puerta de enlace (2014)

En 2014, Allegro tomó la decisión de cambiar de un monolito PHP a una Arquitectura Orientada a Servicios (SOA), con microservicios programados en una mezcla de Java, Kotlin y Node.js. Esto abrió la necesidad de una puerta de enlace API; explicamos por qué en nuestro artículo Puertas de enlace API a la arquitectura de microservicios directos .

Entonces, en enero de 2014, analizaron lo que el mercado tenía para ofrecer para las soluciones de puerta de enlace API prediseñadas. Habiendo compilado una lista de casi todas las opciones, luego hicieron una lista de características necesarias que incluían tanto la funcionalidad que necesitaban desde el primer día como la funcionalidad que querrían agregar más adelante.

Una característica extremadamente importante fue la compatibilidad con el descubrimiento de servicios internos existentes Desafortunadamente, no pudieron encontrar una solución que ofreciera esto.

Llegaron a la conclusión de que las soluciones de puerta de enlace prediseñadas se dividían en dos grandes grupos: administradores de API y proxies de API . Los administradores de API eran soluciones de puerta de enlace centradas en el negocio, que publicaban las API existentes con soporte de documentación, responsabilidad del cliente y funciones de registro. Los proxies API eran las soluciones centradas en la tecnología, que incluirían funciones de autorización, limitación de velocidad y modificación de la carga útil.

Realmente no había nada entre los dos disponible de forma gratuita, especialmente no con soporte para el descubrimiento de su servicio, y dudaban en optar por una solución paga dado el enorme tráfico con el que estaban lidiando.

¡Hazlo tu mismo!

Como no había muchas alternativas, Allegro tomó la decisión de construir una puerta de enlace API internamente . Su solución de bricolaje, Allegro Edge , usó un proxy Undertow con Zookeeper para manejar la configuración y Couchbase para limitar la velocidad.

El diseño básico era una cadena de controladores Undertow, cada uno con un propósito específico, como el manejo de sesiones o la recopilación de métricas, que eventualmente pasarían la solicitud a un controlador proxy y al servicio en sí. Los oyentes de respuestas pueden agregar encabezados, recopilar algunas métricas finales o modificar la respuesta final.

Cuatro años después, Allegro sigue satisfecho con su solución. Han descubierto que hay una sobrecarga promedio de aproximadamente 120 milisegundos (percentil 99) en toda la arquitectura. Michał reconoce que esto no es lo mejor, pero es más que suficiente para un mercado donde la latencia realmente no importa y los recursos sí.

Características de Allegro Edge

Si bien el servicio Allegro Edge suena efectivo en papel, ¿de qué se está ocupando realmente? Estas son algunas de las características más importantes que han implementado, con información sobre cómo podría hacer lo mismo:

Enrutamiento

Para el enrutamiento, Allegro adoptó el enfoque simple de delinear todas las rutas en JSON en un repositorio de git regular. Descubrieron que esta era una manera fácil de exponer nuevos recursos y también les ofrecía un control transparente sobre lo que se estaba exponiendo. Si ofreciera un recurso para usuarios de terceros, simplemente lo etiquetaría como público .

Seguridad

En términos de seguridad, Allegro Edge maneja las verificaciones de validez de los tokens de autorización de OAuth para los integradores. No hay necesidad de preocuparse por la caducidad o las firmas. De manera similar, hubo un apoyo centralizado para que CORS y CSRF tomaran la seguridad en sus propias manos. Además, el servicio ofrece soporte de sesión integrado para las propias páginas del sitio web: las cookies de sesión se convertirían directamente en tokens.

Documentación

Para los documentos, Allegro eligió Swagger UI . Al principio, todo era automático: exponer un punto final público crearía un archivo de especificación YAML, que se recopilaría en una gran página de soporte. Finalmente, los desarrolladores comenzaron a agregar modelos con nombres incorrectos, lo que resultó en una confusión menor de documentos. Ahora, utilizan archivos de documentos editados manualmente.

Limitación de tasa

La última gran preocupación a manejar fue la limitación de velocidad. Usando Couchbase, construyeron dos mecanismos de limitación de velocidad desde perspectivas técnicas y comerciales. El primero limitaría las solicitudes basadas en IP, que era efectivamente una precaución anti-DDoS, mientras que el segundo limitaría las solicitudes basadas en recursos, permitiendo solo a los usuarios verificados o VIP un mayor acceso a los recursos.

¿Valió la pena construir un portal interno?

La pregunta que probablemente se esté preguntando es si valió la pena construir internamente la puerta de enlace API Allegro. En una palabra, Michał dice que  . Las grandes razones son:

  • Funciona.
  • Fue construido desde cero en tres meses.
  • Ofrece todas las funciones necesarias.
  • No será difícil seguir construyendo.

¿Debería construir uno propio?

Después de hablar sobre la puerta de enlace API de Allegro, Michał tuvo la amabilidad de responder más de las preguntas obvias antes de que se las formularan, incluido ¿Debería construir el suyo propio?

Como de costumbre, depende. Si no tiene necesidades personalizadas , podría ser más fácil usar lo que está disponible en el mercado (especialmente si necesita construir una puerta de enlace rápidamente). Además, las soluciones existentes pueden ser más fáciles de mantener, independientemente de si se pagan, lo que a menudo significa soporte gratuito, o de código abierto , lo que a menudo significa una comunidad apasionada .

Si cree que tiene un gran número de tráfico o, de hecho, necesidades personalizadas, podría ser más fácil crear uno. No es exactamente difícil, pero Michał dice que el mantenimiento continuo es una necesidad y aún debe ser pagado por alguien.

Y en caso de que se aleje de esta publicación con la esperanza de construir su propia puerta de enlace, el desarrollador entusiasta agregó que si lo hacía de nuevo, probablemente usaría una puerta de enlace Spring Cloud con WebFlux.

Publicar un comentario

0 Comentarios