API Gateway para microservicios en Kotlin: cuando una entrada es mejor que mil

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

API Gateway para servicios Kotlin: cuando una entrada es mejor que mil



Imagina que tu zoológico de microservicios en Kotlin ha crecido hasta tener más de 20 servicios. Cada uno se comunica con el mundo a través de su propio puerto, requiere su propia autenticación y maneja los errores a su manera. Los clientes se confunden con los endpoints, y tú rezas cada noche para que un servicio extra no se caiga y entierre toda la aplicación. ¿Te suena familiar?



Hay una solución: el API Gateway. Es un punto de entrada único que se encarga del enrutamiento, la seguridad, el almacenamiento en caché y la monitorización. Hoy analizaremos cómo construir un gateway de este tipo en Kotlin, utilizando dos enfoques populares: el ligero Ktor y el industrial Spring Cloud Gateway. Sin rodeos: solo código y práctica.



¿Qué es un API Gateway y por qué lo necesitas?



Un API Gateway (puerta de enlace API) es una capa intermedia entre los clientes y tus microservicios. En lugar de que cada frontend o aplicación externa conozca las direcciones de todos tus servicios, se comunican únicamente con el gateway. Y este decide hacia dónde dirigir la solicitud.



Funciones principales del gateway:

  • Enrutamiento: dirige las solicitudes a los servicios adecuados según la URL o los encabezados.
  • Autenticación y autorización: verifica los tokens antes de que la solicitud llegue a la lógica de negocio.
  • Balanceo de carga: distribuye las solicitudes entre las instancias de un mismo servicio.
  • Almacenamiento en caché: guarda respuestas para datos solicitados con frecuencia.
  • Monitorización y registro: recopila métricas de todas las solicitudes en un solo lugar.
  • Limitación de tasa (Rate limiting): protege contra DDoS y sobrecargas.


Si programas en Kotlin y utilizas una arquitectura de microservicios, un API Gateway es imprescindible, no una opción. Sin él, corres el riesgo de tener un caos de endpoints dispersos y problemas de seguridad.



Enfoque 1: API Gateway con Ktor — ligereza y flexibilidad



Ktor es un framework de JetBrains, creado específicamente para Kotlin. Es asíncrono, ligero y perfecto para escribir gateways cuando no quieres cargar con un pesado Spring Boot.



Escribamos un API Gateway simple en Ktor que enrute solicitudes a dos servicios: user-service (usuarios) y order-service (pedidos).



Paso 1: Configuración del proyecto



Crea un nuevo proyecto Ktor a través de start.ktor.io o agrega las dependencias manualmente en build.gradle.kts:



dependencies {    implementation("io.ktor:ktor-server-core:2.3.7")    implementation("io.ktor:ktor-server-netty:2.3.7")    implementation("io.ktor:ktor-client-core:2.3.7")    implementation("io.ktor:ktor-client-cio:2.3.7")    implementation("io.ktor:ktor-server-auth:2.3.7")    implementation("io.ktor:ktor-server-content-negotiation:2.3.7")    implementation("io.ktor:ktor-serialization-kotlinx-json:2.3.7")    implementation("ch.qos.logback:logback-classic:1.4.14")}


Paso 2: Enrutamiento básico con proxy



Creemos el archivo principal Application.kt:



import io.ktor.client.*import io.ktor.client.request.*import io.ktor.client.statement.*import io.ktor.http.*import io.ktor.server.application.*import io.ktor.server.engine.*import io.ktor.server.netty.*import io.ktor.server.response.*import io.ktor.server.routing.*

fun main() { embeddedServer(Netty, port = 8080) { module() }.start(wait = true)}

fun Application.module() { val httpClient = HttpClient()

routing { // Proxy para user-service route("/api/users") { handle { val response = httpClient.get("http://localhost:8081${call.request.uri}") call.respondText( text

Blogs

Book Recommendations