# ADR-002: GraphQL vs REST **Estado:** Aceptado **Fecha:** 2026-01-07 ## Contexto La aplicación tiene relaciones complejas: - Estudiantes → Inscripciones → Materias → Profesores - Consultas como "materias disponibles" requieren múltiples joins - Frontend necesita flexibilidad en datos solicitados ## Decisión Usar **GraphQL** con HotChocolate como API. ## Consecuencias ### Positivas - **No over-fetching:** Cliente pide solo campos necesarios - **No under-fetching:** Una query obtiene datos relacionados - **Schema tipado:** Contrato explícito frontend-backend - **Playground incluido:** Banana Cake Pop para testing - **DataLoaders:** Resuelve N+1 automáticamente ### Negativas - Complejidad adicional vs REST simple - Curva de aprendizaje GraphQL - Requiere configurar query complexity limits - Cache más complejo que HTTP caching ## Ejemplo Comparativo ### REST (múltiples requests) ``` GET /students/1 GET /students/1/enrollments GET /subjects/1 GET /professors/1 ``` ### GraphQL (una query) ```graphql query { student(id: 1) { name enrollments { subject { name professor { name } } } } } ``` ## Alternativas | Alternativa | Razón de Descarte | |-------------|-------------------| | REST | Over/under-fetching, múltiples endpoints | | OData | Menos flexible, menos ecosistema | | gRPC | No ideal para frontend web | ## Referencias - [HotChocolate Docs](https://chillicream.com/docs/hotchocolate)