Curso de Spring Boot
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
5.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 |
Ejemplo de API de usuarios
1GET /users 2GET /users/1 3POST /users 4PUT /users/1 5DELETE /users/1
Cada ruta representa una operación.
5.2 Crear un Controller REST
En Spring Boot usamos la anotación:
@RestController
Esto indica que la clase manejará peticiones HTTP.
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.3 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
5.4 @GetMapping
Se usa para obtener datos.
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.
5.5 @PathVariable
Sirve para capturar valores de la URL.
Ejemplo:
GET /users/5
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
5.6 @RequestParam
Sirve para leer parámetros de consulta.
Ejemplo:
GET /search?name=Ana
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
5.7 @PostMapping
Se usa para crear datos.
Los datos se envían normalmente en JSON.
Ejemplo JSON
1{ 2 "name": "Ana", 3 "email": "ana@email.com" 4}
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.
5.8 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}
5.9 @PutMapping
Se usa para actualizar datos.
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}
5.10 @DeleteMapping
Sirve para eliminar datos.
Ejemplo
1@DeleteMapping("/users/{id}") 2public String deleteUser(@PathVariable Long id) { 3 4 return "Usuario eliminado " + id; 5 6}
5.11 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.
Resultado
1[ 2 { 3 "name": "Ana", 4 "email": "ana@email.com" 5 }, 6 { 7 "name": "Carlos", 8 "email": "carlos@email.com" 9 } 10]
5.12 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}
Respuesta HTTP
200 OK
Usuario encontrado
5.13 Códigos HTTP importantes
| Código | Significado |
|---|---|
| 200 | OK |
| 201 | creado |
| 400 | petición incorrecta |
| 404 | no encontrado |
| 500 | error servidor |
Ejemplo crear usuario
1@PostMapping("/users") 2public ResponseEntity<String> createUser() { 3 4 return ResponseEntity.status(201).body("Usuario creado"); 5 6}
5.14 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}
5.15 Herramientas para probar APIs
Puedes probar APIs con:
- navegador
- Postman
- Insomnia
- curl
- Thunder Client (VS Code)
Ejemplo curl:
1curl http://localhost:8080/users
- Loading...