Saltar a contenido

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

mmd

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.

mmd

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:

  1. Autenticación Avanzada: Validación y renovación de tokens JWT.
  2. Autorización Contextual: Decisiones de acceso basadas en los claims del token y el contexto de la solicitud.
  3. Transformación de Datos: Modificación de solicitudes y respuestas según sea necesario.
  4. Logging Estructurado: Registro detallado de todas las transacciones para auditoría y depuración.
  5. Circuit Breaking: Prevención de fallas en cascada entre servicios.
  6. Métricas y Monitoreo: Recolección de datos de rendimiento y uso en tiempo real.

Arquitectura del Gateway con Express

mmd

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

  1. Implementación de Caché: Añadir caché de respuestas para mejorar el rendimiento.
  2. Documentación de API: Integrar Swagger/OpenAPI para la documentación automática.
  3. Versionamiento de API: Implementar una estrategia de versionamiento para una evolución segura.
  4. Analíticas: Recolectar métricas de uso para obtener insights de negocio.
  5. Service Discovery: Integrar con herramientas de descubrimiento de servicios para un enrutamiento dinámico.