API RESTful para la gestión de tareas con autenticación y autorización basada en JWT, desarrollada con Spring Boot.
Este proyecto es una práctica realizada a partir de la página roadmap.sh
- Descripción
- Tecnologías Utilizadas
- Arquitectura y Diseño
- Características Principales
- Estructura del Proyecto
- Seguridad
- Manejo de Errores
- Pruebas
- Fortalezas del Proyecto
- Cómo Ejecutar
- Endpoints Principales
- Contribuciones
ToDoListAPI es una API REST que permite a los usuarios registrarse, autenticarse y gestionar sus tareas personales. Cada usuario puede crear, listar, actualizar y eliminar sus propias tareas. El sistema implementa roles y permisos, y protege los endpoints usando JWT para garantizar la seguridad y privacidad de los datos.
- Spring Boot: Framework principal para desarrollo rápido de aplicaciones Java.
- Spring Web (MVC): Para la creación de controladores REST y manejo de rutas HTTP.
- Spring Data JPA: Acceso y persistencia de datos en bases de datos relacionales.
- Spring Security: Autenticación y autorización, integración con JWT.
- JWT (JSON Web Token): Autenticación stateless y segura.
- Lombok: Reducción de código repetitivo (getters, setters, builders, etc.).
- JUnit 5 & Mockito: Pruebas unitarias y de integración.
- Bean Validation: Validación automática de datos de entrada en DTOs.
- Presentación (Controllers): Expone endpoints REST y recibe las peticiones HTTP.
- Servicio (Services): Contiene la lógica de negocio y validaciones.
- Persistencia (Repositories): Acceso a la base de datos mediante JPA.
- Seguridad: Filtros y utilidades para autenticación y autorización con JWT.
- DTO (Data Transfer Object): Para transferir datos entre capas sin exponer entidades.
- Builder: Construcción de objetos complejos de forma segura y legible.
- Singleton (Spring Beans): Servicios y repositorios gestionados por Spring.
- Registro y autenticación de usuarios.
- Gestión de tareas personales (CRUD).
- Roles y permisos para control de acceso.
- Seguridad basada en JWT (stateless).
- Paginación en la consulta de tareas.
- Manejo global de errores y respuestas estructuradas.
- Pruebas unitarias y de integración.
- Código limpio, modular y fácil de mantener.
src/
├── main/
│ ├── java/
│ │ └── com/kg/ToDoListAPI/
│ │ ├── auth/ # Módulo de autenticación y seguridad
│ │ ├── module/task/ # Módulo de gestión de tareas
│ │ ├── common/ # Utilidades y excepciones globales
│ │ └── ToDoListApiApplication.java
│ └── resources/
│ └── application.properties
└── test/
└── java/
└── com/kg/ToDoListAPI/
├── auth/
└── module/task/
- JWT: Todos los endpoints protegidos requieren un token JWT válido.
- Roles y Permisos: Control granular de acceso a recursos.
- Spring Security: Configuración de filtros, políticas stateless y manejo de excepciones de seguridad.
- GlobalExceptionHandler: Captura y responde con mensajes claros y estructurados ante errores de validación, acceso denegado, recursos no encontrados, etc.
- JUnit 5 & Mockito: Pruebas unitarias para servicios y controladores.
- MockMvc: Pruebas de integración para endpoints REST.
- Cobertura: Alta cobertura de código y validación de flujos críticos.
- Modularidad: Separación clara de responsabilidades por capas y módulos.
- Escalabilidad: Fácil de extender con nuevos módulos, entidades o endpoints.
- Seguridad: Implementación robusta de autenticación y autorización.
- Mantenibilidad: Código limpio, uso de DTOs y buenas prácticas de Java/Spring.
- Testabilidad: Pruebas unitarias y de integración bien estructuradas.
- Documentación: Código autoexplicativo y fácil de entender.
- Clona el repositorio:
git clone https://github.com/kgonzagao/ToDoListAPI.git cd ToDoListAPI - Configura la base de datos en
src/main/resources/application.properties. - Ejecuta la aplicación:
./mvnw spring-boot:run
- La API estará disponible en
http://localhost:8080.
POST /auth/sign-up— Registro de usuarioPOST /auth/login— Login de usuarioPOST /auth/refresh-token— Renovar token JWT
GET /api/tasks— Listar tareas del usuario autenticado (paginado)POST /api/tasks— Crear nueva tareaPUT /api/tasks/{id}— Actualizar tarea existenteDELETE /api/tasks/{id}— Eliminar tarea
¡Contribuciones, issues y sugerencias son bienvenidas!
Por favor, abre un issue o pull request para discutir cualquier cambio importante antes de realizarlo.
Este proyecto está bajo la Licencia Apache 2.0.