Skip to content

Repository files navigation

🌐 API Gateway - Ecosistema Completo de Microservicios

StatusArchitectureGraphQLJWT

🎯 Ecosistema 100% Funcional con 4 Microservicios Integrados - API Gateway que orquesta Component-1 (SIA Colegios), Component-2-1 (Profesores), Component-2-2 (Calificaciones) y Component-4 (Autenticación) con 35 endpoints disponibles.

🏗️ ARQUITECTURA DEL SISTEMA

🌐 API Gateway (Node.js + GraphQL) - Puerto 9000
├── 🎓 Component-1 (SIA Colegios) - Puerto 8083
│ ├── 🔧 Django 4.2.9 + Django REST Framework │ └── 🗄️ PostgreSQL SIA - Puerto 5433
├── 🔒 Component-4 (Authentication) - Puerto 8082
│ ├── 🔧 Go + Gin + JWT + OAuth2
│ └── 🗄️ PostgreSQL Auth - Puerto 5432
├── 👨‍🏫 Component-2-1 (Profesores & Asignaturas) - Puerto 8080 │ ├── 🔧 Java Spring Boot + GraphQL
│ └── 🗄️ MongoDB Profesores - Puerto 27018
└── 📊 Component-2-2 (Calificaciones) - Puerto 8081
├── 🔧 Java Spring Boot + GraphQL
└── 🗄️ MongoDB Calificaciones - Puerto 27019

🚀 INICIO RÁPIDO

📋 Prerequisitos

  • Docker y Docker Compose instalados
  • Puertos 9000, 8080, 8081, 8082, 8083, 5432, 5433, 27018, 27019 disponibles

⚡ Despliegue en 30 segundos

# 1. Clonar el repositorio
git clone [URL_DEL_REPOSITORIO]
cd API_Gateway/api-gateway-main
# 2. Iniciar todo el ecosistema
docker-compose up -d
# 3. Verificar que todos los servicios están ejecutándose
docker-compose ps
# 4. Probar conectividad básica
curl -X POST http://localhost:9000/graphql \
-H "Content-Type: application/json" \
-d '{"query": "query { cursos { count } holaMundo1 holaMundo2 }"}'

🔧 Script de Desarrollo

# Usar el script automatizado para desarrollo
./start-dev.sh

📚 DOCUMENTACIÓN COMPLETA DE ENDPOINTS - 35 ENDPOINTS TOTALES

🎓 SIA COLEGIOS (Component-1) - 15 ENDPOINTS

El Sistema de Información Académica maneja cursos y estudiantes con datos precargados de 18 cursos (desde 1-A hasta 11-B) y 36 estudiantes.

📋 ENDPOINTS DE CURSOS (7 endpoints)

EndpointTipoDescripciónParámetros
cursosQueryListar cursos con filtros y paginaciónsearch?, ordering?, page?
cursoQueryObtener curso específico por IDid!
cursoEstudiantesQueryEstudiantes de un curso específicoid!
crearCursoMutationCrear nuevo cursoinput: {nombre!, codigo!}
actualizarCursoMutationActualizar curso completamenteid!, input: {nombre!, codigo!}
actualizarCursoParcialMutationActualizar curso parcialmenteid!, nombre?, codigo?
eliminarCursoMutationEliminar cursoid!

👨‍🎓 ENDPOINTS DE ESTUDIANTES (8 endpoints)

EndpointTipoDescripciónParámetros
estudiantesQueryListar estudiantes con filtros y paginaciónsearch?, ordering?, page?
estudianteQueryObtener estudiante específico por IDid!
estudiantesPorCursoQueryEstudiantes filtrados por código de cursocodigo!
crearEstudianteMutationCrear nuevo estudianteinput: EstudianteInput!
actualizarEstudianteMutationActualizar estudiante completamenteid!, input: EstudianteInput!
actualizarEstudianteParcialMutationActualizar estudiante parcialmenteid!, campos opcionales
eliminarEstudianteMutationEliminar estudianteid!

📝 Ejemplos de Uso SIA

Crear Curso:

mutation {
crearCurso(input: {
nombre: "Doce A"codigo: "12-A"
}) {
idnombrecodigo
}
}

Listar Cursos con Filtros:

query {
cursos(search: "A", ordering: "nombre", page: 1) {
countnextpreviousresults {
idnombrecodigoestudiantes {
idnombreCompletodocumento
}
}
}
}

Crear Estudiante:

