CleilsonAndrade /
spring-product-api
Spring Product API é uma API simples de um CRUD de produtos, desenvolvida com o framework Spring e JPA persistindo os dados em um banco de dados MySQL.
Loading repository data…
claudiodeveloper-github / repository
API CRUD desenvolvida com Spring Boot e PostgreSQL para operações básicas de cadastro.
API RESTful completa para o gerenciamento de um catálogo de produtos, construída com Java 21 e Spring Boot 4. Implementa todas as operações de CRUD via endpoints HTTP padronizados, com persistência em PostgreSQL, credenciais protegidas por variáveis de ambiente e documentação interativa via Swagger UI. Projeto estruturado em arquitetura em camadas, demonstrando separação clara de responsabilidades e boas práticas de engenharia de software.
| Tecnologia | Versão | Finalidade no Projeto |
|---|---|---|
| Java | 21 (Oracle OpenJDK) | Linguagem principal da aplicação |
| Spring Boot | 4.0.6 | Framework base: IoC, auto-configuração, servidor embutido |
| Spring Data JPA | (gerenciado pelo BOM) | Abstração do acesso a dados via repositórios |
| Hibernate | 7.2.12.Final | Implementação JPA; geração e execução de SQL |
| PostgreSQL | 18.3 | Banco de dados relacional para persistência |
| springdoc-openapi | 2.8.9 | Geração automática da documentação OpenAPI 3.1 + Swagger UI |
| Maven | 3.x | Gerenciamento de dependências e ciclo de build |
A documentação interativa é gerada automaticamente pelo springdoc-openapi e fica disponível após iniciar a aplicação:
| Interface | URL |
|---|---|
| Swagger UI | http://localhost:8080/swagger-ui/index.html |
| OpenAPI JSON | http://localhost:8080/v3/api-docs |
Pelo Swagger UI é possível visualizar todos os endpoints, seus parâmetros, schemas de request/response e executar chamadas diretamente no browser — sem precisar de Postman ou curl.
src/
└── main/
├── java/
│ └── com/claudio/crudapi/
│ ├── config/
│ │ └── OpenApiConfig.java ← Configuração do título e metadados da API
│ ├── controller/
│ │ └── ProdutoController.java ← Recebe requisições HTTP
│ ├── service/
│ │ └── ProdutoService.java ← Regras de negócio
│ ├── repository/
│ │ └── ProdutoRepository.java ← Acesso ao banco (Spring Data JPA)
│ └── model/
│ └── Produto.java ← Entidade JPA (id, nome, preco)
└── resources/
└── application.properties ← Configuração com ${DB_PASSWORD}
[Cliente HTTP / curl / Postman / Swagger UI]
│
▼ HTTP Request
[ ProdutoController ] ← Camada de entrada; mapeia rotas e serializa JSON
│
▼ Chama método de negócio
[ ProdutoService ] ← Valida regras; orquestra operações
│
▼ Consulta / Persiste
[ ProdutoRepository ] ← Interface JPA; gera SQL automaticamente
│
▼ JDBC / SQL
[ PostgreSQL ] ← Banco relacional; tabela 'produto'
│
▲ Resultado
(resposta percorre o caminho inverso até o cliente)
| Método | Endpoint | Descrição da Ação | Status HTTP de Sucesso |
|---|---|---|---|
GET | /produtos | Lista todos os produtos cadastrados | 200 OK |
GET | /produtos/{id} | Retorna um produto específico pelo ID | 200 OK |
POST | /produtos | Cadastra um novo produto | 201 Created |
PUT | /produtos/{id} | Atualiza os dados de um produto | 200 OK |
DELETE | /produtos/{id} | Remove um produto pelo ID | 204 No Content |
POST /produtos — Cadastrar produtoRequest Body:
{
"nome": "Monitor LG UltraWide 29\"",
"preco": 1499.90
}
Response Body 201 Created:
{
"id": 1,
"nome": "Monitor LG UltraWide 29\"",
"preco": 1499.90
}
PUT /produtos/{id} — Atualizar produtoRequest Body:
{
"nome": "Monitor LG UltraWide 29\" (Refurbished)",
"preco": 1199.90
}
Response Body 200 OK:
{
"id": 1,
"nome": "Monitor LG UltraWide 29\" (Refurbished)",
"preco": 1199.90
}
GET /produtos — Listar todos os produtosResponse Body 200 OK:
[
{
"id": 1,
"nome": "Monitor LG UltraWide 29\" (Refurbished)",
"preco": 1199.90
},
{
"id": 2,
"nome": "Teclado Mecânico Keychron K2",
"preco": 459.00
},
{
"id": 3,
"nome": "SSD Kingston NV3 1TB M.2",
"preco": 329.90
}
]
PATH5432git clone https://github.com/claudiodeveloper-github/crudapi-springboot.git
cd crudapi-springboot
Conecte-se ao PostgreSQL (via psql, DBeaver ou pgAdmin) e execute:
CREATE DATABASE crudapi;
O Hibernate irá criar a tabela
produtoautomaticamente ao iniciar a aplicação (DDL auto).
DB_PASSWORDO arquivo application.properties não armazena a senha em texto puro. Ele lê a credencial via ${DB_PASSWORD}.
No IntelliJ IDEA:
Clique em "Edit Configurations..." (ao lado do botão ▶ Run).
Selecione a configuração da sua aplicação Spring Boot.
Localize o campo "Environment variables" e clique no ícone 📋.
Adicione a entrada: DB_PASSWORD=sua_senha_do_postgres
Clique em OK → Apply → OK e execute com ▶ Run.
No terminal (PowerShell):
$env:DB_PASSWORD="sua_senha_do_postgres"
./mvnw spring-boot:run
No terminal (Linux / macOS):
export DB_PASSWORD=sua_senha_do_postgres
./mvnw spring-boot:run
Sem essa configuração, o Spring Boot lançará
PSQLException: FATAL: password authentication failed.
Linux / macOS:
chmod +x mvnw
./mvnw spring-boot:run
Windows:
mvnw.cmd spring-boot:run
A API estará disponível em: http://localhost:8080
A documentação Swagger estará disponível em: http://localhost:8080/swagger-ui/index.html
curlcurl -X GET http://localhost:8080/produtos
curl -X GET http://localhost:8080/produtos/1
curl -X POST http://localhost:8080/produtos \
-H "Content-Type: application/json" \
-d "{\"nome\": \"Headset HyperX Cloud II\", \"preco\": 399.90}"
Windows (Prompt de Comando):
curl -X POST http://localhost:8080/produtos -H "Content-Type: application/json" -d "{\"nome\": \"Headset HyperX Cloud II\", \"preco\": 399.90}"
curl -X PUT http://localhost:8080/produtos/1 \
-H "Content-Type: application/json" \
-d "{\"nome\": \"Headset HyperX Cloud II Wireless\", \"preco\": 549.90}"
curl -X DELETE http://localhost:8080/produtos/1
Resposta esperada:
204 No Content(sem body).
O application.properties utiliza interpolação de variável de ambiente para a senha do banco:
spring.datasource.password=${DB_PASSWORD}
Isso garante que nenhuma credencial é exposta no código-fonte ou no histórico do Git. A senha existe apenas em tempo de execução, via configuração local da IDE ou variáveis do sistema operacional.
Cláudio G. S. Castro Java Backend Developer em Formação
Desenvolvedor Backend em formação com foco em Java e Spring Boot. Construindo APIs robustas com boas práticas, aprendendo continuamente e enfrentando desafios reais.
Este projeto está licenciado sob a licença MIT — veja o arquivo LICENSE para mais detalhes.
Feito com ☕ Java e muito aprendizado por Cláudio G. S. Castro
⭐ Se este projeto te ajudou ou te inspirou, deixa uma estrela no repositório!
Selected from shared topics, language and repository description—not editorial ratings.
CleilsonAndrade /
Spring Product API é uma API simples de um CRUD de produtos, desenvolvida com o framework Spring e JPA persistindo os dados em um banco de dados MySQL.
vinnytherobot /
Esta é uma aplicação de exemplo de uma API REST desenvolvida em Java utilizando Spring Boot. O objetivo é demonstrar operações básicas de CRUD (Create, Read, Update, Delete) para usuários em memória.
maiconalmeida00 /
API RESTful desenvolvida em Java com Spring Boot e MongoDB, como parte do curso Java COMPLETO – Programação Orientada a Objetos + Projetos, do professor Nélio Alves. O projeto implementa operações CRUD completas, relacionamentos entre documentos, DTOs, tratamento global de exceções e consultas personalizadas com @Query.
gustavocabanhas /
API RESTful desenvolvida em Java e Spring Boot para gestão financeira. Inclui funcionalidades de CRUD completo de transações e cálculo consolidado de balanço (receitas, despesas e saldo) utilizando Java Streams.
aasjunior /
A Sofia API é uma API RESTful desenvolvida com Spring Boot e Java. Ela foi projetada para ser utilizada pelo Sofia Mobile para realização do CRUD com MongoDB.
rodsmade /
Minha primeira API RESTful do app fictício gFood com operações básicas de CRUD, testes unitários e documentação Swagger, desenvolvida durante o curso de programação web full stack em Java do programa Generation Brasil.