API RESTful completa com autenticação JWT, Docker e boas práticas de mercado.
API desenvolvida do zero com Spring Boot 3 e Java 17, seguindo arquitetura em camadas e boas práticas do mercado. O projeto cobre desde um CRUD completo até autenticação JWT, containerização com Docker e testes automatizados.
| Camada | Tecnologia |
|---|---|
| Linguagem | Java 17 |
| Framework | Spring Boot 3 |
| Segurança | Spring Security + JWT (jjwt 0.11.5) |
| Banco de dados | PostgreSQL 15 |
| ORM | Spring Data JPA / Hibernate |
| Validação | Bean Validation (Jakarta) |
| Documentação | SpringDoc OpenAPI 3 (Swagger UI) |
| Testes | JUnit 5 + Mockito |
| Container | Docker + Docker Compose |
- ✅ CRUD completo de Produtos
- ✅ Cadastro e autenticação de usuários
- ✅ Tokens JWT com expiração de 24h
- ✅ Senhas criptografadas com BCrypt
- ✅ Proteção de endpoints por autenticação
- ✅ Validação de dados com mensagens customizadas
- ✅ Tratamento global de erros (Exception Handler)
- ✅ Documentação interativa via Swagger UI
- ✅ Testes unitários e de integração
- ✅ Containerização completa com Docker
# 1. Clone o repositório
git clone https://github.com/Mgrsantos/minha-api.git
cd minha-api
# 2. Suba os containers (API + PostgreSQL)
docker-compose up --buildA API estará disponível em: http://localhost:8080
# 1. Configure o banco no application.properties
spring.datasource.url=jdbc:postgresql://localhost:5432/minha_api
spring.datasource.username=postgres
spring.datasource.password=SUA_SENHA
# 2. Execute o projeto
./mvnw spring-boot:run| Método | Endpoint | Descrição |
|---|---|---|
POST |
/auth/registrar |
Cadastra novo usuário |
POST |
/auth/login |
Retorna token JWT |
Exemplo de registro:
POST /auth/registrar
{
"email": "usuario@email.com",
"senha": "123456"
}Exemplo de login:
POST /auth/login
{
"email": "usuario@email.com",
"senha": "123456"
}Resposta:
{
"token": "eyJhbGciOiJIUzI1NiJ9..."
}| Método | Endpoint | Descrição |
|---|---|---|
GET |
/produtos |
Lista todos os produtos |
GET |
/produtos/{id} |
Busca produto por ID |
POST |
/produtos |
Cria novo produto |
PUT |
/produtos/{id} |
Atualiza produto |
DELETE |
/produtos/{id} |
Remove produto |
Header obrigatório:
Authorization: Bearer SEU_TOKEN_JWT
Exemplo de criação:
POST /produtos
{
"nome": "Notebook",
"preco": 3500.00
}Com a aplicação rodando, acesse o Swagger UI:
http://localhost:8080/swagger-ui/index.html
# Rodar todos os testes
./mvnw testCobertura atual: 11 testes — ProdutoServiceTest (7) + ProdutoControllerTest (3) + MinhaApiApplicationTests (1)
src/
├── main/java/com/gapi/minha_api/
│ ├── controller/ # Endpoints REST
│ ├── service/ # Regras de negócio
│ ├── repository/ # Acesso ao banco
│ ├── model/ # Entidades JPA
│ ├── dto/ # Data Transfer Objects
│ ├── security/ # JWT, Filtros, Config
│ └── exception/ # Tratamento global de erros
└── test/ # Testes unitários e de integração
Gabriela Rondon — Desenvolvedora Backend