mutation {
crearEstudiante(input: {
nombreCompleto: "Ana María Rodríguez"documento: "1234567890"fechaNacimiento: "2010-05-15"acudiente: "Carlos Rodríguez"curso: "1"
}) {
idnombreCompletodocumentocurso {
nombrecodigo
}
}
}

Actualizar Estudiante Parcialmente:

mutation {
actualizarEstudianteParcial(
id: "5"acudiente: "Nuevo Acudiente"curso: "2"
) {
idnombreCompletoacudientecurso {
nombrecodigo
}
}
}

🔒 AUTENTICACIÓN (Component-4) - 4 ENDPOINTS

EndpointTipoDescripciónRequiere Token
loginUserMutationLogin con email/password
registerUserMutationRegistro de nuevo usuario
userProfileQueryObtener perfil del usuario
getGoogleLoginUrlQueryURL para OAuth2 Google

🔑 Credenciales de Prueba

Email: test@example.com
Password: password123

📝 Ejemplos de Uso

Login:

mutation {
loginUser(input: {
email: "test@example.com"password: "password123"
}) {
tokenmessage
}
}

Perfil de Usuario:

# Header: Authorization: Bearer [TOKEN_JWT]query {
userProfile {
messageuser_id
}
}

👨‍🏫 PROFESORES & ASIGNATURAS (Component-2-1) - 9 ENDPOINTS

EndpointTipoDescripciónParámetros
profesoresQueryListar todos los profesores-
crearProfesorMutationCrear nuevo profesornombre, documento, area
actualizarProfesorMutationActualizar profesor existenteid, nombre?, documento?, area?
eliminarProfesorMutationEliminar profesorid
asignaturasQueryListar todas las asignaturas-
crearAsignaturaMutationCrear nueva asignaturanombre
actualizarAsignaturaMutationActualizar asignaturaid, nombre
asignarProfesorAAsignaturaMutationAsignar profesor a asignaturaprofesorId, asignaturaId
desasignarProfesorDeAsignaturaMutationDesasignar profesorprofesorId, asignaturaId

📝 Ejemplos de Uso

Crear Profesor:

mutation {
crearProfesor(
nombre: "Dr. María García"documento: "CC87654321"area: "Matemáticas"
) {
idnombredocumentoarea
}
}

Actualizar Asignatura:

mutation {
actualizarAsignatura(
id: "65a1b2c3d4e5f6789012345"nombre: "Álgebra Lineal Avanzada"
) {
idnombreprofesorIds
}
}

📊 CALIFICACIONES (Component-2-2) - 5 ENDPOINTS

EndpointTipoDescripciónParámetros
calificacionesQueryListar calificaciones (con filtros)estudianteId?, asignaturaId?, cursoId?, periodo?
registrarCalificacionMutationRegistrar nueva calificaciónestudianteId, asignaturaId, cursoId, periodo, nota, observaciones?
actualizarCalificacionMutationActualizar calificaciónid, nota?, observaciones?
eliminarCalificacionMutationEliminar calificaciónid

📝 Ejemplos de Uso

Registrar Calificación Completa:

mutation {
registrarCalificacion(
estudianteId: "est-12345"asignaturaId: "65a1b2c3d4e5f6789012346"cursoId: "11-A"periodo: "2025-1"nota: 4.5observaciones: "Excelente desempeño en el examen"
) {
idestudianteIdnotaobservaciones
}
}

🛠️ UTILIDADES - 2 ENDPOINTS

EndpointTipoDescripción
holaMundo1QueryHealth check Component-2-1
holaMundo2QueryHealth check Component-2-2

🧪 TESTING CON POSTMAN - COLECCIÓN COMPLETA

📥 Importar Colección

  1. Descargar: API_Gateway_Tests_DEFINITIVO_COMPLETO.postman_collection.json
  2. Importar en Postman
  3. Configurar variable de entorno base_url: http://localhost:9000

📊 Estructura de la Colección (35 endpoints organizados)

