AlgaWorks Insights #02
1.39K subscribers
602 photos
115 videos
544 links
Download Telegram
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.
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.
Cada um tem um foco:

🎯 Angular: Framework completo para front-end de aplicações web, baseado em TypeScript

🎯 Thymeleaf: Template Engine para Java (renderização server-side)

🎯 React: Biblioteca JavaScript para construir UIs (não é um framework)
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.
Singleton: Compartilha uma única instância do bean

Prototype: Nova instância do bean é criada para cada utilização

Request: Cada requisição HTTP tem uma instância criada

Session: Mantém a mesma instância durante toda a sessão do usuário
This media is not supported in your browser
VIEW IN TELEGRAM
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
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!
This media is not supported in your browser
VIEW IN TELEGRAM
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
Aula 4 no ar. Corre lá pra assistir. https://bit.ly/2Zeilwh
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
This media is not supported in your browser
VIEW IN TELEGRAM
👉 Fale comigo pelo WhatsApp sobre o FSAS: https://bit.ly/2F3SDD7
O Thymeleaf possui facilidades de integração com o Spring Security.

(1) O sec:authorize determina se o conteúdo será ou não renderizado para o usuário, já o sec:authentication imprime informações do usuário.

(2) Podemos renderizar um conteúdo apenas se o usuário tiver uma permissão específica.
Meu Deus! Nem aprendi Angular 2, e já saiu Angular 8?

Se você é um desses, não precisa ficar assustado!

É só um novo método de mudar versões, chamado Semantic Versioning.

As atualizações devem ser tranquilas. Não compare com a evolução de AngularJS para Angular.
This media is not supported in your browser
VIEW IN TELEGRAM
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