Trabalhando com GraphQL em Flutter -GraphQLProvider (Parte 1)
Introdução à GraphQL
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:
- Trabalhando com GraphQL em Flutter — Introdução à GraphQL (este artigo)
- Trabalhando com GraphQL em Flutter — GraphQLProvider na prática
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.
- 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!!!