O desenvolvimento de aplicações passa por grandes mudanças hoje em dia, em tempos onde podemos ter um front-end web e uma interface mobile que se conectam exatamente no mesmo ponto, APIs mais seguras e leves. Quando falamos de desenvolvimento moderno, é quase que impossível não citar APIs e Serviços.

A ideia deste artigo é dar uma luz sobre uma arquitetura muito eficiente que venho utilizando recentemente, que é a de serviços com API gateway.

Entendendo o que é uma API

Talvez você ainda não saiba sobre o que se trata uma API, e, às vezes, pode parecer um conceito bem diferente para você.

Resumidamente de API é expor rotinas para que demais pessoas possam desenvolver para, alimentar e receber informações de um determinado serviço.

Quando citado no desenvolvimento web, é, basicamente, um conjunto de rotas que recebem e enviam dados para que o cliente consuma.

Entendendo o que é um serviço

Um serviço é, basicamente, um conjunto de funções necessárias para tratar de determinado assunto específico. Ele deve ser independente e desaclopável.

Um exemplo que gosto de usar quando estou explicando sobre serviços, é uma Assembleia Legislativa:

Numa Assembleia Legislativa você pode realizar diversas tarefas, como ir ao banco, gerir processos, consultar deputados, etc. Se você imaginar que sua aplicação é a Assembleia e as coisas que podem ser feitas lá, são os serviços, fica muito mais fácil de entender.

Quando falo de serviços desaclopados, nessa analogia, é: um banco pode fechar sua agência lá, mas a Assembleia não deixará de funcionar por conta disso. Pode perder alguns consumidores, mas, sua existência e funcionamento dos demais serviços não devem ser afetados por isso.

API Gateway

Uma API Gateway não passa de uma interceptadora entre o serviço e o cliente. Seria, na analogia da Assembleia, a recepcionista que recolhe seus dados de identificação e permite (ou não) a sua entrada.

Você sempre deverá fornecer um documento de autenticação à recepcionista, independente do número de vezes que você entrou lá, pois, se houver uma irregularidade no seu cadastro, ela deverá te impedir de entrar, ou, te redirecionar ao local correto.

Isso aumenta a segurança e evita que todos os serviços tenham que aplicar regras de segurança máxima, visto que, uma vez autenticado, você poderá ter livre acesso aos serviços.

Diagrama de fluxo Gateway API

Vantagens de trabalhar com API Gateway

Existe uma série de vantagens em trabalhar com API Gateway. Segurança, migração, modularização, etc.

Segurança

Conforme dito no parágrafo acima, uma API Gateway tem como vantagem, um único ponto de autenticação e checagem. Mas isso pode ser um problema, e pretendo desembolar nos próximos artigos como aplicar regras de segurança exclusiva dentro da sua Gateway. Mas, por alto, você tem um único ponto de acesso para todos, impedindo contato externo diretamente com seus serviços. Na prática, você pode rodar seus serviços localmente, expondo somente a API Gateway ao público.

Pensando no lado de desenvolvimento, a segurança também e maior no nível de acesso de programadores. Eles deverão ter acesso somente às tabelas ou banco daquele serviço específico. O código fonte também.

Flexibilidade

Existem tarefas que são melhores executadas em Python, outras em R, algumas em Go ou até mesmo (acredite se quiser) em PHP. Cada linguagem tem seu ponto forte, e com, uma Gateway API você pode criar diversos serviços em linguagens diferentes e trafegar informações por meio de HTTP.

Você poderia contratar um programador para desenvolver cada serviço separadamente, e depois aclopá-los na sua aplicação, e todos vão funcionar independentemente.

Migração

É comum alteração de tecnologias em sistemas de LTS, e a migração é muito facilitada com a arquitetura de Serviços, pois você pode migrar um serviço por vez e deixá-los disponíveis.

Modularização

Fica muito mais fácil remover e adicionar serviços na sua aplicação, então você pode vender aplicações Premium com mais facilidade (e mensurar valores com mais facilidade, também).

Versionamentos

Você consegue versionar e voltar a pontos específicos de serviços com facilidade.

Desvantagens

Nem tudo são flores, e é claro que existem desvantagens — estas que são bem toleráveis, se levado em consideração as vantagens.

Recursos do servidor

Como essa não é uma aplicação monilítica, várias instâncias deverão ser levantadas no servidor e isso pode gerar um custo de memória maior. Nada agravante, quase que imperceptível e, dependendo da migração feita (supondo que você saia de webforms para uma SPA consumindo uma gateway) você vai poupar muita memória.

Repositórios e Linguagens

Uma das vantagens poderá acabar virando uma desvantagem, pois, você poderá ter uma aplicação com serviços em Express, Lúmen, Django, Loopback, etc. e isso pode virar uma bagunça total se mal administrado.

Considerações finais

Bom, acho que o que tinha de teórico inicial para passar sobre APIs Gateway e Serviços foi passado.

No próximo artigo, vamos criar uma API Gateway do zero com Node.

Abraço, até mais.