📁 API Gateway - Ecosistema Completo (35 endpoints)
├── 🔒 1. Autenticación (4 endpoints)
│ ├── Login Usuario
│ ├── Registro Usuario │ ├── Perfil Usuario (requiere token)
│ └── URL Login Google
├── 🎓 2. SIA Colegios - Cursos (7 endpoints)
│ ├── Listar Cursos (con filtros)
│ ├── Obtener Curso por ID
│ ├── Estudiantes de Curso
│ ├── Crear Curso
│ ├── Actualizar Curso Completo
│ ├── Actualizar Curso Parcial
│ └── Eliminar Curso
├── 👨‍🎓 3. SIA Colegios - Estudiantes (8 endpoints)
│ ├── Listar Estudiantes (con filtros)
│ ├── Obtener Estudiante por ID
│ ├── Estudiantes por Código de Curso
│ ├── Crear Estudiante
│ ├── Actualizar Estudiante Completo
│ ├── Actualizar Estudiante Parcial
│ ├── Transferir Estudiante de Curso
│ └── Eliminar Estudiante
├── 👨‍🏫 4. Profesores & Asignaturas (9 endpoints)
│ ├── Listar Profesores
│ ├── Crear Profesor
│ ├── Actualizar Profesor
│ ├── Eliminar Profesor
│ ├── Listar Asignaturas
│ ├── Crear Asignatura
│ ├── Actualizar Asignatura
│ ├── Asignar Profesor a Asignatura
│ └── Desasignar Profesor de Asignatura
├── 📊 5. Calificaciones (5 endpoints)
│ ├── Listar Calificaciones (con filtros)
│ ├── Registrar Calificación
│ ├── Actualizar Calificación
│ ├── Eliminar Calificación
│ └── Calificaciones por Periodo
└── 🛠️ 6. Utilidades (2 endpoints)
├── Health Check MS Profesores
└── Health Check MS Calificaciones

🔄 Flujo de Pruebas Recomendado

  1. 🔑 Ejecutar LOGIN para obtener token JWT
  2. 🎓 Crear curso y guardar ID
  3. 👨‍🎓 Crear estudiante asignado al curso
  4. 👨‍🏫 Crear profesor y guardar ID
  5. 📚 Crear asignatura y guardar ID
  6. 🔗 Asignar profesor a asignatura
  7. 📊 Registrar calificación usando los IDs anteriores
  8. ✏️ Probar actualizaciones (curso, estudiante, profesor, asignatura, calificación)
  9. 🔄 Probar transferencia de estudiante entre cursos
  10. 🗑️ Limpiar datos (eliminar calificación, estudiante, profesor, curso)

⚙️ Variables Automáticas Manejadas

La colección maneja automáticamente:

  • jwt_token: Token de autenticación
  • curso_id: ID del último curso creado
  • estudiante_id: ID del último estudiante creado
  • profesor_id: ID del último profesor creado
  • asignatura_id: ID de la última asignatura creada
  • calificacion_id: ID de la última calificación registrada

🔧 CONFIGURACIÓN AVANZADA

🌍 Variables de Entorno

// config.js
GX_SIA_URL=http://component-1:8000 // SIA ColegiosGX_MS1_URL=http://component-2-1:8080/graphql // ProfesoresGX_MS2_URL=http://component-2-2:8081/graphql // Calificaciones GX_AUTH_URL=http://component-4:8080 // Autenticación

🗄️ Bases de Datos

ServicioBase de DatosPuertoUsoDatos Precargados
Component-1PostgreSQL5433Cursos y estudiantes18 cursos, 36 estudiantes
Component-4PostgreSQL5432Usuarios y autenticaciónUsuario de prueba
Component-2-1MongoDB27018Profesores y asignaturas-
Component-2-2MongoDB27019Calificaciones-

🔐 Autenticación JWT

// Headers para endpoints protegidos
Authorization: Bearer[TOKEN_JWT]// El token se incluye automáticamente en el contexto GraphQL// y está disponible en todos los resolvers

🚨 RESOLUCIÓN DE PROBLEMAS

🔍 Verificación de Servicios

# Verificar todos los contenedores están ejecutándose
docker-compose ps
# Ver logs de un servicio específico
docker-compose logs api-gateway
docker-compose logs component-1
docker-compose logs component-4
docker-compose logs component-2-1
docker-compose logs component-2-2
# Reiniciar servicios si hay problemas
docker-compose restart

🏥 Health Checks

# Verificar SIA Colegiosquery { cursos { count } }
# Verificar conectividad Component-2-1query { holaMundo1 }
# Verificar conectividad Component-2-2 query { holaMundo2 }
# Ver todas las queries disponiblesquery {
__schema {
queryType {
fields {
namedescription
}
}
}
}

🐛 Problemas Comunes

Error: "Cannot query field"

  • Solución: Verificar que todos los contenedores estén ejecutándose
  • Comando: docker-compose restart

