REST es una arquitectura de estilo para una interfaz de programación de aplicaciones (API) y Spring Boot nos ayuda a crear nuestra aplicación de forma rápida y lista para lanzar a producción en un par de minutos.
Vídeo explicativo
Controlador REST
Los controladores son clases que nos permiten exponer nuestra API para ser usada de forma externa, en Spring Boot para declarar una clase como controlador, usaremos la anotación @RestController y usaremos diferente anotaciones extras para declarar en nuestros métodos que tipo de método HTTP se usará para llamar a nuestra lógica.
@RestController
@RestController nos creará una instancia en el contexto de Spring de la clase que contenga la anotación, de la misma forma que se crearía con la anotación @Component.
@RestController
@RequestMapping("/usuarios")
class UsuarioControlador {
}
La implementación de UsuarioControlador no es pública porque no necesita serlo.
@RequestMapping
La anotación @RequestMapping nos permite asignar una solicitud HTTP a un método o clase usando algunos criterios básicos cómo la ruta REST o el método HTTP.
@RequestMapping a nivel de clase
Podemos usar la anotación @RequestMapping a nivel de clase para asignar la ruta raíz de REST que se usará a nivel de clase.
@RestController
@RequestMapping("/usuarios")
class UsuarioControlador {
}
@RequestMapping a nivel de método
A nivel de método concatena la ruta de declarada nuestra clase con la ruta declarada en nuestro método, además podemos declarar diferentes métodos HTTP que nuestro método será asignado para la solicitud HTTP.
@RestController
@RequestMapping("/usuarios")
public class UsuarioControlador {
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public List<UsuarioDto> encontrarPorId(@PathVariable String id) {
}
}
Métodos específicos
Podemos usar diferentes anotaciones para capturar solicitudes con métodos HTTP específicos.
@GetMapping
Anotación para asignar solicitudes HTTP GET a métodos de controlador específicos.
@RestController
@RequestMapping("/usuarios")
public class UsuarioControlador {
@GetMapping("/{id}")
public UsuarioDto encontrarPorId(@PathVariable String id) {
}
}
@PostMapping
Anotación para asignar solicitudes HTTP POST a métodos de controlador específicos.
@RestController
@RequestMapping("/usuarios")
public class UsuarioControlador {
@PostMapping
public UsuarioDto crear(@RequestBody UsuarioDto usuario) {
}
}
@PutMapping
Anotación para asignar solicitudes HTTP PUT a métodos de controlador específicos.
@RestController
@RequestMapping("/usuarios")
public class UsuarioControlador {
@PutMapping("/{id}")
public void actualizar(@PathVariable( "id" ) String id, @RequestBody UsuarioDto usuario) {
}
}
@DeleteMapping
Anotación para asignar solicitudes HTTP DELETE a métodos de controlador específicos.
@RestController
@RequestMapping("/usuarios")
public class UsuarioControlador {
@DeleteMapping("/{id}")
public void eliminar(@PathVariable( "id" ) String id) {
}
}
@ResponseStatus
Cuando un punto final regresa con éxito, Spring proporciona una respuesta HTTP 200 (OK).
Si queremos especificar el estado de respuesta de un método de controlador, podemos marcar ese método con @ResponseStatus. Tiene dos argumentos intercambiables para el estado de respuesta deseado: code y value.
@RestController
@RequestMapping("/usuarios")
public class UsuarioControlador {
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public UsuarioDto crear(@RequestBody UsuarioDto usuario) {
}
}