GraphQL — como testar utilizando Insomnia
Há pouco tempo tive uma mudança profissional saindo de uma empresa para um novo desafio. Chegando nesta nova empresa, me deparei com uma nova oportunidade, testar aplicações com o GraphQL. Inicialmente foi um susto, pois não conhecia nada sobre esta arquitetura, que aparentemente pareceu complexa, mas ela não é tão diferente da arquitetura REST, pois também utiliza orientação a objetos.
E como funciona esta arquitetura?
O Client GraphQL envia solicitações HTTP com queries, mutations ou subscriptions, e o GraphQL Server processará as solicitações usando Resolvers. O resolver obterá os dados de um banco de dados ou de uma API Rest. O servidor GraphQL retornará o resultado ao Client GraphQL, normalmente em um formato Json.
A arquitetura GraphQL, conhecida também, como a “linguagem de consulta do Facebook”, vem de Graph Query Language (Linguagem de Consulta de Dados em Grafos), desenvolvida pelo Facebook em 2012 para facilitar a entrega de dados para as aplicações. O Facebook procurava uma maneira de carregar seu feed de notícias com melhor desempenho e confiabilidade em dispositivos móveis. Então nasceu o GraphQL, permitindo que você possa fazer consultas de mais ou menos dados, tendo retorno somente do que foi especificado na consulta.
Este artigo tem o intuito de demonstrar como podemos realizar uma consulta GraphQL Básica.
Neste artigo estaremos utilizando o Insomnia, uma API Client simplificada que pode enviar solicitações GraphQL de maneira rápida e fácil. Segue link para download e instalação.
Antes de fazermos a nossa primeira consulta, precisamos saber que:
- Queries são solicitações de dados feitas pelo servidor, assim como o método Get em Rest;
- Mutations são utilizadas para manipular dados (criar, atualizar e excluir), assim como os métodos POST, PUT e DELETE do Rest;
- Subscription são utilizados para recebimento de informação em tempo real, semelhante a biblioteca Socket IO.
Consulta Básica
Neste exemplo iremos fazer uma Query com uma consulta com duas solicitações, uma para os campos ID e nome dos usuários, e outra buscando o CEO da Companhia, logo, no lugar de fazer mais de um endpoint como no Rest, faremos um único endpoint que fará essa consulta solicitando todos os dados. Abaixo utilizaremos o Insomnia para praticar esse exemplo.
Após criar a nova Request informaremos a rota ou o endpoint, que utiliza o protocolo http ou https no envio da nossa requisição. Neste exemplo utilizaremos a API da SpaceX: https://api.spacex.land/graphql/
Na opção Body, selecione a estrutura GraphQL Query.
Automaticamente o método GET, se tornou um método POST, pois é um padrão as requisição GraphQL.
Começaremos a criar o corpo da nossa requisição utilizando um Json, e nele faremos o nosso envio, inicialmente informaremos se queremos uma Query ou Mutation, seguidas do nome que daremos para essa query.
Após isto informaremos as Queries e os atributos que queremos consultar.
Obs.: O Insomnia é sensitive, bastando digitar a primeira letra.
Em seguida clicaremos em SEND.
Então teremos o retorno com sucesso trazendo todos os usuários da primeira solicitação, seguidos do CEO da companhia da segunda solicitação.
Conclusão
GraphQL é uma arquitetura que cada vez mais tem crescido no mercado, como podemos ver neste link, devido a possibilidade de fazer consultas mais complexas. Segue alguns de seus benefícios:
- Não necessário versionamento: Não existe versões de API, é possível “descontinuar” a API a nível de campos, por exemplo, e os clientes ao consultarem receberão uma mensagem de aviso informando que o campo foi descontinuado.
- Declarative Data Fetching: o cliente seleciona em sua consulta o que quer receber em uma única consulta;
- Sem Over-Fetching: o cliente só recebe o que solicitou;
- Redução no custo de transferência de dados.
Este artigo tem o intuito de exemplificar o envio de uma consulta básica para uma API GraphQL utilizando o Insomnia. Mas pode-se fazer consultas com variáveis, por exemplo. Para mais informações consulte os links em referências.
Escrevi este artigo com o incentivo dos meus amigos e colegas de profissão Rodrigo Barreto e Adriano Saádeh.
Agradeço aos revisores Gabriel Santos, Rodrigo Fragoso, Rodrigo Barreto e Adriano Saádeh. Agradecimento especial ao mestre Júlio de Lima por todo o conhecimento compartilhado.