Primer servicio GET con Spring Boot REST

Clase 27 de 31Curso de Java: Backend con Spring Boot

Contenido del curso

JPA con Spring y Spring Data

Resumen

Construir un API REST funcional es uno de los pasos más importantes cuando trabajas con Spring Boot. Dominar la forma en que se exponen servicios HTTP para que un cliente los consuma abre la puerta a proyectos profesionales y escalables. A continuación se explica, paso a paso, cómo crear el primer servicio de lectura (Read) dentro de un CRUD completo.

¿Qué hace la anotación @RestController y por qué es clave?

El punto de partida es crear una clase llamada UserRestController dentro de la carpeta controller [0:42]. Esta clase se anota con @RestController, una anotación que hereda de @Controller y que, además, se encarga de que todos los métodos que se definan allí devuelvan datos en formato JSON de forma automática. Esto significa que no necesitas configurar manualmente la serialización de objetos: Spring Boot lo resuelve por ti.

Dentro de este controlador se definen los servicios que un cliente podrá consumir: crear, obtener, eliminar y actualizar registros.

¿Cómo se estructura la capa de casos de uso?

Para mantener una arquitectura limpia, se crea un paquete llamado caseuse (case use) [1:22]. Dentro de él se define una interfaz llamada GetUser que declara un método getAll(), el cual retorna una lista de entidades de tipo User.

¿Cómo se implementa el caso de uso?

Se crea la clase GetUserImplement que implementa la interfaz anterior [1:50]. Esta clase:

  • Recibe por inyección de dependencias (a través del constructor) el servicio UserService.
  • Implementa el método getAll() delegando la lógica al método getAllUsers() de UserService.

Esta separación en capas permite que el controlador no dependa directamente de la lógica de negocio, sino de una abstracción representada por la interfaz.

¿Cómo se registra el caso de uso como bean de Spring?

Dentro de la carpeta de configuración se crea la clase CaseUseConfiguration [2:22], anotada con @Configuration. En ella se define un @Bean que retorna una instancia de GetUser:

java @Configuration public class CaseUseConfiguration {

@Bean public GetUser getUser(UserService userService) { return new GetUserImplement(userService); }

}

Este bean recibe como parámetro la dependencia UserService, que Spring inyecta automáticamente gracias al contenedor de inversión de control (IoC).

¿Cómo se expone el servicio REST para listar usuarios?

De vuelta en UserRestController, se inyecta el caso de uso GetUser mediante el constructor [3:08]. Luego se crea un método que devuelve la lista de usuarios:

java @RestController @RequestMapping("/api/users") public class UserRestController {

private final GetUser getUser; public UserRestController(GetUser getUser) { this.getUser = getUser; } @GetMapping("/") public List<User> get() { return getUser.getAll(); }

}

  • @RequestMapping("/api/users"): define la ruta base del controlador [3:22].
  • @GetMapping("/"): indica que el método responde a peticiones HTTP de tipo GET [3:42].

Cuando un cliente accede a /api/users/, obtiene la lista completa de usuarios registrados en la base de datos.

¿Cómo se prueba el servicio con Postman?

Una vez desplegada la aplicación, se utiliza Postman para consumir el servicio [4:10]. La URL completa queda así:

  • http://localhost:8081/app/api/users/.

Es fundamental verificar que el método HTTP seleccionado sea GET. Al enviar la petición con Send, el servidor responde con todos los usuarios en formato JSON.

El puerto 8081 y el contexto /app provienen de la configuración definida en el archivo application.properties del proyecto.

Este primer servicio corresponde a la letra R (Read) del acrónimo CRUD (Create, Read, Update, Delete). Con esta base ya establecida, los siguientes servicios de creación, actualización y eliminación seguirán un patrón muy similar. ¿Ya probaste tu servicio en Postman? Comparte tu experiencia en los comentarios.