Uma System API desenvolvida em MuleSoft para gerenciamento de produtos com operações CRUD completas.
- Visão Geral
- Funcionalidades
- Pré-requisitos
- Configuração do Banco de Dados
- Configuração da Aplicação
- Execução
- Endpoints da API
- Exemplos de Uso
- Estrutura do Projeto
- Tratamento de Erros
Esta System API oferece uma interface RESTful para gerenciar um catálogo de produtos, incluindo operações para criar, listar, atualizar, deletar e buscar produtos. A API foi desenvolvida seguindo as melhores práticas do MuleSoft e utiliza MySQL como banco de dados.
- ✅ CRUD Completo: Create, Read, Update, Delete de produtos
- ✅ Busca Avançada: Busca por nome, descrição ou SKU
- ✅ Filtros: Filtrar produtos por categoria e faixa de preço
- ✅ Validação de Dados: Validação completa de entrada
- ✅ Tratamento de Erros: Error handling robusto
- ✅ Health Check: Endpoint para verificação da saúde da API
- ✅ Console APIKit: Interface web para teste da API
- ✅ Documentação RAML: Especificação completa da API
- Anypoint Studio 7.x ou superior
- Mule Runtime 4.x ou superior
- MySQL 8.0 ou superior
- Java 8 ou superior
- Maven 3.x ou superior
Execute o script SQL localizado em database/products-schema.sql:
-- Conecte-se ao MySQL e execute:
source /path/to/products-sys-api/database/products-schema.sql;-- Criar usuário específico para a aplicação
CREATE USER 'products_user'@'localhost' IDENTIFIED BY 'products_pass';
GRANT ALL PRIVILEGES ON products_db.* TO 'products_user'@'localhost';
FLUSH PRIVILEGES;Edite o arquivo src/main/resources/properties.yaml:
# HTTP Configuration
http.host=0.0.0.0
http.port=8081
# Database Configuration
db.host=localhost
db.port=3306
db.database=products_db
db.username=root # ou 'products_user'
db.password=your_password # substitua pela sua senha
db.maxPoolSize=10
db.minPoolSize=1
db.acquireIncrement=1
# API Configuration
api.version=v1.0
api.name=Products System API
# Logging
logging.level=INFOcd products-sys-api
mvn clean install- Importe o projeto no Anypoint Studio
- Configure as propriedades do banco
- Execute a aplicação (Right-click → Run As → Mule Application)
mvn clean package
java -jar target/products-sys-api-1.0.0-SNAPSHOT-mule-application.jarmvn mule:runA aplicação estará disponível em: http://localhost:8081
http://localhost:8081/api/v1
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /products |
Lista todos os produtos |
| GET | /products/{id} |
Busca produto por ID |
| POST | /products |
Cria novo produto |
| PUT | /products/{id} |
Atualiza produto existente |
| DELETE | /products/{id} |
Remove produto |
| GET | /products/search?q={termo} |
Busca produtos |
| GET | /health |
Health check da API |
| Parâmetro | Tipo | Descrição | Exemplo |
|---|---|---|---|
category |
string | Filtrar por categoria | ?category=Eletrônicos |
minPrice |
number | Preço mínimo | ?minPrice=100.00 |
maxPrice |
number | Preço máximo | ?maxPrice=1000.00 |
curl -X GET "http://localhost:8081/api/v1/products" \
-H "Accept: application/json"curl -X GET "http://localhost:8081/api/v1/products/1" \
-H "Accept: application/json"curl -X POST "http://localhost:8081/api/v1/products" \
-H "Content-Type: application/json" \
-d '{
"name": "Smartphone Samsung Galaxy",
"description": "Smartphone Android 256GB",
"category": "Celulares",
"price": 2499.90,
"stock": 35,
"sku": "SM-GAL-256"
}'curl -X PUT "http://localhost:8081/api/v1/products/1" \
-H "Content-Type: application/json" \
-d '{
"price": 5999.90,
"stock": 12
}'curl -X DELETE "http://localhost:8081/api/v1/products/1"curl -X GET "http://localhost:8081/api/v1/products/search?q=Dell" \
-H "Accept: application/json"curl -X GET "http://localhost:8081/api/v1/products?category=Eletrônicos&minPrice=1000&maxPrice=6000" \
-H "Accept: application/json"products-sys-api/
├── pom.xml # Configuração Maven
├── mule-artifact.json # Configuração do artefato Mule
├── database/
│ └── products-schema.sql # Script do banco de dados
├── src/
│ ├── main/
│ │ ├── mule/
│ │ │ └── products-sys-api.xml # Flows principais
│ │ └── resources/
│ │ ├── properties.yaml # Configurações da aplicação
│ │ ├── log4j2.xml # Configuração de logs
│ │ └── api/
│ │ └── products-sys-api.raml # Especificação RAML
│ └── test/
│ ├── java/ # Testes Java
│ ├── munit/ # Testes MUnit
│ └── resources/
│ └── log4j2-test.xml # Configuração de logs para teste
└── README.md # Este arquivo
| Código | Descrição | Exemplo |
|---|---|---|
| 200 | Sucesso | Produto atualizado |
| 201 | Criado | Produto criado com sucesso |
| 204 | Sem conteúdo | Produto deletado |
| 400 | Requisição inválida | Dados obrigatórios ausentes |
| 404 | Não encontrado | Produto não existe |
| 409 | Conflito | SKU já existe |
| 500 | Erro interno | Erro de conexão com BD |
{
"error": "VALIDATION_ERROR",
"message": "Nome do produto é obrigatório",
"timestamp": "2026-02-23T10:30:00Z"
}Acesse o console APIKit para testar a API:
http://localhost:8081/console
Verifique a saúde da aplicação:
curl -X GET "http://localhost:8081/api/v1/health"Resposta esperada:
{
"status": "UP",
"timestamp": "2026-02-23T10:30:00Z",
"version": "v1.0",
"name": "Products System API"
}- Implementar paginação nos endpoints de listagem
- Adicionar autenticação e autorização
- Implementar cache Redis
- Adicionar métricas e monitoring
- Criar testes unitários MUnit
- Implementar versionamento da API
- Adicionar rate limiting
- Faça um fork do projeto
- Crie uma branch para sua feature (
git checkout -b feature/nova-feature) - Commit suas mudanças (
git commit -am 'Adiciona nova feature') - Push para a branch (
git push origin feature/nova-feature) - Abra um Pull Request
Este projeto está licenciado sob a MIT License - veja o arquivo LICENSE para detalhes.
Desenvolvido com ❤️ usando MuleSoft