GraphQL com backend Rest pelo Hasura

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.