Skip to content

Benevanio/products-sys-api

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Products System API

Uma System API desenvolvida em MuleSoft para gerenciamento de produtos com operações CRUD completas.

📋 Índice

🎯 Visão Geral

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.

⚡ Funcionalidades

  • 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

🛠 Pré-requisitos

  • 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

🗄️ Configuração do Banco de Dados

1. Criar o Banco de Dados

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;

2. Configurar Usuário (Opcional)

-- 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;

⚙️ Configuração da Aplicação

1. Configurar Propriedades

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=INFO

2. Instalar Dependências

cd products-sys-api
mvn clean install

🚀 Execução

Pelo Anypoint Studio

  1. Importe o projeto no Anypoint Studio
  2. Configure as propriedades do banco
  3. Execute a aplicação (Right-click → Run As → Mule Application)

Por Linha de Comando

mvn clean package
java -jar target/products-sys-api-1.0.0-SNAPSHOT-mule-application.jar

Via Maven

mvn mule:run

A aplicação estará disponível em: http://localhost:8081

📚 Endpoints da API

Base URL

http://localhost:8081/api/v1

Endpoints Disponíveis

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âmetros de Query (GET /products)

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

🔧 Exemplos de Uso

1. Listar Todos os Produtos

curl -X GET "http://localhost:8081/api/v1/products" \
  -H "Accept: application/json"

2. Buscar Produto por ID

curl -X GET "http://localhost:8081/api/v1/products/1" \
  -H "Accept: application/json"

3. Criar Novo Produto

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"
  }'

4. Atualizar Produto

curl -X PUT "http://localhost:8081/api/v1/products/1" \
  -H "Content-Type: application/json" \
  -d '{
    "price": 5999.90,
    "stock": 12
  }'

5. Deletar Produto

curl -X DELETE "http://localhost:8081/api/v1/products/1"

6. Buscar Produtos

curl -X GET "http://localhost:8081/api/v1/products/search?q=Dell" \
  -H "Accept: application/json"

7. Filtrar por Categoria e Preço

curl -X GET "http://localhost:8081/api/v1/products?category=Eletrônicos&minPrice=1000&maxPrice=6000" \
  -H "Accept: application/json"

📁 Estrutura do Projeto

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

⚠️ Tratamento de Erros

Códigos de Status HTTP

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

Formato de Resposta de Erro

{
  "error": "VALIDATION_ERROR",
  "message": "Nome do produto é obrigatório",
  "timestamp": "2026-02-23T10:30:00Z"
}

🔍 Console da API

Acesse o console APIKit para testar a API:

http://localhost:8081/console

🏥 Health Check

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"
}

🚀 Próximos Passos

  • 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

🤝 Contribuição

  1. Faça um fork do projeto
  2. Crie uma branch para sua feature (git checkout -b feature/nova-feature)
  3. Commit suas mudanças (git commit -am 'Adiciona nova feature')
  4. Push para a branch (git push origin feature/nova-feature)
  5. Abra um Pull Request

📄 Licença

Este projeto está licenciado sob a MIT License - veja o arquivo LICENSE para detalhes.


Desenvolvido com ❤️ usando MuleSoft

About

Uma System API desenvolvida em MuleSoft para gerenciamento de produtos com operações CRUD completas.

Topics

Resources

Stars

Watchers

Forks

Contributors