API REST para la gestión de usuarios, desarrollada en Java con Spring Boot, que implementa autenticación JWT, validaciones, manejo centralizado de errores y pruebas automatizadas.
Este proyecto fue construido siguiendo buenas prácticas de arquitectura, con foco en legibilidad, mantenibilidad y testabilidad, y es completamente ejecutable tanto desde IDE como por línea de comandos.
- Registro de usuarios
- Inicio de sesión con JWT
- Consulta de usuarios
- Validación de datos de entrada
- Manejo centralizado de errores HTTP
- Seguridad con Spring Security + JWT
- Persistencia con JPA / Hibernate
- Base de datos en memoria (H2)
- Tests unitarios y de integración
- Documentación Swagger (OpenAPI)
El proyecto está organizado siguiendo una arquitectura por capas:
- Controller: exposición de endpoints REST
- Service: lógica de negocio
- Repository: acceso a datos (JPA)
- Domain / DTOs: modelos de dominio y transferencia
- Security: autenticación y autorización JWT
- Exception: manejo centralizado de errores
flowchart TB
Client[Cliente / Postman / Frontend] -->|HTTP JSON| UserController[UserController]
UserController -->|createUser dto| UserService[UserServiceImpl]
UserController -->|signin email y password| UserService
UserController -->|getAll| UserService
UserService --> UserRepo[UserRepository]
UserService --> RoleRepo[RoleRepository]
UserService --> Jwt[JwtProvider]
UserService --> Encoder[PasswordEncoder]
UserService --> AuthManager[AuthenticationManager]
UserRepo --> DB[(H2 Database)]
RoleRepo --> DB
Client -->|Authorization Bearer JWT| JwtFilter[JwtTokenFilter]
JwtFilter --> UserDetails[UserDetailsServiceInt]
UserDetails --> DB
JwtFilter --> SecurityContext[SecurityContextHolder]
SecurityContext --> UserController
ExceptionHandler[ExceptionHandlerController] -->|ErrorMessageResponse| Client
sequenceDiagram
participant C as Client
participant API as UserController
participant S as UserServiceImpl
participant AM as AuthenticationManager
participant JWT as JwtProvider
C->>API: POST /users/signin {email, password}
API->>S: signin(email, password)
S->>AM: authenticate(email, password)
S->>JWT: createToken(email, roles)
JWT-->>S: token
S-->>API: token
API-->>C: 200 { body: { token }, message }
UserApi usa varios proyectos open source para trabajar apropiadamente:
- JJWT - JJWT tiene como objetivo ser la biblioteca más fácil de usar y comprender para crear y verificar JSON Web Tokens (JWT) en JVM y Android.
- Spring Boot - Spring Boot facilita la creación de aplicaciones independientes basadas en Spring de grado de producción que puede "simplemente ejecutar".
- Spring Validation - Spring Validation facilita la validacion de entradad de datos.
- Spring Data JPA - Spring Data JPA, parte de la familia Spring Data más grande, facilita la implementación de repositorios basados en JPA que en su defecto usa la implementacion de Hibernate.
- Spring Boot Starter Web - Es todo lo necesario para poder arrancar un proyecto web api en minutos.
- H2 Database - H2 es un sistema administrador de bases de datos relacionales programado en Java. Puede ser incorporado en aplicaciones Java o ejecutarse de modo cliente-servidor.
- Java 11 - Es una versión importante de soporte a largo plazo (LTS) de Java que introdujo cambios significativos en la licencia de Oracle, haciéndola de pago para uso comercial, aunque sigue siendo gratuita a través de OpenJDK.
- Spring Security - Es un potente framework de autenticación y control de acceso altamente personalizable. Es el estándar de facto para proteger las aplicaciones basadas en Spring.
- JUnit 5 - Sirve de base para el lanzamiento de marcos de prueba en la JVM. También define la TestEngineAPI para desarrollar un marco de prueba que se ejecute en la plataforma.
- Mockito - Framework de mocking para pruebas unitarias en Java que permite simular objetos y comportamientos.
- MockMvc - Framework de pruebas web para Spring MVC que permite simular las solicitudes HTTP y verificar los resultados.
- Swagger (OpenAPI) - Swagger es un conjunto de herramientas de código abierto que ayudan a diseñar, construir, documentar y consumir servicios web RESTful.
- Autenticación basada en JWT
- Filtro personalizado
JwtTokenFilter - Stateless session (
SessionCreationPolicy.STATELESS) - Manejo de errores HTTP (400, 401, 403, 409, 415, 500)
- Git - Git es un sistema de control de versiones distribuido de código abierto y gratuito diseñado para manejar todo, desde proyectos pequeños a muy grandes, con velocidad y eficiencia.
- Java 11+ - Java es un lenguaje de programación y una plataforma informática lanzada por primera vez por Sun Microsystems en 1995.
- Visual Studio Code - Visual Studio Code es un editor de código fuente desarrollado por Microsoft para Windows, Linux y macOS. Version: 1.60.2 (Universal). Pero se puede utilizar cualquier otro de su preferencia (IntelliJ, eclipse, etc.).
http://localhost:8080/swagger-ui.html
Clone el repositorio.
git clone git@github.com:luchonetvv/user-api.git
git statusInstalar Visual Studio Code y luego abrir el proyecto... Con solo ejecutar el proyecto desde la clase LuchonetvvApplication.java, es decir, click en Run y estara listo para crear usuarios.
O si tu quieres construir e instalar desde la terminal, aqui estan los pasos:
On Mac or Linux
Ejecutar todos los tests:
./gradlew clean test./gradlew bootRunColeccion de postman para probar API Collection Postman
Apache License, Version 2.0
Luis Alberto Guido Calderón
https://github.com/luchonetvv
