Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

2
respostas

[Projeto] [DESAFIO] Evolução do desafio

Olá!

Evolui o projeto do desafio e transformei a aplicação em uma API REST. Para isso criei endpoints para realizar as buscas no banco de dados, criei a camada Exceptions para tratar os erros e a classe CorsConfiguration para tratar possíveis situações em que possivelmente haja a necessidade de acessar a API através de domínios diferentes.

Link do repositório: https://github.com/TheV1k/my-music

2 respostas

Olá, Victor. Como vai?

Parabéns pela excelente iniciativa! Transformar uma aplicação de terminal ou console em uma API REST é um passo gigantesco no aprendizado de Java e do ecossistema Spring. Você elevou o nível do desafio aplicando conceitos de mercado extremamente relevantes, como o tratamento global de exceções e a segurança com CORS.

A organização das camadas que você descreveu (Controller para os endpoints, Repository com Spring Data JPA, Exception handler e a configuração de CORS) reflete exatamente a arquitetura de microserviços e APIs robustas utilizadas no dia a dia das empresas.

Analisando a descrição da sua evolução e pensando em boas práticas de APIs REST com Spring Boot, quero compartilhar algumas sugestões para deixar o seu repositório ainda mais profissional:

1. Padrão de Retorno com DTOs (Data Transfer Objects)

Ao expor os dados do banco através de endpoints, uma boa prática é evitar retornar as suas entidades do JPA (@Entity) diretamente nas requisições.

  • O uso de DTOs (usando record no Java moderno) permite que você filtre quais campos deseja expor para o cliente (escondendo IDs sequenciais ou dados sensíveis) e evita problemas de recursão infinita causados por relacionamentos do banco (como @ManyToOne ou @OneToMany).

2. Uso correto dos Verbos HTTP e Status Codes

Certifique-se de que seus endpoints utilizam a semântica correta do protocolo HTTP. Por exemplo:

  • POST /artistas para criação, retornando o status 201 Created.
  • GET /artistas para listagem, retornando 200 OK.
  • GET /artistas/{id} retornando 404 Not Found caso o artista não exista (usando a sua camada de tratamento de exceções para capturar o ObjectNotFoundException ou similar).

3. Documentação com Swagger / Springdoc OpenAPI

Como você já criou uma API funcional, adicionar a dependência do springdoc-openapi-ui no seu pom.xml vai gerar automaticamente uma interface gráfica para testar seus endpoints através do navegador (o Swagger UI). Isso valoriza absurdamente o seu projeto no GitHub, pois qualquer recrutador ou desenvolvedor consegue testar a sua API visualmente.

Vou acessar o seu repositório para conferir os códigos de perto. Continue com esse perfil proativo de ir além dos requisitos propostos nos cursos, isso faz toda a diferença na evolução de um desenvolvedor backend!

Espero que possa ter lhe ajudado!

Olá, Evandro!

Como vai?

Mais uma vez, agradeço pelas dicas, estou utilizando records DTO através das classes ResumoArtistaDTO, ResumoAlbumDTO e ResumoMusicaDTO para filtrar os campos apresentados nas consultas.

Nos testes que eu realizei, a semântica do HTTP retorna corretamente indicando o status correto de cada requisição.

Adicionei a dependência springdoc-openapi-ui , conforme orientado para melhorar a visualição dos endpoints na hora de testar.

Novamente agradeço pelas dicas, têm sido excelentes para o meu aprendizado e evolução como desevolvedor.