Pular para conteúdo

Aula 05 - Criando APIs REST com Spring Web 📡

Chegou a hora de criar seus primeiros endpoints de verdade! Nesta aula, vamos usar o Spring Web para expor uma API REST completa.

😊 Anatomia de um Controller REST

Um @RestController mapeia URLs para métodos Java, usando anotações que representam os verbos HTTP.

@RestController
@RequestMapping("/produtos")
public class ProdutoController {

    @GetMapping
    public List<Produto> listar() {
        return List.of(new Produto("Mouse", 50.0));
    }

    @PostMapping
    public Produto criar(@RequestBody Produto produto) {
        return produto; // Em breve, salvaremos no banco (Aula 07)
    }
}

📊 Verbos HTTP e Anotações Correspondentes

Verbo Anotação Spring Ação
GET @GetMapping Buscar dados
POST @PostMapping Criar um recurso
PUT @PutMapping Atualizar um recurso inteiro
DELETE @DeleteMapping Remover um recurso

🧠 Capturando Dados da Requisição

Important

@PathVariable captura dados da URL. @RequestBody captura o corpo JSON da requisição. @RequestParam captura parâmetros de query string.

@GetMapping("/{id}")
public Produto buscarPorId(@PathVariable Long id) {
    return new Produto("Produto " + id, 100.0);
}

📊 Ciclo de uma Requisição REST

graph LR
    Cliente -- "GET /produtos/5" --> Controller
    Controller -- "@PathVariable id=5" --> Logic[Lógica do Método]
    Logic -- "Retorna Objeto" --> Spring[Spring converte para JSON]
    Spring -- "JSON" --> Cliente

💻 Testando com cURL

$ curl http://localhost:8080/produtos
[{"nome":"Mouse","preco":50.0}]

📝 Exercícios Progressivos

  1. Básico: Qual anotação usamos para criar um endpoint que responde a requisições GET?
  2. Básico: Para que serve o @RequestBody?
  3. Intermediário: Qual a diferença entre @PathVariable e @RequestParam?
  4. Intermediário: Como você criaria um endpoint DELETE /produtos/{id}?
  5. Desafio: Crie um Controller ClienteController com endpoints GET (listar todos), GET por id, POST e DELETE.

🚀 Mini-projeto: Crie o ProdutoController com os 4 endpoints básicos (GET, GET por id, POST, DELETE), retornando dados fixos por enquanto. Teste todos com o Postman ou cURL.