Trabalhando com GraphQL em Flutter -GraphQLProvider (Parte 1)

Introdução à GraphQL

Igor L Sambo💙🇲🇿
GDG Maputo
5 min readNov 6, 2021

--

Já lá vai algum tempo que o GraphQL está sendo adoptado como uma das linguagens para consultas, como o nome já sugere…
Está, portanto, sendo cada vez mais usado dentro de diversos projectos, equipes, organização e combinado com diversas outras linguagens de programação e framework, não sendo o Flutter uma excepção foi pensado este artigo.

DISCLAIMER: Este artigo não é o sítio ideal para aprender inteiramente sobre o GraphQL, mas procurei trazer bases para que se tenha uma conversa mais a vontade sobre o assunto e poder perceber como o mesmo poderá ser combinado com o Flutter.
Para mais insights recomendo esta série de artigos do Calleb Miquissene

Neste artigo vamos abordar:

  • O que afinal, é o GraphQL?
  • Alguns conceitos relevantes.
  • Porquê o GraphQL?

E o artigo é parte de uma série de dois artigos:

  1. Trabalhando com GraphQL em Flutter — Introdução à GraphQL (este artigo)
  2. Trabalhando com GraphQL em Flutter — GraphQLProvider na prática
https://media.giphy.com/media/3otPoNQVGtDnQvUwHC/giphy.gif

O que afinal, é o GraphQL?

Como o nome sugere, é nada mais nada menos que uma adaptação das linguagens de consultas e super intuitivo pelo nome em inglês, linguagem de consulta gráfica. Mas porquê gráfica? Ora, podendo justificar mais adiante pode se adiantar que torna a actividade de efectuar consultas ao servidor mais intuitiva focando-se em elementos como o tipo de dado a consultar e permitir ao cliente consultar exactamente e explicitamente os dados que realmente necessita.

Em linhas gerais, o GraphQL é uma linguagem de consultas que permite de forma simples e explícita possível efectuar consultas ao servidor e permite ainda múltiplos pedidos combinados. Estes pontos tornam esta tecnologia um tanto que simples como rápida no que diz respeito às consultas em si e ainda o período de desenvolvimento (veja este estudo — REST vs GraphQL: A controlled Experiment).
NOTA: O estudo está em inglês.

É importante notar que o GraphQL não está associado a nenhum serviço de base de dados específico e pode facilmente ser implementado com o código e base de dados que já tenhas disponível e facilmente usado com sua API para comunicação.

Alguns conceitos relevantes…

Bom, sempre que um assunto é abordado, é importante que o mesmo seja acompanhado de contexto, assim para que se junte a conversa esta série deverá iniciar por tirá-lo do escuro quanto a este assunto e deixar alguns conceitos que serão quase sempre abordados ou necessários para fazer as consultas ou configurar o server GraphQL.

  1. Query
    Como uma linguagem de consulta que usa os tipos de dados como parte fulcral de suas operações “query” deve ser dos mais importantes conceitos aqui. Queries são o tipo de dado que representa as consultas ao server para executar uma determinada operação como forma de fazer um pedido e de seguida poderá retornar um outro objecto de acordo com o pedido submetido.
query getContinents{
continents{
name
code
}
}

1.Mutations
O GraphQL é uma alternativa ao REST, e assim como em REST temos o GET para efectuar uma consulta aqui temos as queries e como boa prática em REST não podemos usar o GET para modificar elementos em nossa base de dados, o mesmo não deve ser feito co-relação às queries, sendo então, usado as mutations, que representaria então acções como PUT, POST ou DELETE.

2. Fragments
Como destacado anteriormente, é possível combinar consultas de forma simples, e uma das formas mais práticas de o fazer sem precisar recorrer a várias repetições nos campos é com recurso a fragments. Podemos assumir um exemplo onde pretendemos carregar a lista global de um conjunto de dados e também da mesma coleção filtrar de alguma forma e então os campos a efectuar a consultam são basicamente os mesmos, recorremos ao uso de fragments, obtendo dados dos heróis de ambos universos de forma bastante prática.

3. Campos e Argumentos
Para um consulta é preciso que sejam conhecidos os elementos dos quais precisamos informação, ou seja, campos a preencher e em alguns casos há condições para preencher estes campos, precisando passar argumentos para tal. São estes os cenários a destacar para uso dos campos e argumentos no GraphQL.

4. Aliases
Aliases ou como vou tratar, os AKA’s são elementos presentes em vários momentos no GraphQL e permitem em casos em que precisamos chamar o mesmo campo repetidamente em uma consulta efectuar a mesma com sucesso, pois, caso estes campos nomeados igualmente podem dar conflito, ora vejamos o seguinte cenário, a Marvel e DC têm ambos heróis e caso precisemos listar de ambos universos numa única consulta, ela não é validada pelo nosso servidor.

Mas, porquê GraphQL?

Talvez a melhor pergunta a responder aqui seria… que problema tem o REST que o GraphQL propõe-se a resolver?

Bom, com o REST pra cada detalhes que se pretende consultar a partir de nosso cliente, indo ao exemplo da nossa aplicação era preciso uma de duas coisas, ou um endpoint geral que carregasse o “objecto todo” e fazer o tratamento do lado do cliente ou então diversos endpoints que justifiquem cada detalhe que vamos precisar a posterior em nossa aplicação, isso torna-se de certa forma trabalhoso e nada prático, especialmente à medida que a aplicação torna-se cada vez mais robusta e complexa, eventualmente…

É a partir daí que a equipe do Facebook (relaxa que não tem nenhum negócio de espionagem escondido [espero rsrsrs]) criou esta solução para, primeiro usar em seus projectos e de seguida tornar de código aberto, assim, a partir de um único endpoint dinâmico consultar e extrair os dados exactamente como o cliente pretende, ou seja, como cliente não é necessário percorrer, no caso de múltiplos pedidos, vários endpoints para extrair os dados que pretende, ou não precisa requerer elementos que desnecessários à certa altura.

Então, basicamente o GraphQL permite de forma super prática percorrer uma ou várias fontes de dados, a partir de pedidos do cliente são extraídos exactamente os dados necessários, e toda a estrutura para percorrer as estruturas da base de dados fica a cargo do GraphQL Server.

Espero que tenha aprendido com este artigo e que se tenha divertido enquanto lia.

Obrigado por acompanhar até ao fim e espero por você no próximo artigo.

Para questões e sugestões esteja a vontade para tal nos comentários, email igorlsambo1999@gmail.com ou twitter @lsambo02.

Obrigado e até ao próximo artigo!!!

--

--