Como conectar diversos serviços em backend e servir via Graphql usando a plataforma Hasura?
No mundo da arquitetura de software distribuída é comum nos depararmos com novos problemas que não existam em estruturas de software centralizadas (os famosos monólitos). Um problema bem comum é a necessidade de conectar um frontend ou um serviço em diversos outros serviços e dependendo da abordagem, temos várias soluções adequadas. Porém, nesse caso vou falar particularmente da abordagem de servir esses serviços por meio de um middleware. E para essa solução, vamos utilizar a plataforma Hasura que é basicamente um Backend as a Service.
O que é um Backend as a Service?
Em resumo é um serviço de Backend que permite entregar funcionalidades sem necessidade de codificar esse serviço.
"Um BaaS pode ser visto como uma ponte conectando o backend e o frontend de uma aplicação. Os BaaS auxiliam os desenvolvedores a acelerar a criação de aplicações web e mobile e simplificam a criação de APIs. Em vez de codificar o backend inteiro, o desenvolvedor usa o BaaS para criar as APIs e conectá-las às aplicações." Referência: https://www.infoq.com/br/news/2016/07/backend-pros-e-contras/
E onde esse tal de Hasura, entra nisso ai?
O Hasura é uma plataforma de GraphQL que permite configurar conexões entre endpoints e diversas outras fontes (endpoints Rest, endpoints Graphql, bancos de dados, webhooks, Event Sourcing).
E como servir meus diversos serviços usando o Hasura?
Antes de mais nada é importante lembrar que o Hasura possui sua própria cloud, mas também oferece a possibilidade de subir a plataforma em outras clouds AWS, Azure, Google Cloud) e também existe a possibilidade de usar a versão open source diretamente na cloud de sua preferência (exemplo na AWS: https://hasura.io/blog/instant-graphql-on-aws-rds-1edfb85b5985/).
Entre os recursos oferecidos pelo Hasura, é possível criar o que ele chama de actions, essas actions são basicamente chamadas para endpoints de outras APIs e com grande customização é possível receber parâmetros, configurar tipos, incluir autenticação e estruturar o objeto de saída dessa action.
Exemplo de actions no Hasura
Exemplo de endpoint usando a action
E como junta tudo isso?
Perceba que no Rest Endpoint do Hasura eu utilizei o action que apresentei acima, mas também inclui outro que já havia criado, então consegui dessa forma criar um único endpoint que internamente resolve consumindo 2 outros serviços (como apresentado no exemplo abaixo):
Então, caso seu projeto apresente requisitos onde Graphql venha a ser uma solução para simplificar o consumo de serviços de backend, considere avaliar o Hasura para minimizar esforço com desenvolvimento de algum middleware.
Conheça: https://hasura.io/