Configurar um serviço básico

Concluído

Como os aplicativos nativos da nuvem não exigem a seleção de uma tecnologia específica para seus componentes individuais, você pode basear seus detalhes de implementação em suas preferências. Além disso, muitas ofertas de nuvem, como o Banco de Dados do Azure para PostgreSQL, permitem que você use as mesmas versões de código aberto de tecnologias com as quais você está familiarizado. Eles também usam a plataforma subjacente para minimizar a sobrecarga administrativa associada ao seu uso.

Você aproveitará esses benefícios ao criar sua solução. Para começar, você implementará um serviço Web baseado em Express.js com rotas de API REST fornecendo acesso ao banco de dados PostgreSQL recém-implantado.

Quais são os benefícios do design modular?

O princípio de modularização do modelo de serviços fornece um alto grau de separação entre serviços individuais. Você pode atualizar, implantar, dimensionar e reiniciar cada serviço de forma independente, sem afetar a disponibilidade ou o desempenho de outros serviços. Por sua vez, isso promove a aplicação de práticas de DevOps aos ciclos de vida de seus aplicativos. O resultado são lançamentos rápidos de novos recursos, facilitados por alterações pequenas, frequentes e incrementais.

O acoplamento flexível de serviços permite que você altere a tecnologia subjacente sem forçar regravações significativas de código de todo o aplicativo. Por exemplo, o serviço de back-end Express.js pode ser conteinerizado e implantado em um cluster Kubernetes, permitindo que ele seja dimensionado dinamicamente com base na demanda. Outra alternativa é implantá-lo como um aplicativo Web do Serviço de Aplicativo do Azure baseado em contêiner ou código, que também oferece suporte ao dimensionamento automático.

Da mesma forma, você pode modificar o serviço de back-end para se conectar a um banco de dados diferente de escolha, potencialmente confiando no mesmo conjunto de bibliotecas. As bibliotecas de mapeadores objeto-relacionais mais comuns disponíveis com o Node.js, como Prisma ou Sequelize, suportam uma variedade de produtos de banco de dados relacional. Estes incluem PostgreSQL, MariaDB e Microsoft SQL Server.

Outro benefício do design modular é a sua extensibilidade. Você tem a opção de adicionar outro componente, como um serviço de gerenciamento acessível com um aplicativo Web Next.js e colocá-lo em contêineres sem alterações significativas no aplicativo existente.

The high-level architecture of the sample basic service.

Como implementar um serviço básico?

Os dois padrões de arquitetura que geralmente servem como base para a criação e otimização de serviços são o DDD (domain-driven design) e o CQRS (Command and Query Responsibility Segregation). Esses padrões também influenciam a maneira como os aplicativos nativos da nuvem são modelados.

DDD é uma abordagem de desenvolvimento de software que se concentra na funcionalidade do aplicativo para definir limites entre serviços. CQRS é comumente combinado com DDD. Seu objetivo é substituir a abordagem tradicional baseada em criar, ler, atualizar e excluir (CRUD), que depende de uma única interface para todas as tarefas de gerenciamento de dados. Em vez disso, o CQRS separa as operações de leitura e atualização para um armazenamento de dados. Isso fornece outra camada de isolamento que se alinha com a premissa por trás do DDD.

Seu objetivo é modificar o serviço Web baseado em Express existente para fornecer acesso a um banco .js de dados PostgreSQL. Express.js é uma estrutura de aplicação web back-end de código aberto para Node.js. Simplifica a criação de aplicações Web e APIs. Node.js é um mecanismo de tempo de execução JavaScript para a criação de aplicativos cliente e servidor. Express.js tem uma arquitetura baseada em módulos que simplifica a implementação de uma ampla gama de tarefas. Estes incluem desenvolvimento web tradicional e acesso a bases de dados como MongoDB e PostgreSQL.

Você pode usar vários métodos para acessar um banco de dados PostgreSQL a partir de aplicativos Express.js. As maneiras mais populares envolvem o uso de bibliotecas de mapeadores objeto-relacionais, que mapeiam construções programáticas no esquema de banco de dados correspondente. Essa abordagem facilita a portabilidade, fornecendo uma camada de abstração entre os objetos de banco de dados reais e sua representação baseada em serviço.

Os métodos implementados pelo aplicativo Express.js são expostos por meio de rotas, que definem como os pontos de extremidade do aplicativo respondem às solicitações do cliente. Ao implementá-los, você deve considerar a aplicação dos princípios do CQRS, embora isso possa não ser aplicável a serviços básicos devido ao aumento da complexidade.