API REST desenvolvida em Java com Spring Boot, projetada para simular um backend de produção, aplicando boas práticas de arquitetura, segurança, testes automatizados, observabilidade e CI/CD.
O projeto tem como objetivo consolidar conhecimentos em desenvolvimento backend moderno, indo além de CRUDs simples, com foco em qualidade de código, manutenibilidade e confiabilidade.
A Library API permite gerenciar livros, autores, categorias, usuários e empréstimos, fornecendo endpoints REST seguros, documentados e testados. O projeto segue uma arquitetura em camadas bem definida e utiliza tecnologias amplamente adotadas no ecossistema Java.
- Java 25
- Spring Boot
- Spring Web (API REST)
- Spring Data JPA (persistência)
- Spring Security (JWT)
- Spring Cache (Redis)
- Hibernate (Mapeamento objeto-relacional)
- Lombok (Reduzir boilerplate)
- PostgreSQL (Banco relacional)
- Flyway (Versionamento de schema)
- H2 (Banco de testes)
- Jackson (Serialização e desserialização JSON)
- DTOs (Isolamento do modelo de domínio)
- MapStruct (Mapeamento automático)
- Bean Validation (Jakarta Validation) (Validação declarativa de entrada)
- Redis (Cache distribuído)
- Actuator + Micrometer + Prometheus + Grafana (Observabilidade)
- Testcontainers (Testes de integração)
- JUnit 5 & Mockito (Testes automatizados)
- JaCoCo (Cobertura de código com threshold mínimo)
- Docker & Docker Compose (Ambiente local)
- Swagger / OpenAPI (Documentação)
- Logging estruturado (Verificar fluxo)
- GitHub Actions (CI/CD)
- Autenticação e autorização com JWT
- Cache distribuído com Redis usando Spring Cache
- Versionamento de banco de dados com Flyway
- Tratamento global de exceções com
@ControllerAdviceeProblemDetail - Logs estruturados para rastreabilidade
- Métricas de aplicação expostas via Actuator
- Monitoramento com Prometheus e dashboards no Grafana
- Testes unitários e de integração com banco real via Testcontainers
- Pipeline CI/CD com verificação automática de cobertura mínima de testes
O projeto possui uma estratégia de testes dividida em:
- Testes unitários: validação de regras de negócio e serviços
- Testes de repositório: usando
@DataJpaTest - Testes de integração: com PostgreSQL real via Testcontainers
A cobertura de código é monitorada com JaCoCo, com threshold mínimo configurado.
O pipeline falha automaticamente caso a cobertura fique abaixo do valor definido.
O cache é aplicado na camada de serviço utilizando @Cacheable, garantindo:
- Separação entre lógica de negócio e camada HTTP
- Reutilização do cache por diferentes fluxos
- Melhor desempenho em consultas frequentes
Durante testes automatizados, o comportamento de cache é isolado para garantir previsibilidade e confiabilidade dos testes.
A aplicação expõe métricas através do Spring Actuator e Micrometer, permitindo:
- Monitoramento de performance
- Contagem de eventos de negócio
- Integração com Prometheus
- Visualização via Grafana
Exemplo de métrica customizada:
- Quantidade de livros criados
POST /auth/login
GET /categoriesGET /categories/{id}POST /categories
GET /booksGET /books/{id}POST /books
GET /authorsGET /authors/{id}POST /authors
(Demais rotas podem ser consultadas via Swagger)
A documentação interativa está disponível via Swagger:
http://localhost:8080/swagger-ui.html
test: utilizado para testes automatizados- Cache desabilitado
- Flyway desabilitado
- Banco em memória
No perfil test, o projeto utiliza um seed de dados para facilitar:
- Testes manuais via Postman
- Simulação de cenários reais
- Validação de regras de negócio
git clone https://github.com/erichiroshi/library-api.git
cd library-apidocker-compose up -dServiços disponíveis:
- PostgreSQL - localhost:5432
- Redis - localhost:6379
- pgAdmin - http://localhost:5050/
- Prometheus - http://localhost:9090/
- Grafana - http://localhost:3000/ (login admin/admin)
Rodar pela ide
- API:
http://localhost:8080
./gradlew clean build
./gradlew bootRun./gradlew test
./gradlew integrationTest-
Actuator:
http://localhost:8080/actuator -
Métricas Prometheus:
http://localhost:8080/actuator/prometheus -
Grafana: dashboards configurados para visualização de métricas
O projeto conta com pipeline automatizado para:
- Build
- Execução de testes
- Validação de qualidade
- Separação clara de camadas (Controller, Service, Repository)
- DTOs para evitar exposição de entidades
- Cache aplicado no nível de Service
- Profiles para isolar infraestrutura em testes
- Testes previsíveis e reproduzíveis
- Logs claros e padronizados
- Rate limiting
- Versionamento de API
- Auditoria (createdAt, updatedAt, createdBy)
- OpenTelemetry (tracing distribuído)
- Deploy em cloud
Contribuições são sempre bem-vindas!
Para contribuir:
- Crie um fork do repositório.
- Crie uma branch de feature:
git checkout -b feature/nova-funcionalidade
- Commit suas mudanças:
git commit -m "feat: nova funcionalidade" - Envie um Pull Request.
Boas práticas
- Adicione testes unitários.
- Documente suas alterações no código.
- Use mensagens de commit seguindo o padrão Conventional Commits.
Este projeto foi desenvolvido com foco em aprendizado profundo de backend Java moderno, simulando desafios reais encontrados em ambientes profissionais.
- Desenvolvido por Eric Hiroshi
- LinkedIn: Eric Hiroshi
- Licença: MIT
A versão em PDF da documentação técnica é gerada automaticamente via GitHub Actions e está disponível na aba Releases do projeto.
“Código limpo é aquele que expressa a intenção com simplicidade e precisão.”