Creación de APIs REST
Una de las cosas más importantes que se hacen con Spring Boot es crear APIs REST.
Las APIs permiten que otras aplicaciones se comuniquen con nuestro sistema.
Por ejemplo:
- una web Angular
- una app móvil
- otro servidor
1. Qué es una API REST #
Una API REST es un sistema que permite acceder a datos mediante HTTP.
Se utilizan normalmente estos métodos:
| Método | Uso |
|---|---|
| GET | obtener datos |
| POST | crear datos |
| PUT | actualizar datos |
| DELETE | eliminar datos |
2. Ejemplo de API de usuarios #
1GET /users 2GET /users/1 3POST /users 4PUT /users/1 5DELETE /users/1
Cada ruta representa una operación.
3. Crear un Controller REST #
En Spring Boot usamos la anotación:
@RestController
Esto indica que la clase manejará peticiones HTTP.
4. Ejemplo #
1@RestController 2public class HelloController { 3 4 @GetMapping("/hello") 5 public String hello() { 6 return "Hola mundo"; 7 } 8 9}
Si visitamos:
http://localhost:8080/hello
Respuesta:
Hola mundo
5. Usar @RequestMapping #
Permite definir una ruta base para el controller.
Ejemplo:
1@RestController 2@RequestMapping("/users") 3public class UserController { 4 5}
Ahora todas las rutas empiezan por:
/users
6. @GetMapping #
Se usa para obtener datos.
7. Ejemplo #
1@GetMapping("/users") 2public List<String> getUsers() { 3 4 return List.of("Ana", "Carlos", "Laura"); 5 6}
Petición:
GET /users
Respuesta:
1[ 2 "Ana", 3 "Carlos", 4 "Laura" 5]
Spring automáticamente convierte la lista a JSON.
8. @PathVariable #
Sirve para capturar valores de la URL.
Ejemplo:
GET /users/5
9. Ejemplo de código #
1@GetMapping("/users/{id}") 2public String getUser(@PathVariable Long id) { 3 4 return "Usuario " + id; 5 6}
Petición:
GET /users/10
Respuesta:
Usuario 10
10. @RequestParam #
Sirve para leer parámetros de consulta.
Ejemplo:
GET /search?name=Ana
11. Código #
1@GetMapping("/search") 2public String search(@RequestParam String name) { 3 4 return "Buscando usuario: " + name; 5 6}
Petición:
/search?name=Carlos
Respuesta:
Buscando usuario: Carlos
12. @PostMapping #
Se usa para crear datos.
Los datos se envían normalmente en JSON.
13. Ejemplo JSON #
1{ 2 "name": "Ana", 3 "email": "ana@email.com" 4}
14. Código #
1@PostMapping("/users") 2public String createUser(@RequestBody User user) { 3 4 return "Usuario creado: " + user.getName(); 5 6}
Spring convierte automáticamente el JSON a un objeto Java.
15. Clase User #
1public class User { 2 3 private String name; 4 private String email; 5 6 public String getName() { 7 return name; 8 } 9 10 public void setName(String name) { 11 this.name = name; 12 } 13 14}
16. @PutMapping #
Se usa para actualizar datos.
17. Ejemplo #
1@PutMapping("/users/{id}") 2public String updateUser(@PathVariable Long id, 3 @RequestBody User user) { 4 5 return "Usuario actualizado: " + id; 6 7}
Petición:
PUT /users/1
Body:
1{ 2 "name": "Carlos" 3}
18. @DeleteMapping #
Sirve para eliminar datos.
19. Ejemplo #
1@DeleteMapping("/users/{id}") 2public String deleteUser(@PathVariable Long id) { 3 4 return "Usuario eliminado " + id; 5 6}
20. Devolver objetos #
Normalmente las APIs devuelven objetos o listas.
Ejemplo:
1@GetMapping("/users") 2public List<User> getUsers() { 3 4 return List.of( 5 new User("Ana", "ana@email.com"), 6 new User("Carlos", "carlos@email.com") 7 ); 8 9}
Spring automáticamente genera JSON.
21. Resultado #
1[ 2 { 3 "name": "Ana", 4 "email": "ana@email.com" 5 }, 6 { 7 "name": "Carlos", 8 "email": "carlos@email.com" 9 } 10]
22. Usar ResponseEntity #
Permite controlar la respuesta HTTP.
Ejemplo:
1@GetMapping("/users/{id}") 2public ResponseEntity<String> getUser(@PathVariable Long id) { 3 4 return ResponseEntity.ok("Usuario encontrado"); 5 6}
23. Respuesta HTTP #
200 OK
Usuario encontrado
24. Códigos HTTP importantes #
| Código | Significado |
|---|---|
| 200 | OK |
| 201 | creado |
| 400 | petición incorrecta |
| 404 | no encontrado |
| 500 | error servidor |
25. Ejemplo crear usuario #
1@PostMapping("/users") 2public ResponseEntity<String> createUser() { 3 4 return ResponseEntity.status(201).body("Usuario creado"); 5 6}
26. API REST completa ejemplo #
1@RestController 2@RequestMapping("/users") 3public class UserController { 4 5 @GetMapping 6 public List<String> getUsers() { 7 return List.of("Ana", "Carlos"); 8 } 9 10 @GetMapping("/{id}") 11 public String getUser(@PathVariable Long id) { 12 return "Usuario " + id; 13 } 14 15 @PostMapping 16 public String createUser() { 17 return "Usuario creado"; 18 } 19 20 @PutMapping("/{id}") 21 public String updateUser(@PathVariable Long id) { 22 return "Usuario actualizado"; 23 } 24 25 @DeleteMapping("/{id}") 26 public String deleteUser(@PathVariable Long id) { 27 return "Usuario eliminado"; 28 } 29 30}
27. Herramientas para probar APIs #
Puedes probar APIs con:
- navegador
- Postman
- Insomnia
- curl
- Thunder Client (VS Code)
Ejemplo curl:
1curl http://localhost:8080/users
Resumen del tema
Conceptos clave #
- Controlador REST (
@RestController+@RequestMapping): combinación que serializa automáticamente las respuestas de los métodos en JSON mediante Jackson. - Mapeos de Verbos HTTP:
@GetMapping(lectura),@PostMapping(creación),@PutMapping/@PatchMapping(actualización) y@DeleteMapping(borrado). - Extracción de Parámetros:
@PathVariable: variables en el path de la URL (/users/{id}).@RequestParam: parámetros de consulta (query params/search?name=Ana).@RequestBody: deserialización automática del payload JSON entrante en un objeto Java.
- Control de Respuestas con
ResponseEntity<T>: personalización de códigos de estado HTTP (200 OK, 201 Created, 404 Not Found) y cabeceras de respuesta.
Qué debes recordar #
Modela endpoints RESTful semánticos mapeando los verbos HTTP correspondientes y envolviendo las respuestas en ResponseEntity con el código de estado adecuado.