Spring Cloud Gateway: enrutamiento inteligente para microservicios
En una arquitectura de microservicios, cada servicio funciona de forma autónoma, con su propio endpoint y responsabilidad. Sin embargo, cuando una aplicación crece, coordinar todas estas rutas invocadas desde el cliente se convierte en una proceso de alta complejidad técnica. Aquí es donde entra en escena el API Gateway, un único punto de entrada para centralizar el acceso, proteger los servicios, aplicar reglas, registrar tráfico y enrutar peticiones de forma inteligente.
En este post vamos a explicar qué es un API Gateway, su papel en una arquitectura distribuida, cómo funciona Spring Cloud Gateway, sus componentes, los tipos actualmente existentes, y por qué es una de las piezas más relevantes dentro del ecosistema Spring Cloud.
¿Qué es un API Gateway?
Un API Gateway actúa como intermediario entre el cliente y los microservicios del sistema. Su misión es gestionar todas las solicitudes entrantes y redirigirlas al servicio correspondiente, sin que el cliente conozca la estructura interna.
🔄 Funciones clave de un API Gateway:
-
Centraliza las peticiones REST.
-
Aplica autenticación, autorización y validaciones previas.
-
Ejecuta el enrutado de solicitudes a distintos servicios internos.
-
Realiza transformaciones de rutas o encabezados.
-
Aplica filtros globales o específicos.
-
Permite monitorización, log de peticiones y gestión de errores.
En resumen: el API Gateway simplifica el acceso, protege la arquitectura y mejora la escalabilidad de los sistemas distribuidos.
Spring Cloud Gateway: el gateway de Spring
Spring Cloud Gateway es la versión actual y reactiva del gateway de Spring. Esta herramienta se lanzó para reemplazar a Zuul, el antiguo gateway de Netflix que quedó obsoleto a partir de la versión 3 de Spring Boot (aunque todavía puedes encontrarte con Zuul en aplicaciones antiguas que usen Spring Boot versión 2).
Basado en Spring WebFlux, el gateway de Spring está diseñado para funcionar de forma asíncrona y no bloqueante (reactiva), lo que lo hace ideal para arquitecturas altamente escalables.
⛔ Microservicios no reactivos: Aunque Spring Gateway es reactivo por diseño, también puede ser conectado con aplicaciones que no tengan funcionalidad reactiva. Esto es, no se requiere que los microservicios de tu aplicación sean reactivos. Se puede utilizar Spring Gateway para enrutar a aplicaciones tradicionales Spring MVC, o incluso a servicios en otros lenguajes como Node.js o Python. Eso sí, hay que tener en cuenta que Spring MVC no podrá ser utilizado en el propio servicio del Gateway (que sí es reactivo).
Componentes de Spring Cloud Gateway
Spring Cloud Gateway recibe la petición del Gateway Client y se estructura en los siguientes componentes principales:
1. Gateway Handler Mapping
Encargado de interceptar las peticiones del cliente y buscar coincidencias con las rutas configuradas.
2. Gateway Web Handler
Gestiona el flujo de procesamiento, ejecutando filtros, transformaciones y el reenvío al servicio final.
3. Filtros (Filters)
Permiten ejecutar lógica antes (pre-filters
) y después (post-filters
) de invocar al microservicio.
4. Predicados (Predicates)
Condiciones para definir cuándo se aplica una ruta (por ejemplo, por método, ruta, cabecera, etc.).
5. Proxied Service
Es el microservicio final que recibe la petición tras ser gestionada por el Gateway.
Modalidades de Gateway en Spring Cloud
Spring Cloud Gateway ofrece varias modalidades:
-
Reactive Gateway: heredado de Spring WebFlux, ideal para sistemas con alto volumen de tráfico y que requieran comportamiento reactivo.
-
Gateway para microservicios no reactivos: Aunque Spring Gateway sea reactivo, podrá ser utilizado para conectar con microservicios no reactivos.
-
Zuul Gateway: gateway antiguo utilizado en las versiones anteriores a Spring Boot versión 3.
Tratamiento de rutas en Spring Gateway
En Spring Cloud Gateway, las rutas son el núcleo del enrutamiento. Cada petición HTTP que llega al API Gateway se evalúa frente a una lista de rutas configuradas. Si se cumple alguna de las condiciones (llamadas predicados), la petición se redirige al microservicio correspondiente.
🔍 ¿Qué es una ruta en Spring Gateway?
Una ruta en este contexto se compone de tres elementos principales:
-
ID: identificador único de la ruta.
-
Predicados (Predicates): condiciones que deben cumplirse para que la ruta se active (por ejemplo, coincidencia de
Path
,Host
,Method
…). -
URI: dirección del microservicio destino.
-
Filtros: transformaciones adicionales que se aplican a la petición o a la respuesta.
⚙️ ¿Por qué es útil esta configuración?
Las rutas permiten:
-
Redirigir dinámicamente peticiones según reglas claras.
-
Aplicar lógica condicional (por IP, cabecera, path, método HTTP…).
-
Simplificar el mantenimiento de los microservicios ocultando detalles de implementación.
-
Aplicar filtros específicos por cada ruta si es necesario.
Configuración de filtros en Spring Gateway
Los filtros en Spring Cloud Gateway permiten modificar, interceptar o enriquecer tanto las peticiones como las respuestas que pasan por el Gateway. Son uno de los mecanismos más potentes y flexibles que ofrece esta herramienta.
🧩 Tipos de filtros
-
Pre-Filters: se ejecutan antes de que la petición se envíe al microservicio destino. Se usan para tareas como autenticación, logging, validación de tokens, modificación de cabeceras o transformación del body.
-
Post-Filters: se ejecutan después de recibir la respuesta del microservicio. Son útiles para modificar respuestas, registrar métricas, auditar respuestas o añadir cabeceras.
Ventajas de utilizar API Gateway en microservicios
✅ Punto único de entrada: evita exponer múltiples endpoints al exterior.
✅ Desacopla el cliente del backend: el cliente no necesita saber qué servicios existen ni sus rutas internas.
✅ Control centralizado: para autenticación, logging, métricas o limitación de velocidad.
✅ Escalabilidad optimizada: enruta peticiones según reglas o balanceadores.
✅ Mantenimiento más sencillo: puedes cambiar internamente microservicios sin afectar al cliente.
🔎 Ejemplo práctico: Spring Cloud Gateway paso a paso
Vamos a ver cómo crear un API Gateway básico utilizando Spring Boot y Eureka Discovery.
➕ Paso 1: Crear el proyecto
Usa Spring Initializr con las siguientes dependencias:
-
Spring Reactive Web
-
Spring Reactive Gateway
-
Eureka Discovery Client
O añade esto al pom.xml
:
➕ Paso 2: Clase principal
Paso 3: Configuración application.properties
Paso 4: Configurar rutas manuales (opcional)
Si no usas Eureka, puedes definir rutas estáticas en application.properties
:
Paso 5: Invocar a un microservicio vía Gateway
Supongamos que tienes registrado en Eureka el microservicio "MARKET-INDEX
". Podrías acceder a su función "currency-exchange" mediante el Gateway en el puerto 8765:
Y si tienes otro servicio registrado como "MARKET-STOCK
", podrías acceder a su función "currency-conversion" mediante el siguiente endpoint:
Conclusión: el centro de operaciones de tu arquitectura
Spring Cloud Gateway no solo enruta tráfico. Es un centro de control que te permite transformar, filtrar, autenticar y monitorizar todo lo que entra y sale de tu sistema de microservicios. Con integración sencilla con Eureka, WebFlux y Spring Security, es una herramienta imprescindible en cualquier arquitectura moderna y reactiva.
¡Nos vemos en el siguiente post!
Saludos.
Comentarios
Publicar un comentario