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étodoUso
GETobtener datos
POSTcrear datos
PUTactualizar datos
DELETEeliminar 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ódigoSignificado
200OK
201creado
400petición incorrecta
404no encontrado
500error 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...