Criando uma API REST com Spring Boot

Criando uma API REST com Spring Boot

Spring Boot é um framework Java que faz um projeto de servidor rodar rapidamente. A maior parte da configuração padrão já vem pronta: um servidor Tomcat embutido, acesso a banco de dados e conversão de JSON. Este artigo cria uma pequena API REST em três camadas: Controller, Service e Repository.

Nota de teste: o computador usado para escrever este artigo não tinha Maven nem Gradle, e o download das bibliotecas do Spring não foi testado aqui. O código abaixo segue o padrão usual. Execute você mesmo e confira o resultado antes de usar de verdade.

O que você precisa

Três camadas

Diagrama: o Controller recebe requisições HTTP, repassa ao Service, e o Service usa o Repository para acessar o banco de dados
Diagrama: o Controller recebe requisições HTTP, repassa ao Service, e o Service usa o Repository para acessar o banco de dados

Passo 1: crie o projeto

Acesse https://start.spring.io, escolha Maven e Java 17, adicione as dependências Spring Web e Spring Data JPA, depois gere e extraia o projeto.

Passo 2: classe de dados

package com.example.demo;

import jakarta.persistence.*;

@Entity
public class Note {
    @Id
    @GeneratedValue
    private Long id;
    private String title;

    public Note() {}
    public Note(String title) { this.title = title; }

    public Long getId() { return id; }
    public String getTitle() { return title; }
    public void setTitle(String title) { this.title = title; }
}

Passo 3: repository

package com.example.demo;

import org.springframework.data.jpa.repository.JpaRepository;

public interface NoteRepository extends JpaRepository<Note, Long> {
}

O Spring Data fornece automaticamente métodos básicos como `findAll`, `save` e `deleteById` por meio do `JpaRepository`.

Passo 4: service

package com.example.demo;

import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class NoteService {
    private final NoteRepository repository;

    public NoteService(NoteRepository repository) {
        this.repository = repository;
    }

    public List<Note> all() {
        return repository.findAll();
    }

    public Note create(String title) {
        return repository.save(new Note(title));
    }
}

Passo 5: controller

package com.example.demo;

import org.springframework.web.bind.annotation.*;
import java.util.List;

@RestController
@RequestMapping("/api/notes")
public class NoteController {
    private final NoteService service;

    public NoteController(NoteService service) {
        this.service = service;
    }

    @GetMapping
    public List<Note> list() {
        return service.all();
    }

    @PostMapping
    public Note create(@RequestBody Note body) {
        return service.create(body.getTitle());
    }
}

Passo 6: execute e teste

./mvnw spring-boot:run

Teste com curl:

curl -X POST http://localhost:8080/api/notes -H "Content-Type: application/json" -d "{\"title\":\"Comprar café\"}"
curl http://localhost:8080/api/notes

Erros comuns

Próximos passos

Adicione validação de entrada, centralize o tratamento de erros com `@ControllerAdvice` e teste o service com JUnit.

Resumo

O Spring Boot organiza a REST API em três camadas. O Controller recebe as requisições, o Service guarda a lógica, e o Repository conversa com o banco de dados. Essa separação torna o código mais fácil de testar e de manter.