30.6 Desenvolvendo APIs REST com Spring Boot: Mapeamento de Rotas com @RestController e @RequestMapping
O desenvolvimento de APIs REST é uma parte fundamental da programação moderna em Java, e o Spring Boot oferece ferramentas poderosas para tornar esse processo eficiente e simplificado. Neste capítulo, vamos explorar como criar APIs REST com o Spring Boot, enfocando o mapeamento de rotas utilizando as anotações @RestController
e @RequestMapping
.
O que é uma API REST?
Antes de mergulharmos na implementação, é importante entender o que é uma API REST. REST (Representational State Transfer) é um estilo arquitetônico para sistemas distribuídos, e uma API REST é uma interface de programação de aplicações que adere a esse estilo. Ela permite a comunicação entre diferentes sistemas de software na internet. As APIs REST são baseadas em recursos, e cada recurso é acessado através de URLs únicas. A comunicação é geralmente feita usando o protocolo HTTP.
Introdução ao Spring Boot
O Spring Boot é um projeto da Spring Framework que visa simplificar o processo de configuração e publicação de aplicações baseadas em Spring. Ele oferece uma maneira rápida de criar aplicações stand-alone que podem ser executadas facilmente, reduzindo a necessidade de configuração manual e otimizando o processo de desenvolvimento.
@RestController e @RequestMapping
No contexto do Spring Boot, @RestController
é uma anotação que é usada para definir um controlador Spring MVC que serve endpoints de uma API REST. Esta anotação é uma especialização do @Controller
e indica que a classe lidará com solicitações web. Ela também garante que os dados retornados pelos métodos sejam escritos diretamente no corpo da resposta, geralmente em formato JSON ou XML.
Por outro lado, @RequestMapping
é uma anotação que é usada para mapear solicitações web a métodos específicos em controladores. Ela pode ser aplicada tanto a nível de classe quanto de método e permite configurar aspectos da solicitação como o URL, método HTTP (GET, POST, PUT, DELETE, etc.), cabeçalhos e parâmetros da solicitação.
Criando um Controlador com @RestController
Para criar um controlador REST no Spring Boot, você começa anotando uma classe com @RestController
. Isso transforma a classe em um bean do Spring e permite que ela trate solicitações HTTP.
@RestController
public class ExemploController {
// Métodos do controlador virão aqui
}
Definindo Rotas com @RequestMapping
Dentro do controlador, você define métodos para lidar com diferentes rotas. Cada rota pode ser mapeada para um método usando @RequestMapping
. Você pode especificar o caminho da rota, o método HTTP e outros detalhes da solicitação.
@RestController
public class ExemploController {
@RequestMapping(value = "/exemplo", method = RequestMethod.GET)
public String getExemplo() {
return "Dados do exemplo";
}
}
No exemplo acima, um GET para "/exemplo" retornará a string "Dados do exemplo".
Parâmetros de Rota e de Solicitação
Com o Spring Boot, você pode facilmente capturar parâmetros de rota e de solicitação. Parâmetros de rota são partes variáveis do caminho da URL e são anotados com @PathVariable
. Parâmetros de solicitação são valores passados como parte da query string da URL e são anotados com @RequestParam
.
@RestController
public class ExemploController {
@RequestMapping(value = "/exemplo/{id}", method = RequestMethod.GET)
public String getExemploPorId(@PathVariable("id") Long id) {
// Lógica para retornar um exemplo baseado no id fornecido
return "Dados do exemplo com ID: " + id;
}
@RequestMapping(value = "/exemplo", method = RequestMethod.GET)
public String getExemploComParam(@RequestParam(name = "nome", required = false) String nome) {
// Lógica para retornar um exemplo baseado no nome fornecido
return "Dados do exemplo com nome: " + nome;
}
}
Respostas HTTP e Status Codes
Controlar as respostas HTTP e os status codes é essencial para uma API REST. O Spring Boot facilita isso com a anotação @ResponseStatus
e a classe ResponseEntity
. Com @ResponseStatus
, você pode definir o status code de resposta diretamente no método do controlador. Já com ResponseEntity
, você tem controle mais fino sobre a resposta, podendo definir cabeçalhos, corpo e status code.
@RestController
public class ExemploController {
@RequestMapping(value = "/exemplo", method = RequestMethod.POST)
@ResponseStatus(HttpStatus.CREATED)
public void addExemplo(@RequestBody Exemplo exemplo) {
// Lógica para adicionar um novo exemplo
}
@RequestMapping(value = "/exemplo/{id}", method = RequestMethod.PUT)
public ResponseEntity<String> updateExemplo(@PathVariable("id") Long id, @RequestBody Exemplo exemplo) {
// Lógica para atualizar um exemplo existente
return ResponseEntity.ok("Exemplo atualizado com sucesso");
}
}
Conclusão
O mapeamento de rotas com @RestController
e @RequestMapping
no Spring Boot é uma abordagem poderosa e flexível para desenvolver APIs REST. Com essas anotações, você pode criar controladores que respondem a diferentes tipos de solicitações HTTP, manipulam parâmetros de forma eficiente e controlam as respostas de maneira elegante. Ao dominar esses conceitos, você estará bem equipado para construir APIs robustas e escaláveis em Java.