API Gateway
Concepto y Función
Un API Gateway actúa como un punto de entrada único para todos los clientes en una arquitectura de microservicios. Funciona como una capa intermedia que recibe todas las solicitudes de los clientes y las dirige a los servicios apropiados, abstrayendo la complejidad interna de la arquitectura para los consumidores de la API.
Beneficios del API Gateway
- Punto de Entrada Único: Simplifica el acceso a los microservicios a través de una interfaz unificada.
- Enrutamiento Inteligente: Dirige las solicitudes a los servicios correctos basándose en reglas configurables.
- Funcionalidades Transversales: Centraliza funcionalidades como autenticación, autorización, límite de tasa (rate limiting) y logging.
- Transformación de Datos: Puede modificar solicitudes y respuestas para la compatibilidad entre el cliente y los servicios.
- Balanceo de Carga: Distribuye el tráfico entre múltiples instancias de servicios.
- Caché: Almacena respuestas frecuentes para reducir la latencia y la carga en los servicios.
- Monitoreo: Proporciona visibilidad centralizada sobre todas las llamadas a la API.
Arquitectura del API Gateway en el Proyecto
Implementación con Nginx
En la fase inicial del proyecto, utilizamos Nginx como API Gateway debido a su eficiencia, bajo consumo de recursos y facilidad de configuración para proxy inverso.
Configuración Básica de Nginx
server {
listen 80;
# Servicio de User Management
location /users {
proxy_pass http://usermanagement:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# Servicio de Feedback Request
location /requests {
proxy_pass http://feedbackrequest:8082;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# Servicio de Feedback Response
location /responses {
proxy_pass http://feedbackresponse:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# Servicio de Feedback Response View
location /responsesview {
proxy_pass http://feedbackresponseview:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
rewrite ^/responsesview(/.*)$ $1 break;
}
}
Evolución a un Gateway con Node.js Express
En el Sprint 4, evolucionaremos el API Gateway a una implementación basada en Node.js Express, que ofrecerá mayor flexibilidad y capacidades programáticas para:
- Autenticación Avanzada: Validación y renovación de tokens JWT.
- Autorización Contextual: Decisiones de acceso basadas en los claims del token y el contexto de la solicitud.
- Transformación de Datos: Modificación de solicitudes y respuestas según sea necesario.
- Logging Estructurado: Registro detallado de todas las transacciones para auditoría y depuración.
- Circuit Breaking: Prevención de fallas en cascada entre servicios.
- Métricas y Monitoreo: Recolección de datos de rendimiento y uso en tiempo real.
Arquitectura del Gateway con Express
Implementación en Docker Compose
Para implementar el Gateway con Node.js Express, será necesario reemplazar el servicio de Nginx en el archivo docker-compose.yml:
# Configuración actual (Nginx)
nginx:
image: nginx:alpine
volumes:
- ./gateway/nginx.conf:/etc/nginx/conf.d/default.conf
ports:
- "80:80"
depends_on:
- usermanagement
- feedbackrequest
- feedbackresponse
- feedbackresponseview
# Nueva configuración (Node.js Express)
gateway:
build:
context: ./node_backend
args:
APP_NAME: api_gateway
environment:
- JWT_SECRET_KEY=4Z^XrroxR@dWxqf$!@#qGr4P
- JWT_ISSUER=user-api
- LOG_LEVEL=info
- RATE_LIMIT_WINDOW=15m
- RATE_LIMIT_MAX=100
ports:
- "80:80"
depends_on:
- usermanagement
- feedbackrequest
- feedbackresponse
- feedbackresponseview
Consideraciones de Seguridad
- HTTPS: En producción, configurar TLS/SSL para todas las comunicaciones.
- Rate Limiting: Implementar límites de solicitudes para prevenir ataques de DoS.
- Validación de Entrada: Filtrar y sanear los parámetros de entrada para prevenir inyecciones.
- Encabezados de Seguridad: Configurar encabezados como CORS, Content-Security-Policy y X-XSS-Protection.
- Monitoreo de Seguridad: Implementar la detección de patrones de tráfico sospechosos.
Próximos Pasos
- Implementación de Caché: Añadir caché de respuestas para mejorar el rendimiento.
- Documentación de API: Integrar Swagger/OpenAPI para la documentación automática.
- Versionamiento de API: Implementar una estrategia de versionamiento para una evolución segura.
- Analíticas: Recolectar métricas de uso para obtener insights de negocio.
- Service Discovery: Integrar con herramientas de descubrimiento de servicios para un enrutamiento dinámico.