O restQL, uma linguagem de consulta para microservices, está disponível como um projeto open-source sob a licença MIT. O objetivo da restQL é simplificar cenários comuns para o acesso do lado do cliente a microservices RESTful, incluindo múltiplas chamadas paralelas e chamadas em cadeia. Desenvolvido pela B2W, a maior empresa de comércio eletrônico em operação da América Latina, a restQL foi criada para evitar algumas limitações das estruturas de dados e frameworks de gerenciamento mais conhecidos, Falcor e GraphQL.
Enquanto o Falcor está disponível apenas para clientes JavaScript, a restQL está disponível para qualquer cliente que suporte chamadas REST via HTTP. Isso permite seu uso em aplicativos móveis escritos em Swift e Java. Embora a GraphQL já seja uma linguagem madura para consulta de dados, ela não oferece alguns dos recursos simples ou bem estabelecidos disponíveis para serviços RESTful, como códigos de resposta HTTP ou cache de navegador nativo.
Da mesma forma que outras linguagens de consulta, as instruções restQL descrevem os recursos a serem recuperados filtrados por parâmetros. Por exemplo:
from hero
with
name = "Restman"
Por padrão, as consultas são executadas em paralelo, sem qualquer sintaxe especial. Cenários comuns, porém mais complexos, como chamadas em cadeia ou multiplexadas (exemplo abaixo) também são bem diretos.
from hero
with
name = "Restman"
from sidekick
with
hero = hero.id
O servidor restQL, implementado em Clojure, é responsável por tratar parses e respostas atuando como uma ponte entre os clientes que enviam consultas restQL e as APIs em backend. Somente as informações de configuração são armazenadas no servidor para emparelhar nomes de recursos com a chamada dos endpoints correspondentes. Como o servidor restQL utiliza um endpoint REST padrão, não há necessidade de um cliente especializado.
Em uma publicação no blog onde anuncia o restQL, Ricardo Mayerhofer, Gerente de TI da B2W Digital e um dos autores do restQL, disse que o projeto nasceu durante a migração de microservices da empresa. As equipes de desenvolvimento se beneficiaram rapidamente de um movimento para microservices, com aplicações menores para suportar e uma manutenção correspondente mais fácil. No entanto, o código de front-end tornou-se mais complexo, tendo que orquestrar chamadas para vários microservices, em vez de uma única e grande chamada para o monólito antigo.
Mayerhofer resumiu sua experiência como: "Uma arquitetura baseada em microservice não é uma bala de prata. Apesar de seus benefícios imediatos para as equipes de serviços, ele representa, pela própria natureza, um desafio em termos de complexidade e desempenho para os consumidores". Depois de considerar o Falcor e o GraphQL, o restQL foi desenvolvido e se mostrou instrumental na simplificação do acesso do cliente à uma variedade de serviços back-end.
Mais informações sobre o restQL podem ser encontradas na página do projeto em http://restql.b2w.io/. O código fonte está disponível no GitHub.
Saiba mais sobre a restQL no artigo restQL: Lidando com a complexidade de consultas a microservices, disponível no site do Infoq Brasil.