API Gateway - Visión General
El API Gateway de IRIS es el punto de entrada central de la plataforma IDP (Intelligent Document Processing). Construido con Express.js y Node.js, orquesta la comunicación entre los microservicios Python y proporciona una interfaz unificada para clientes. El OCR sigue estando presente como componente del pipeline (Fases 5-6) para la extracción de texto especializada.
🎯 Propósito y Responsabilidades
Funciones Principales
- 🔐 Autenticación y Autorización: Sistema JWT completo con tokens de acceso y refresh
- 🔀 Orquestación de Microservicios: Coordina llamadas a los 4 microservicios Python
- 🛡️ Seguridad y Middleware: Rate limiting, CORS, helmet, validación de datos
- 📚 Documentación Automática: Swagger/OpenAPI integrado con interfaz interactiva
- 📊 Monitoreo y Logging: Sistema de logs estructurado y métricas de rendimiento
- ⚡ Cache y Optimización: Gestión eficiente de requests y respuestas
Arquitectura del Gateway
🏗️ Stack Tecnológico
Core Framework
- Express.js: Framework web minimalista y flexible
- Node.js 16+: Runtime JavaScript de alto rendimiento
- npm/yarn: Gestión de dependencias y scripts
Middleware y Seguridad
- Helmet: Protección de headers HTTP
- CORS: Configuración de Cross-Origin Resource Sharing
- express-rate-limit: Protección contra ataques DDoS
- express-validator: Validación robusta de datos de entrada
- compression: Compresión GZIP automática
Autenticación y Autorización
- jsonwebtoken: Generación y verificación de tokens JWT
- bcryptjs: Hashing seguro de contraseñas
- passport.js: Estrategias de autenticación flexibles
- express-session: Gestión de sesiones servidor
Documentación y Validación
- swagger-jsdoc: Generación automática de documentación OpenAPI
- swagger-ui-express: Interfaz interactiva para documentación
- joi: Esquemas de validación de datos robustos
- ajv: Validación JSON Schema de alto rendimiento
Logging y Monitoreo
- winston: Sistema de logging estructurado
- morgan: Logging de requests HTTP
- prometheus-client: Métricas para monitoreo
- express-status-monitor: Dashboard de métricas en tiempo real
🔌 Endpoints Principales
Autenticación
POST /api/v1/auth/register # Registro de usuarios
POST /api/v1/auth/login # Inicio de sesión
POST /api/v1/auth/refresh # Renovación de tokens
GET /api/v1/auth/profile # Perfil de usuario
POST /api/v1/auth/logout # Cierre de sesión
Pipeline Completo
POST /api/v1/pipeline/process # Ejecutar pipeline completo
GET /api/v1/pipeline/status # Estado del procesamiento
GET /api/v1/pipeline/history # Historial de procesamientos
Fases Individuales
POST /api/v1/phases/preprocess # Fase 1: Preprocesamiento
POST /api/v1/phases/embeddings # Fase 2: Embeddings
POST /api/v1/phases/classify # Fase 3-4: Clasificación
POST /api/v1/phases/extract # Fase 5-6: Extracción (IDP) con OCR
Administración
GET /health # Health check del sistema
GET /api # Información general de la API
GET /api-docs # Documentación Swagger
GET /metrics # Métricas de Prometheus
🛡️ Seguridad Implementada
Autenticación JWT
- Access Tokens: Corta duración (1 hora) para operaciones
- Refresh Tokens: Larga duración (7 días) para renovación
- Rotación Automática: Tokens rotan en cada renovación
- Revocación: Lista negra de tokens comprometidos
Rate Limiting
// Configuración por defecto
{
windowMs: 15 * 60 * 1000, // 15 minutos
max: 100, // 100 requests por ventana
message: "Demasiadas solicitudes"
}
// Endpoints críticos
{
max: 10, // Límite más estricto
skipSuccessfulRequests: true
}
Validación de Datos
- Joi Schemas: Validación estricta de payload
- Sanitización: Limpieza automática de datos de entrada
- Type Checking: Verificación de tipos de datos
- Custom Validators: Validaciones específicas del dominio
📈 Monitoreo y Métricas
Métricas Recolectadas
- Request Duration: Tiempo de respuesta por endpoint
- Request Count: Número de requests por minuto/hora
- Error Rate: Porcentaje de errores 4xx/5xx
- Memory Usage: Uso de memoria del proceso Node.js
- CPU Usage: Utilización de CPU
- Microservice Health: Estado de conexión con servicios Python
Dashboards Disponibles
- Health Check Dashboard:
/health- Estado general del sistema - Status Monitor:
/status- Métricas en tiempo real - Prometheus Metrics:
/metrics- Exportación para Grafana - Swagger UI:
/api-docs- Documentación interactiva
🔄 Comunicación con Microservicios
Patrón de Comunicación
// Ejemplo de llamada a microservicio
const response = await fetch(`${MICROSERVICE_URL}/endpoint`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-Request-ID': generateRequestId(),
'Authorization': `Bearer ${serviceToken}`
},
body: JSON.stringify(payload),
timeout: 30000
});
Manejo de Errores
- Circuit Breaker: Protección contra servicios caídos
- Retry Logic: Reintentos automáticos con backoff exponencial
- Fallback Responses: Respuestas por defecto en caso de falla
- Health Checks: Verificación periódica de servicios
Load Balancing
- Round Robin: Distribución equitativa de requests
- Health-based: Exclusión automática de servicios no saludables
- Weighted Distribution: Balanceo basado en capacidad de servicios
🚀 Configuración y Deployment
Variables de Entorno
# Configuración básica
NODE_ENV=production
PORT=3000
API_VERSION=1.0.0
# JWT Configuration
JWT_ACCESS_SECRET=your-secret-key
JWT_REFRESH_SECRET=your-refresh-secret
JWT_ACCESS_EXPIRY=1h
JWT_REFRESH_EXPIRY=7d
# Microservices URLs
IMAGE_PROCESSOR_URL=http://localhost:8001
ML_EMBEDDINGS_URL=http://localhost:8002
ML_CLASSIFIER_URL=http://localhost:8003
OCR_EXTRACTOR_URL=http://localhost:8004
# Rate Limiting
RATE_LIMIT_WINDOW=900000
RATE_LIMIT_MAX=100
Docker Configuration
FROM node:18-alpine AS production
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
📚 Próximos Pasos
- Arquitectura Detallada: Diseño interno y patrones utilizados
- Autenticación JWT: Configuración y uso del sistema de autenticación
- Endpoints Reference: Documentación completa de todos los endpoints
- Configuración: Guía de configuración para diferentes entornos
¿Tienes preguntas sobre el API Gateway? Consulta la documentación interactiva o revisa los ejemplos de uso.