Error: "Authentication failed"

  • Solución: Ejecutar login primero y verificar que el token se guardó
  • Credenciales: test@example.com / password123

Error: "Connection refused"

  • Solución: Esperar 30-60 segundos después del docker-compose up
  • Verificar: Los microservicios necesitan tiempo para inicializarse

Error: "Component-1 restarting"

  • Solución: Problema resuelto con comando ["django"] en docker-compose
  • Verificar: Logs no deben mostrar errores de locale

📊 MONITOREO Y MÉTRICAS

📈 URLs de Monitoreo

🌐 API Gateway GraphQL Playground: http://localhost:9000/graphql
🎓 Component-1 SIA API: http://localhost:8083/api/
🔒 Component-4 Health: http://localhost:8082/health
👨‍🏫 Component-2-1 GraphQL: http://localhost:8080/graphql 📊 Component-2-2 GraphQL: http://localhost:8081/graphql

📊 Métricas de Estado

  • ✅ API Gateway: Operativo en puerto 9000
  • ✅ SIA Colegios: Django REST API funcionando en puerto 8083
  • ✅ Autenticación: JWT + OAuth2 funcionando
  • ✅ CRUD Profesores: Todas las operaciones disponibles
  • ✅ CRUD Asignaturas: Incluyendo actualización y desasignación
  • ✅ CRUD Calificaciones: Con actualización selectiva mejorada
  • ✅ Bases de Datos: 2 PostgreSQL + 2 MongoDB conectadas

🏆 CARACTERÍSTICAS DESTACADAS

⭐ Funcionalidades Implementadas

  1. 🆕 SIA Colegios Completo: 15 endpoints para gestión de cursos y estudiantes
  2. 🆕 Actualización Parcial: Todos los recursos soportan actualización parcial
  3. 🆕 Filtros Avanzados: Búsqueda, ordenamiento y paginación en SIA
  4. 🆕 Relaciones Inteligentes: Cursos-Estudiantes con resolvers automáticos
  5. 🆕 Datos Precargados: 18 cursos (1-A a 11-B) y 36 estudiantes listos
  6. 🆕 Validación de Datos: Documentos únicos, fechas válidas, referencias correctas

🔐 Seguridad

  • JWT Authentication: Tokens seguros con Component-4
  • Google OAuth2: Integración completa con Google
  • Authorization Headers: Protección automática de endpoints
  • Input Validation: Validación en todos los niveles

🚀 Performance

  • GraphQL Caching: Optimización de consultas
  • Connection Pooling: Gestión eficiente de conexiones DB
  • Async/Await: Operaciones no bloqueantes
  • Docker Networking: Comunicación optimizada entre servicios
  • Paginación: Respuestas optimizadas para grandes datasets

📞 SOPORTE Y CONTRIBUCIÓN

🛠️ Stack Tecnológico

  • API Gateway: Node.js 18+ + Express + Apollo GraphQL
  • SIA Colegios: Django 4.2.9 + Django REST Framework + PostgreSQL
  • Authentication: Go + Gin + JWT + OAuth2 + PostgreSQL
  • Microservices: Java Spring Boot + GraphQL + MongoDB
  • Containerization: Docker + Docker Compose
  • Testing: Postman + Jest

📋 Estado del Proyecto

  • Component-1 (SIA) Integrado con 15 endpoints funcionales
  • Component-4 Integrado sin dañar funcionalidades existentes
  • Todas las operaciones CRUD funcionando correctamente
  • Testing exhaustivo completado exitosamente con 35 endpoints
  • Documentación completa actualizada
  • Ecosistema listo para producción

🎯 RESUMEN EJECUTIVO

El ecosistema de microservicios está 100% operativo con las siguientes capacidades:

  • 🎓 Sistema de Información Académica completo con cursos y estudiantes
  • 🔒 Autenticación robusta con JWT y OAuth2
  • 👨‍🏫 Gestión completa de profesores y asignaturas
  • 📊 Sistema de calificaciones con funcionalidades avanzadas
  • 🧪 Suite de testing completa con Postman (35 endpoints)
  • 📚 Documentación exhaustiva y actualizada
  • 🚀 Deployment automatizado con Docker

Todos los objetivos cumplidos exitosamente con 4 microservicios integrados, 35 endpoints disponibles y funcionalidad completa preservada.

About

Capa de comunicación

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages