Curso de Spring Boot

Cuando una API crece, es importante documentarla para que otros desarrolladores puedan entender cómo usarla.

En lugar de escribir documentación manualmente, podemos generar documentación automática.

La herramienta más utilizada para esto es:

Swagger (OpenAPI)

Swagger permite:

  • ver todos los endpoints
  • probar la API desde el navegador
  • ver parámetros y respuestas
  • entender cómo funciona la API

13.1 Qué es OpenAPI

OpenAPI es un estándar para describir APIs.

Define:

  • rutas
  • métodos HTTP
  • parámetros
  • respuestas

Swagger es una herramienta que visualiza OpenAPI.


13.2 Dependencia para Spring Boot

En Spring Boot moderno se usa SpringDoc OpenAPI.

Añadir en pom.xml:

1<dependency>
2    <groupId>org.springdoc</groupId>
3    <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
4    <version>2.5.0</version>
5</dependency>

13.3 Ejecutar la aplicación

Arrancamos Spring Boot normalmente.

Luego abrimos en el navegador:

1http://localhost:8080/swagger-ui.html

o

1http://localhost:8080/swagger-ui/index.html

Aparecerá la interfaz Swagger.


13.4 Qué veremos en Swagger

Swagger muestra automáticamente:

  • todos los controllers
  • rutas
  • métodos HTTP
  • parámetros
  • respuestas

Ejemplo:

1GET /users
2POST /users
3GET /users/{id}
4DELETE /users/{id}

También permite ejecutar las peticiones.


13.5 Ejemplo Controller

1@RestController
2@RequestMapping("/users")
3public class UserController {
4
5    @GetMapping
6    public List<UserDTO> getUsers() {
7        return List.of(new UserDTO(1L,"Ana","ana@email.com"));
8    }
9
10}

Swagger generará automáticamente la documentación.


13.6 Probar endpoints desde Swagger

Swagger incluye un botón:

1Try it out

Esto permite enviar peticiones HTTP directamente desde la interfaz.

Por ejemplo:

1GET /users

Swagger ejecuta la petición y muestra la respuesta.


13.7 Documentar endpoints con anotaciones

Podemos añadir información adicional usando anotaciones.


Ejemplo

1@Operation(summary = "Obtener lista de usuarios")
2@GetMapping("/users")
3public List<UserDTO> getUsers() {
4
5    return service.getUsers();
6
7}

13.8 Documentar parámetros

1@Operation(summary = "Obtener usuario por id")
2@GetMapping("/users/{id}")
3public UserDTO getUser(
4        @Parameter(description="ID del usuario")
5        @PathVariable Long id) {
6
7    return service.getUser(id);
8
9}

13.9 Documentar request body

Ejemplo:

1@Operation(summary="Crear usuario")
2@PostMapping("/users")
3public UserDTO createUser(
4        @RequestBody CreateUserDTO dto) {
5
6    return service.createUser(dto);
7
8}

Swagger mostrará automáticamente el JSON esperado.


13.10 Documentar respuestas

También podemos documentar respuestas.


Ejemplo

1@Operation(summary="Obtener usuario")
2@ApiResponses({
3        @ApiResponse(responseCode="200", description="Usuario encontrado"),
4        @ApiResponse(responseCode="404", description="Usuario no encontrado")
5})
6@GetMapping("/users/{id}")
7public UserDTO getUser(@PathVariable Long id) {
8
9    return service.getUser(id);
10
11}

13.11 Ejemplo JSON mostrado en Swagger

Swagger genera ejemplos como este:

1{
2  "id": 1,
3  "name": "Ana",
4  "email": "ana@email.com"
5}

Esto ayuda a los desarrolladores a entender cómo usar la API.


13.12 Agrupar APIs

Podemos agrupar endpoints.


Ejemplo

1@Tag(name="Users", description="Operaciones sobre usuarios")
2@RestController
3@RequestMapping("/users")
4public class UserController {
5
6}

Swagger mostrará una sección llamada:

1Users

13.13 Cambiar información de la API

Podemos definir información global.


Ejemplo

1@Configuration
2public class OpenApiConfig {
3
4    @Bean
5    public OpenAPI apiInfo() {
6
7        return new OpenAPI()
8                .info(new Info()
9                        .title("API Usuarios")
10                        .description("API para gestionar usuarios")
11                        .version("1.0"));
12
13    }
14
15}

13.14 Ventajas de Swagger

ventajaexplicación
documentación automáticano escribir docs manual
probar endpointsdesde navegador
mejor comunicaciónfrontend entiende la API
menos errorescontrato claro

13.15 Swagger en producción

En producción a veces se desactiva Swagger por seguridad.

Ejemplo:

1springdoc.api-docs.enabled=false
  • Loading...