An Interest In:
Web News this Week
- March 20, 2024
- March 19, 2024
- March 18, 2024
- March 17, 2024
- March 16, 2024
- March 15, 2024
- March 14, 2024
Some of Our Sources
View All SourcesComo criar micro servios - Nvel fcil
Criar uma API Rest e estruturar micro servios no precisa ser algo difcil. Nesta sequncia de artigos vamos entender desde a concepo de uma infraestrutura baseada em micro servios at o desenvolvimento completo de uma aplicao.
O que vamos ter nessa aplicao?
Veja o diagrama:
Baseado no diagrama vou explicar a motivao por trs de cada item e como vamos trabalhar com ele.
importante tambm que voc entenda o que vamos levar em considerao como regras de negcio.
Sim, regras de negcio. Ser programador no s sobre sair criando cdigos e scripts de automatizao. Voc precisa resolver problemas! Nada melhor que entender como o problema surge para conseguir uma sada para resolv-lo.
Vamos aos itens do diagrama.
CDN (Frontend Statics)
, essencialmente, nosso frontend. Voc pode entend-lo como a aplicao em HTML e CSS, React, ou seja, l qual o framework/lib que voc queira usar (Vamos usar o React).
Containers
Esse grupo de itens corresponde s APIs que vamos criar separadamente, cada qual com suas respectivas responsabilidades.
Transactions API
Essa nossa API de transaes (ou pagamentos e recebimentos).
Essa API vai manter o histrico de transaes de cada usurio e conta de usurio.
Para simplificar, associe a um banco. Como se voc fosse o usurio e tivesse contas nesse banco, algo como uma conta corrente e uma poupana.
Essa API vai conter algo semelhante ao seu extrato.
Vamos s regras de negcio da Transactions API
Regra 1: S podemos cadastrar transaes, no podemos exclu-las.
Isso significa que uma devoluo ou estorno deve ser uma nova transao com o valor reembolsado.
Regra 2: Toda transao deve ser diretamente relacionada a um usurio e a uma conta deste usurio.
Isso significa que uma transao deve ter um usurio e uma conta deste mesmo usurio como origem/destino.
Regra 3: Toda transao deve ter um tipo, como entrada ou sada. Alm de ter o valor, em centavos, da transao, bem como o mtodo de pagamento (Ex.: pix
, dbito
, doc
ou ted
).
Users API
Essa a nossa API de usurios.
Essa API vai manter os dados dos clientes. Aqui teremos e-mail, senha, data de criao e atualizao de conta.
Sero somente esses dados apenas para fins didticos.
Vamos s regras de negcio da Users API
Regra 1: Todo usurio deve fornecer um e-mail e uma senha para cadastro.
Isso significa que ambos campos de identificao do usurio so obrigatrios.
Regra 2: Toda atualizao, adio de transao ou abertura de conta deste usurio deve registrar a data de atualizao do usurio.
Isso significa que nosso campo updated_at
sofrer uma atualizao a cada ao de escrita do usurio.
Accounts API
Essa a API de contas de usurio.
Nela vamos manter o tipo da conta do usurio (se corrente ou poupana), o balano, o nmero e o usurio dono da conta.
Vamos s regras de negcio da Accounts API
Regra 1: Toda conta deve ter um tipo. Imagino algo como conta corrente, conta poupana.
Isso significa que no podemos permitir um usurio criar uma conta sem solicitar que seja, conta-corrente ou conta-poupana.
Regra 2: Toda conta deve ter obrigatoriamente um dono.
Isso nos diz que tambm no podemos permitir a criao de uma conta sem que haja um usurio envolvido.
Regra 3: O balano da conta deve ser recalculado sempre que for recebido um evento de nova transao.
Isso significa que sempre que houver uma nova transao nossa API de contas vai ouvir este evento e recalcular o balano baseado nesta nova transao.
Database
Geralmente, micro servios consomem suas prprias bases de dados. Nesta aplicao vamos utilizar uma nica base de dados separando apenas as tabelas.
Isso no algo incomum em grandes sistemas que esto no processo de migrao de um monlito. uma etapa encontrada durante o processo de estrangulamento do sistema, mas isso assunto para outro momento.
Cada micro servio deve ser independente de qualquer outro. Vamos trazer isso para nosso modelo. Caso nossa API de transaes cair por qualquer motivo, a API de usurios ou de contas devem se manter funcionando de forma independente.
Algo que parcialmente verdade em nosso design atual. Caso o usurio queira saber seu saldo total no possvel se nossa API de contas venha a cair.
Para resolver isso, deveramos clonar o balano das contas do usurio dentro da base de usurios. Isso tornaria nossa aplicao independente e caso a API de contas fique fora do ar, nosso cliente ainda consegue ver seu saldo atual.
Ah! mas isso gera duplicidade de dados, n?! Correto!
Esta outra dvida que acontece quando falamos sobre micro servios independentes. Se voc est no incio de sua startup no sei se voc deveria considerar usar micro servios, quando digo no sei, na verdade, quero dizer no aconselho usar.
Micro servios so caros. Voc deve levar em conta a utilizar micro servios em situaes especficas. Por exemplo, quando seu sistema est to grande a ponto de ser muito custoso (em termos de desenvolvimento, no financeiro) para qualquer implementao nova.
Enfim, este outro tema que d um artigo completo.
Quanto s nossas bases de dados, simplesmente teremos trs tabelas, usurios, transaes e contas. Algo como o seguinte diagrama:
Fila e eventos
Vou te mostrar como trabalhar com fila e eventos no um monstro de sete cabeas.
Fila, como o prprio nome j diz uma fila! (Uau!)
Em essncia, vamos adicionar um evento na fila e esquec-lo l. Outra parte da nossa aplicao vai ficar monitorando a fila, pegando os eventos (tambm conhecidos como mensagens) e processando os dados recebidos.
Para essa fila de eventos (ou mensagens) vamos utilizar RabbitMQ.
Espero que fique calmo, no algo difcil de utilizar. Voc ver que algo extremamente simples.
importante salientar que diferente utilizar de implantar. RabbitMQ algo complexo para se lidar quando se trata de infraestrutura. Porm, como desenvolvedor algo relativamente simples.
Vamos mo na massa na parte II. Espero voc l.
Original Link: https://dev.to/jeanmolossi/como-criar-micro-servicos-nivel-facil-37me
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To