GraphQL é simplesmente uma linguagem de consulta para APIs. Ela fornece uma descrição completa e compreensível dos dados em sua API e provê aos clientes/front-ends o poder de perguntar exatamente o que eles precisam e nada mais.

GraphQL não é SQL

Você deve estar pensando “Oba! não vou usar SQL nunca mais na vida…” CALMA! GraphQL não tem nada a ver com SQL.

Structured Query Language, ou Linguagem de Consulta Estruturada ou SQL, é a linguagem de pesquisa declarativa padrão para banco de dados relacional.

Basicamente você vai continuar usando SQL no back-end se seu banco for relacional, caso contrário, continuará fazendo as consultas do modo como você faria sua API fosse REST.

GraphQL é o “SQL” do front-end

História

Para entender melhor isso, vamos entender como e porque o GraphQL nasceu.

Nossa querida GraphQL, foi criada pelo Facebook em 2012 e lançada publicamente em 2015.

Vocês lembram do aplicativo do Facebook antes de 2012? Era uma BOS**! Mas por que era tão ruim?

Lee Byron (dev do Facebook): “Na época, nossos aplicativos para IOS e Android eram invólucros finos em torno das visualizações de nosso website para celular.”

Basicamente uma WebView. Eles só fizeram um aplicativo que chamava a URL do Facebook.

Continua Lee Byron: “Como os aplicativos móveis do Facebook se tornaram mais complexos, eles sofreram um desempenho ruim e, com frequência, travaram.”

Ao iniciar o desenvolvimento de maneira nativa para aplicativos, eles encontraram pela primeira vez precisando de uma API para o feed de notícias. Eles ficaram frustrados com as diferenças entre os dados que desejavam usar nos aplicativos e as consultas do servidor que eles possuíam. Essa frustração inspirou alguns deles a iniciar o projeto que acabou se tornando GraphQL.

“O GraphQL foi nossa oportunidade de repensar a busca de dados de aplicativos móveis a partir da perspectiva de designers e desenvolvedores de produtos.”. [Byron].

Na minha opinião, eles pensaram… “Aaah nããão, vou ter que fazer EndPoints específicos só para o aplicativo, depois vou ter que dar manutenção em dobro… Que preguiça! E se tivesse um jeito de ter um único EndPoint e eu dizer pra ele o que eu quero dele?”

E assim surgiu a GraphQL ❤

Quais são os problemas do REST?

Definindo, Representational State Transfer, abreviado como REST, é um modelo a ser utilizado para se projetar arquiteturas de software distribuído, baseadas em comunicação via rede.

Múltiplos Endpoints para resolver uma necessidade específica do cliente (Underfetching)

Quem nunca precisou montar um tela e teve que chamar duas, três ou mais APIs para acessar os dados que precisava? E pensa na perda de desempenho dessa brincadeira… Você vai fazer várias chamadas para o mesmo servidor.

Endpoints expõem mais dados que os clientes precisam (overfetching)

Isso acontece quando você recebe um objeto e só precisa exibir dois atributos mas recebe o objeto inteiro com vinte atributos, e isso vai piorando se for uma lista de objetos.

Além da perda de desempenho nessa situação, nós, desenvolvedores, temos que lembrar que os usuários que usam dados móveis estão literalmente PAGANDO por aqueles dados que nós estamos descartando.

Então o ideal seria que a gente pudesse consumir SOMENTE aquilo que vamos usar.

E como o GraphQL resolve isso?

Uma consulta GraphQL é uma string enviada a um servidor para ser interpretada e preenchida, que retorna o JSON de volta ao cliente.

 

Como vocês podem perceber é que consultas GraphQL’s espelham suas respostas. Isso facilita demais para o desenvolvedor front-end prever o que será retornado na consulta.

Conceitos importantes

  1. Single Endpoint: Costumam ter somente um único Endpoint, o que muda é o conteúdo do post da requisição.
  2. Todas as chamadas são do tipo POST.
  3. Impõem um contrato bem definido: Cliente e servidor devem respeitar uma estrutura bem definida, conhecida como Schema, para troca efetiva de dados, ou seja, é fortemente tipada.
  4. Possuem operações de Query e Mutation: Query são somente leitura, não modificam os dados, substituem o GET do REST. Já Mutation são operações que alteram os dados, no caso substituem POST, PUT e DELETE.

Quem está usando?

No mundo:

No Brasil:

No prédio que eu trabalho (Eu trabalho na Objective Solutions❤) :

Prática

Exemplo de projeto para se divertir com o GraphQL: https://graphloc.com/

 

Considerações finais

Se você precisa de flexibilidade e eficiência recomendo fortemente que pesquise sobre a ferramenta e como ela pode facilitar o modo como você consome e constrói APIs.

Além de todas as outras vantagens já descritas acima, levanto mais uma: GraphQL também ajuda a diminuir os conflitos entre os desenvolvedor de Back-end e os de Front-end.

Vida longa ao GraphQL!

Dúvidas, sugestões ou críticas? Fale comigo pelo e-mail: yasmin.castro@objective.com.br

Obrigada!

 

Referências

AQUILES, Alexandre. Todo o poder emana do cliente: explorando uma API GraphQL. Disponível em: <http://blog.caelum.com.br/todo-o-poder-emana-do-cliente-explorando-uma-api-graphql/>. Acesso em: 17 set. 2018.

BYRON, Lee. GraphQL: A data query language. Disponível em: <https://code.fb.com/core-data/graphql-a-data-query-language/>. Acesso em: 17 set. 2018.

FACEBOOK. GraphQL: A query language for your API. Disponível em:<https://graphql.org/>. Acesso em: 18 set. 2018.

HANASHIRO, Akira. Você conhece o GraphQL e como ele pode te ajudar?Disponível em: <https://www.treinaweb.com.br/blog/voce-conhece-o-graphql-e-como-ele-pode-te-ajudar/>. Acesso em: 17 set. 2018.

SILVEIRA, Paulo; LINHARES, Mauricio; ALIONÇO, Alessio; TRINDADE, Marcio; ROSA, Rafael. Startups, Processos e Mercado Global — Hipsters #55. Podcast. MP3 (50 min). Disponível em: <https://hipsters.tech/startups-processos-e-mercado-global-hipsters-55/>. Acesso em: 17 set. 2018.

SOARES, Ubiratan. Tudo o que você quer saber sobre GraphQL. Disponível em: <https://www.youtube.com/watch?v=DMWHBO2y5sU>. Acesso em: 17 set. 2018.

WIKIPÉDIA. Desenvolvido pela Wikimedia Foundation. REST. Disponível em: <https://pt.wikipedia.org/wiki/REST>. Acesso em: 17 set. 2018.

WIKIPÉDIA. Desenvolvido pela Wikimedia Foundation. SQL. Disponível em: <https://pt.wikipedia.org/wiki/SQL>. Acesso em: 17 set. 2018.