Versionar uma REST API é um mal necessário.
Devemos evitar ao máximo, mas quando a hora chegar, você vai precisar implementar isso de alguma maneira.
As duas principais formas de permitir que os clientes escolham a versão que quer consumir é por URI e Media Type.
Qual forma você prefere? É bom já planejar isso desde o início.
Devemos evitar ao máximo, mas quando a hora chegar, você vai precisar implementar isso de alguma maneira.
As duas principais formas de permitir que os clientes escolham a versão que quer consumir é por URI e Media Type.
Qual forma você prefere? É bom já planejar isso desde o início.
Quando você precisar versionar uma REST API, terá que escolher uma forma para trabalhar com o código-fonte de cada versão.
Eu vejo 3 principais formas de fazer isso:
1) Duplicar completamente o projeto ou criar um projeto do zero
Geralmente, você vai fazer dessa forma quando a mudança no projeto é muito grande, de forma que manter duas versões dentro do mesmo projeto mais atrapalharia do que ajudaria.
Você precisará manter rodando dois ou mais projetos em produção em paralelo.
A vantagem é que as implementações para cada versão ficam totalmente isoladas e não existe nenhum risco de alterar uma versão e afetar outra.
A desvantagem é que você pode acabar com muito código duplicado e ter um custo maior de manutenção.
2) Duplicar apenas a camada de controladores
Você duplica todas as classes de controladores e DTOs para cada nova versão (independente se houve ou não mudanças), mas reaproveita as classes de serviços, repositórios, etc.
A vantagem é que as implementações dos controllers de cada versão ficam isoladas dentro do mesmo projeto e o risco de alterar uma versão e afetar outra é bem pequeno, a não ser alterações feitas em classes comuns, como os serviços e repositórios, por exemplo.
A desvantagem é que você pode acabar com muito código da camada de controladores duplicado.
3) Extrair apenas o código específico que mudou em uma nova versão
Neste caso, você mantém um código base dos controladores que atendem todas as versões (v1, v2, etc) e extrai apenas classes alteradas para uma nova classe (exemplo: ClientesV2Controller), que implementa a nova versão.
A vantagem é que você não duplica código (e isso tende a facilitar a manutenção).
A desvantagem é que exigirá um cuidado especial, porque alterações no código base afetam todas as versões.
Eu vejo 3 principais formas de fazer isso:
1) Duplicar completamente o projeto ou criar um projeto do zero
Geralmente, você vai fazer dessa forma quando a mudança no projeto é muito grande, de forma que manter duas versões dentro do mesmo projeto mais atrapalharia do que ajudaria.
Você precisará manter rodando dois ou mais projetos em produção em paralelo.
A vantagem é que as implementações para cada versão ficam totalmente isoladas e não existe nenhum risco de alterar uma versão e afetar outra.
A desvantagem é que você pode acabar com muito código duplicado e ter um custo maior de manutenção.
2) Duplicar apenas a camada de controladores
Você duplica todas as classes de controladores e DTOs para cada nova versão (independente se houve ou não mudanças), mas reaproveita as classes de serviços, repositórios, etc.
A vantagem é que as implementações dos controllers de cada versão ficam isoladas dentro do mesmo projeto e o risco de alterar uma versão e afetar outra é bem pequeno, a não ser alterações feitas em classes comuns, como os serviços e repositórios, por exemplo.
A desvantagem é que você pode acabar com muito código da camada de controladores duplicado.
3) Extrair apenas o código específico que mudou em uma nova versão
Neste caso, você mantém um código base dos controladores que atendem todas as versões (v1, v2, etc) e extrai apenas classes alteradas para uma nova classe (exemplo: ClientesV2Controller), que implementa a nova versão.
A vantagem é que você não duplica código (e isso tende a facilitar a manutenção).
A desvantagem é que exigirá um cuidado especial, porque alterações no código base afetam todas as versões.
This media is not supported in your browser
VIEW IN TELEGRAM
VueJS se comporta bem com Java?
Angular se comporta bem com Java?
React se comporta bem com Java?
Independente da pergunta, a resposta é essa.
Angular se comporta bem com Java?
React se comporta bem com Java?
Independente da pergunta, a resposta é essa.
Bom diaaaaa! Passando aqui só pra avisar que a primeira aula do Workshop do Fullstack Angular e Spring está no ar.
Acesse, assista a aula e deixe um comentário lá pra mim:
https://bit.ly/2wB7CQq
Acesse, assista a aula e deixe um comentário lá pra mim:
https://bit.ly/2wB7CQq
Os Query Methods do Spring Data JPA (SDJ) facilitam na criação de repositórios.
Criamos uma interface, adicionamos assinaturas de métodos, que devem começar com um dos seguintes termos: find, read, query, count ou get.
O SDJ cria a implementação da pesquisa em tempo de execução.
É só isso e já vai funcionar. Parece mágica!
Criamos uma interface, adicionamos assinaturas de métodos, que devem começar com um dos seguintes termos: find, read, query, count ou get.
O SDJ cria a implementação da pesquisa em tempo de execução.
É só isso e já vai funcionar. Parece mágica!
Aula 2 do Workshop do Fullstack Angular e Spring: https://bit.ly/2Ip8zR1
Algaworks
Fullstack Angular e Spring - Lista de Espera
As vagas estão esgotadas para o Fullstack Angular e Spring. Faça seu cadastro de reserva!
Bom diaaaaaa! Passando aqui no Telegram para avisar vocês que eu liberei hoje a aula 3 do workshop. Essa é uma aula prática, mão na massa. Corre lá pra assistir: https://bit.ly/2XBWaQt
Algaworks
Fullstack Angular e Spring - Lista de Espera
As vagas estão esgotadas para o Fullstack Angular e Spring. Faça seu cadastro de reserva!
As inscrições para o curso online completo e avançado Fullstack Angular e Spring estão abertas...
Mas corre, porque as vagas são limitadas!
http://bit.ly/2XAZ0VD
Mas corre, porque as vagas são limitadas!
http://bit.ly/2XAZ0VD
Use de acordo com a semântica:
✅ @Component: Genérico, indica que uma classe é componente do Spring
✅ @Repository: Para a camada de persistência (repositórios)
✅ @Service: Para classes de serviços (regras de negócio)
✅ @Controller: Para controladores web
✅ @Component: Genérico, indica que uma classe é componente do Spring
✅ @Repository: Para a camada de persistência (repositórios)
✅ @Service: Para classes de serviços (regras de negócio)
✅ @Controller: Para controladores web