Skip to content

Repository files navigation

Curso práctico: cómo funciona una API REST

Desarrollado por el semillero de ByteProgramming

  • Anderson Fabián García Nieto
  • Daniel Eduardo Useche Pinilla

Que les sea de utilidad. El semillero siempre estará disponible para todo lo que deseen aprender, aportar y mejorar.

¡Saluditosss! 👋 (lo que me costó conseguir el emoji, Dios mio JAJAJA)

Java Maven Springb MongoDB Swagger Docker GitHub Actions


Este repositorio no es solo una API de recetas: es un mini-curso práctico para aprender, construyendo, cómo funciona una API REST — qué es un endpoint, cómo viaja una petición HTTP, cómo se estructura un backend en capas, y buenas prácticas de seguridad, pruebas y despliegue con Docker.

Está pensado para que hagas fork de este repositorio y lo desarrolles tú mismo, nivel por nivel, con una API de Recetas (Recipe) como caso de estudio: algunos endpoints ya están implementados como ejemplo guiado, y otros son esqueletos (TODO) que tú completas — la dificultad sube progresivamente, desde solo leer teoría hasta construir un recurso completo desde cero.

Objetivos de aprendizaje

Al terminar el curso vas a poder:

  • Explicar qué es una API, un endpoint, y cómo funciona el protocolo HTTP (verbos, status codes, headers, JSON).
  • Construir un CRUD completo con Spring Boot + MongoDB, respetando una arquitectura en capas (Controller → Service → Repository → DTO).
  • Escribir pruebas unitarias con JUnit 5 y Mockito, y entender qué mide la cobertura de código.
  • Aplicar prácticas básicas de seguridad: variables de entorno, validación de entrada, manejo centralizado de errores, CORS.
  • Implementar paginación y rate limiting.
  • Levantar el proyecto completo (API + base de datos + frontend de referencia) con Docker.

Si por algún motivo no saben usar Git, próximamente estaremos liberando otro minicurso.

Quickstart

# 1. Haz fork de este repositorio en GitHub, luego clónalo
git clone https://github.com/<tu-usuario>/API-de-Gestion-de-Recetas-DOSW-Company
cd API-de-Gestion-de-Recetas-DOSW-Company

# 2. Copia las variables de entorno de ejemplo
cp .env.example .env

# 3. Levanta todo (API + MongoDB + panel de avance) con Docker
docker compose up --build

Luego abre:

  • Swagger UI (documentación interactiva de la API): http://localhost:8080/swagger-ui.html
  • Panel de avance (frontend de referencia, ver qué endpoints ya funcionan): http://localhost:3000

Así se ven una vez levantados (capturas reales de este proyecto, con el nivel 1 ya resuelto como ejemplo guiado, de nada):

Panel de avance (http://localhost:3000)

Panel de avance del curso

Swagger UI (http://localhost:8080/swagger-ui.html)

Swagger UI con todos los endpoints documentados

¿Prefieres correrlo sin Docker, o usar MongoDB Atlas en vez del Mongo local? Revisa la guía completa del nivel 1.

El temario

El curso está organizado en 10 niveles, de dificultad creciente. Empieza por el índice completo del curso — ahí está el detalle de cada uno, con teoría, pistas de implementación y referencias exactas a los archivos que debes tocar.

# Nivel Dificultad
0 Teoría de APIs 🟢 Solo lectura
1 Puesta en marcha y buenas prácticas 🟢 Muy fácil
2 Tu primer endpoint 🟢 Fácil
3 CRUD completo 🟡 Media
4 Búsquedas y filtros 🟡 Media
5 Pruebas unitarias propias 🟡 Media
6 Seguridad básica 🟠 Media-alta
7 Paginación 🟠 Media-alta
8 Rate limiting 🔴 Alta
9 Proyecto final: un recurso nuevo desde cero 🔴 Alta

Cómo se evalúa tu avance

Cada nivel tiene un workflow de GitHub Actions en .github/workflows/ que corre automáticamente al hacer push a cualquier rama de tu fork (y en cada Pull Request). No necesitas configurar nada: solo entra a la pestaña Actions de tu repositorio en GitHub y revisa qué workflows quedan en verde ✅.

Los workflows son acumulativos (el de nivel 4 vuelve a correr las pruebas de los niveles 1-3) para detectar si algo que ya funcionaba se rompió con cambios nuevos. Además, docker-build.yml valida que las imágenes de la API y el frontend construyan sin errores.

Estructura del repositorio

src/main/java/.../controller/    Endpoints REST (capa Controller)
src/main/java/.../service/       Lógica de negocio (capa Service)
src/main/java/.../repository/    Acceso a datos con Spring Data (capa Repository)
src/main/java/.../model/         Entidades de persistencia (Recipe, Chef, ...)
src/main/java/.../dto/           Contratos públicos de la API (DTOs)
src/main/java/.../comment/       Paquete del proyecto final (nivel 9)
src/test/java/...                Pruebas unitarias (algunas ya dadas, otras las escribes tú)
docs/curso/                      El temario completo, un nivel por carpeta
docs/DOCKER.md                   Guía paso a paso de Docker
frontend/                        Panel de avance (HTML/CSS/JS plano, sin build)
.github/workflows/               Un Action por nivel + validación de Docker
compose.yaml                     Orquesta API + MongoDB + frontend

Preguntas frecuentes

¿Tengo que hacer los niveles en orden? Sí. Cada nivel asume que el anterior está implementado (los workflows también son acumulativos), y los niveles altos (paginación, rate limiting, proyecto final) reutilizan patrones de los niveles previos.

¿Puedo trabajar en una rama por nivel? Sí, y de hecho es una buena práctica: te deja ver en la pestaña Actions, por rama, exactamente en qué nivel vas. Los workflows corren en cualquier rama.

Un test falla y no entiendo por qué. Lee el mensaje de error del workflow en la pestaña Actions — casi siempre apunta directo al assert que falló. Revisa también los comentarios TODO nivelN en el archivo correspondiente: traen pistas específicas.

Si todo falla, pregúntale a tu profe, a la IA y, si no, mándanos un correo. (No creo que respondamos, pero vale la pena intentarlo XD).

Espero no este haciendo esto a ultima hora, si es asi hay una version resuelta por ahí (JAJA NO, NO ES VERDAD)*

Contexto y créditos

Este curso está construido sobre un proyecto real hecho para la materia DOSW (Desarrollo y Operaciones de Software): una API de gestión de recetas de un programa de cocina, con tres tipos de "chef" (Contestant, Judge, Viewer). El diseño original (diagramas UML, capturas del Swagger funcionando) está en docs/uml/ y docs/images/ como referencia histórica de cómo se ve la API una vez completamente implementada, este API desarrollada por Anderson Fabian Garcia Nieto y posteriormente adaptada al curso por mi Daniel Eduardo Useche Pinilla, saludos jaja.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages