image

Acesse bootcamps ilimitados e +650 cursos pra sempre

60
%OFF
Otávio Guedes
Otávio Guedes27/08/2025 20:06
Compartir

🤸‍♂️ Minha Jornada Criando uma API RESTful para Academia de ginástica

  • #Java
  • #Spring

🎯 Por que uma API de academia de ginástica?

Sempre gostei de aprender na prática. Para mim, a melhor forma de consolidar conceitos é aplicando-os em um projeto real, enfrentando os desafios e ajustando o rumo conforme surgem obstáculos. Foi assim que nasceu a Academia GYM--API: um projeto que começou como um exercício proposto na Spring Framework Experience e acabou se transformando em um divisor de águas na minha jornada como desenvolvedor Java.

A ideia era relativamente simples: criar uma API que permitisse gerenciar uma academia de ginástica, com funcionalidades como cadastro de alunos, planos de treino, controle de instrutores e acompanhamento da própria academia. No entanto, o que parecia ser apenas mais um desafio técnico rapidamente se tornou uma imersão profunda em boas práticas, arquitetura de software e ferramentas que são essenciais no dia a dia de qualquer desenvolvedor back-end.

📚 O Contexto que Me Motivou

O ponto de partida foi o desafio final da Digital Innovation One (DIO) no curso Spring Framework Experience. O objetivo: construir uma API RESTful para gerenciar os dados de uma academia de ginástica. Esse desafio me chamou atenção porque unia dois pontos importantes: era prático, exigia aplicação de conceitos modernos, e ao mesmo tempo tinha um escopo próximo ao de sistemas reais que encontramos no mercado.

Eu já tinha familiaridade com o Java e tinha acabado de aprender sobre o Spring Boot, mas nunca tinha levado um projeto do zero até um nível mais próximo de produção. Foi exatamente isso que me motivou: a oportunidade de sair do terreno seguro dos exemplos simples e mergulhar em um projeto mais robusto, onde eu precisaria pensar em camadas, regras de negócio e validações.

🛠 As Tecnologias Escolhidas

Para construir a aplicação, optei por uma stack que equilibrasse simplicidade no desenvolvimento e relevância no mercado:

  • Java 17 (LTS): versão estável e moderna da linguagem.
  • Spring Boot 3.2.5: o coração do projeto, oferecendo simplicidade e poder para estruturar a API.
  • Spring Data JPA: abstração prática para persistência em banco de dados.
  • Spring Boot Actuator: monitoramento e métricas em tempo real da aplicação, facilitando observabilidade e manutenção.
  • H2 Database: banco de dados em memória, perfeito para desenvolvimento rápido e testes.
  • Maven: para gerenciar dependências e build.
  • Bean Validation: validações declarativas e poderosas para garantir qualidade dos dados.

A escolha do H2 foi fundamental: ele me permitiu focar no desenvolvimento da lógica da aplicação sem perder tempo configurando bancos de dados externos. Bastava rodar a aplicação e já tinha um console acessível para validar consultas e verificar a persistência. Essa agilidade foi essencial para não me perder em detalhes antes da hora.

⚡ O Problema Principal Enfrentado

Se tem algo que me fez “ralar” neste projeto, foi a modelagem dos relacionamentos entre entidades no JPA. Logo de início, me deparei com três problemas recorrentes:

  1. Referências circulares: quando um Aluno tinha referência a um Treino, que por sua vez se relacionava com um Instrutor, e isso acabava gerando ciclos infinitos na serialização.
  2. Lazy vs. Eager Loading: entender quando buscar dados imediatamente e quando carregar sob demanda foi essencial para não impactar a performance.
  3. Serialização JSON infinita: ao expor entidades diretamente, era comum cair em loops sem fim na hora de transformar em JSON.

A solução veio com uma combinação de estratégias:

  • Utilizar @JsonIgnore em pontos críticos para evitar loops.
  • Configurar relacionamentos com FetchType.LAZY para não carregar mais dados do que o necessário.
  • Criar DTOs em alguns casos para expor apenas o que fazia sentido ao cliente da API.

Esse aprendizado foi crucial: percebi que modelar entidades não é apenas criar classes e relacionamentos, mas sim pensar em como esses dados serão usados e transportados pela aplicação.

🔍 A Descoberta das Validações Bean

Outro ponto que agregou muito valor ao projeto foi a implementação de validações com Bean Validation. Até então, eu costumava verificar regras manualmente dentro dos métodos, o que deixava o código verboso e sujeito a inconsistências. Com o Bean Validation, percebi que é possível centralizar as regras de negócio diretamente no modelo, tornando o código mais limpo e fácil de manter.

Exemplo prático:

@NotBlank(message = "Nome é obrigatório")
@Size(min = 2, max = 100, message = "Nome deve ter entre 2 e 100 caracteres")
private String nome;

@Email(message = "Email deve ser válido")
@NotBlank(message = "Email é obrigatório")
private String email;

Essas anotações garantem que os dados cheguem na aplicação já validados, poupando tempo de debug e prevenindo falhas graves. A API se torna mais robusta, pois impede que informações inválidas sequer cheguem ao banco de dados.

🎯 O Momento "Eureka" - Exception Handler Global

Um dos maiores “pulos de qualidade” foi quando implementei um Exception Handler global. Até então, erros eram tratados de forma pontual em cada endpoint, o que gerava respostas inconsistentes. Com o uso do @ControllerAdvice, consegui padronizar o tratamento de erros em toda a API.

@ControllerAdvice
public class ApiExceptionHandler extends ResponseEntityExceptionHandler {
  
  @ExceptionHandler(BadRequestException.class)
  public ResponseEntity<ErrorResponse> handleBadRequest(BadRequestException ex) {
      ErrorResponse error = new ErrorResponse("BAD_REQUEST", ex.getMessage());
      return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(error);
  }
}

Essa abordagem elevou a API a outro nível: de uma aplicação experimental para uma solução mais próxima de um produto real, com mensagens claras e consistentes para os clientes que a consumirem.

📊 Os Resultados Obtidos

Ao concluir a primeira versão da Academia API, pude observar resultados bem concretos:

  • 5 entidades principais modeladas (Aluno, Instrutor, Plano, Treino e Academia)
  • Mais de 20 endpoints funcionando de forma RESTful
  • Validações robustas aplicadas em todos os campos
  • Tratamento global de exceções
  • Documentação clara no README
  • Logs estruturados do Hibernate para debug
  • Console H2 integrado para consultas e testes rápidos

Essa lista não representa apenas entregas técnicas, mas também habilidades adquiridas e confiança para enfrentar projetos maiores.

🌟 Insights e Aprendizados Principais

1. Arquitetura em Camadas é indispensável

Manter separação clara entre Controllers, Models, Services, Exceptions e Repositories não é exagero: é o que garante organização e testabilidade.

2. Spring Boot realmente entrega produtividade

O conceito de “convenção sobre configuração” fez muito sentido na prática. Com poucas linhas de configuração, já tinha uma aplicação robusta em funcionamento.

3. Validações economizam tempo

Implementar validações desde o início evitou erros silenciosos e dados inconsistentes no banco.

4. Ferramentas simples fazem diferença

O H2, apesar de simples, foi uma das melhores escolhas para acelerar o desenvolvimento.

🔮 Próximos Passos no Meu Aprendizado

A Academia API cumpriu seu papel: foi um projeto de prática que me permitiu explorar conceitos fundamentais do ecossistema Spring Boot. Não tenho planos de evoluí-lo além do que já foi desenvolvido, mas a experiência abriu caminho para novos focos de estudo.

Meus próximos passos no aprendizado serão:

Curto Prazo

  • Me aprofundar em bancos de dados relacionais
  • Estudar JDBC e entender como funciona a comunicação direta com o banco
  • Explorar boas práticas de design e padrões de arquitetura em APIs

Médio e Longo Prazo

  • Entender estratégias de persistência em produção (PostgreSQL, MySQL)
  • Aprender mais sobre otimização de queries e performance em APIs
  • Conhecer mais sobre ferramentas de documentação e testes (Swagger, Postman)
  • Praticar mais sobre segurança em APIs (autenticação e autorização)

💡 Dicas Para Quem Quer Começar

Se você também está começando a explorar o Spring Boot e deseja criar sua primeira API, deixo algumas recomendações práticas:

  1. Comece pequeno: use H2 e Starters para não complicar.
  2. Valide sempre: aplique Bean Validation desde o início.
  3. Trate exceções: um @ControllerAdvice vai salvar seu projeto.
  4. Documente tudo: um bom README facilita sua vida e a de quem for usar seu código.
  5. Não subestime os logs: entender como o Hibernate se comporta é fundamental.

📈 O Impacto no Meu Crescimento

Mais do que entregar uma API, esse projeto trouxe impacto direto no meu crescimento:

  • Confiança: agora me sinto preparado para estruturar APIs do zero.
  • Domínio: aprendi a lidar melhor com o ecossistema Spring.
  • Portfólio: o projeto é uma vitrine real de minhas habilidades.
  • Visão: abriu portas para pensar em soluções mais complexas e escaláveis.

🤝 Como Você Pode Contribuir

A AcademiaGYM -- API está disponível como open source no GitHub!

Você pode:

  • ⭐ Dar um star no repositório
  • 🐛 Reportar bugs ou sugerir melhorias
  • 🔨 Contribuir com código
  • 📖 Ajudar na documentação
  • 💡 Sugerir novas features

Link do projeto: AcademiaGYM-API

🎉 Conclusão e Reflexões Finais

Construir a Academia API foi muito mais do que escrever código. Foi uma jornada de aprendizado prático sobre:

  • Arquitetura limpa e organizada
  • Boas práticas de APIs RESTful
  • Validações e segurança de dados
  • Tratamento de erros estruturado
  • Força do ecossistema Spring Boot

Essa experiência me mostrou que aprender programação vai além de seguir tutoriais: é preciso colocar a mão na massa, enfrentar problemas e buscar soluções. O que parecia só mais um desafio virou um marco no meu portfólio e um reforço de que estou no caminho certo.

Lembre-se: todo expert já foi iniciante. O importante é começar, errar, corrigir e evoluir. 🚀

Compartir
Recomendado para ti
Riachuelo - Primeiros Passos com Java
GFT Start #7 - Java
NTT DATA - Java e IA para Iniciantes
Comentarios (0)