API CRUD desenvolvida com Spring Boot e PostgreSQL para operações básicas de cadastro de usuários.
- Sobre o Projeto
- Tecnologias Utilizadas
- Arquitetura
- Funcionalidades
- Endpoints
- Como Executar o Projeto
- Melhorias Futuras
- Licença
Projeto desenvolvido para praticar a construção de APIs REST utilizando Spring Boot, seguindo a arquitetura em camadas (Controller → Service → Repository → Model) e integração com banco de dados relacional PostgreSQL.
O objetivo principal é consolidar boas práticas no desenvolvimento de APIs RESTful, incluindo separação de responsabilidades, uso do Spring Data JPA e exposição de endpoints padronizados.
| Tecnologia | Versão | Finalidade |
|---|---|---|
| Java | 21 | Linguagem principal |
| Spring Boot | 3.x | Framework base da aplicação |
| Spring Data JPA | — | Abstração do acesso ao banco de dados |
| PostgreSQL | 15+ | Banco de dados relacional |
| Maven | 3.x | Gerenciamento de dependências e build |
O projeto segue a arquitetura em camadas, garantindo separação clara de responsabilidades:
src/main/java/
└── com.example.crudapi/
├── controller/ → Exposição dos endpoints REST
├── service/ → Regras de negócio da aplicação
├── repository/ → Comunicação com o banco de dados (Spring Data JPA)
└── model/ → Entidades e mapeamento relacional (JPA/Hibernate)
Cliente HTTP
│
▼
Controller ← recebe e valida a requisição HTTP
│
▼
Service ← processa regras de negócio
│
▼
Repository ← executa operações no banco de dados
│
▼
PostgreSQL ← persistência dos dados
- Cadastro de usuários
- Listagem de todos os usuários
- Atualização de dados de um usuário existente
- Remoção de usuários por ID
Base URL: http://localhost:8080
| Método | Endpoint | Descrição | Status HTTP |
|---|---|---|---|
GET |
/usuarios |
Lista todos os usuários | 200 OK |
POST |
/usuarios |
Cria um novo usuário | 201 Created |
PUT |
/usuarios/{id} |
Atualiza um usuário existente | 200 OK |
DELETE |
/usuarios/{id} |
Remove um usuário por ID | 204 No Content |
Request Body:
{
"nome": "Fulano de Tal",
"email": "fulano@email.com"
}Response 201 Created:
{
"id": 1,
"nome": "Fulano de Tal",
"email": "fulano@email.com"
}Response 200 OK:
[
{
"id": 1,
"nome": "Fulano de Tal",
"email": "fulano@email.com"
},
{
"id": 2,
"nome": "Ciclana Silva",
"email": "ciclana@email.com"
}
]Request Body:
{
"nome": "Fulano Atualizado",
"email": "fulano.novo@email.com"
}Response 200 OK:
{
"id": 1,
"nome": "Fulano Atualizado",
"email": "fulano.novo@email.com"
}Response: 204 No Content
Certifique-se de ter instalado em sua máquina:
- Java 21
- PostgreSQL 15+
- Maven 3.x (ou utilize o wrapper
./mvnwincluso no projeto) - Git
git clone https://github.com/claudiodeveloper-github/crudapi-springboot.git
cd crudapi-springbootCrie o banco de dados no PostgreSQL:
CREATE DATABASE crud_db;Edite o arquivo src/main/resources/application.properties com suas credenciais:
# Datasource
spring.datasource.url=jdbc:postgresql://localhost:5432/crud_db
spring.datasource.username=seu_usuario
spring.datasource.password=sua_senha
# JPA / Hibernate
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
⚠️ Atenção: Nunca suba credenciais reais para o repositório. Utilize variáveis de ambiente em produção.
Com o Maven Wrapper (recomendado):
./mvnw spring-boot:runOu com Maven instalado globalmente:
mvn spring-boot:runA aplicação estará disponível em: http://localhost:8080
Você pode testar a API com ferramentas como:
# Listar usuários
curl -X GET http://localhost:8080/usuarios
# Criar usuário
curl -X POST http://localhost:8080/usuarios \
-H "Content-Type: application/json" \
-d '{"nome": "Fulano de Tal", "email": "fulano@email.com"}'- Validação de dados com
Bean Validation(@NotBlank,@Email, etc.) - Tratamento global de exceções com
@ControllerAdvice - Documentação automática com Swagger / OpenAPI
- Testes unitários e de integração com JUnit 5 e Mockito
- Containerização com Docker e Docker Compose
- Paginação e ordenação nos endpoints de listagem
- Autenticação e autorização com Spring Security + JWT
Este projeto está sob a licença MIT. Consulte o arquivo LICENSE para mais detalhes.