GraphQL – A linguagem do Facebook para APIs

Postado por DBC Company Em: Desenvolvimento, Tecnologia Sem comentarios

Mesmo com a popularidade do GraphQL, dúvidas sobre o que ele é, e o que resolve são comuns. O objetivo desse artigo é explicar o conceito, entender as diferenças em relação ao REST e concluir se devemos considerar ou não a utilização do mesmo na nossa stack de desenvolvimento.

Quanto a sua origem

“Criada pelo Facebook em 2012 e lançada publicamente em 2015. É considerada uma alternativa para arquiteturas REST, além de oferecer um serviço runtime para rodar comandos e consumir uma API” (Wikipedia, 2019).

Quanto a sua definição

“É uma linguagem de consulta para APIs e um tempo de execução para atender essas consultas com os dados existentes. O GraphQL fornece uma descrição completa e compreensível dos dados em sua API, oferecendo aos clientes o poder de solicitar exatamente o que eles precisam e nada mais, facilita a evolução das APIs ao longo do tempo e permite poderosas ferramentas de desenvolvimento. ” (Graphql.org, 2019)

Quando criavam os aplicativos móveis do Facebook, precisavam de uma API de busca de dados suficientemente poderosa para descrever, mas simples o suficiente para ser fácil de aprender e usar pelos desenvolvedores de produtos. Desta forma, o GraphQL foi desenvolvido para atender a uma necessidade particular. Atualmente, ele fornece centenas de bilhões de chamadas de API por dia. De forma resumida o cliente pede para sua API aquilo que ele quer obter como resposta e como consequência diminui-se a responsabilidade do servidor mandar sempre uma resposta martelada com quantidade definida de campos.

GraphQL não é:

  • Um banco de dados.
  • Substituto doa linguagem SQL.
  • Não é ferramenta do lado servidor.
  • Não é exclusivo para HTTP/APIs.

Não se trata de mais um framework, em sua essência GraphQL é uma especificação que possui implementações em diversas linguagens.

GraphQL não é exclusivo para HTTP/APIs

GraphQL não é simplesmente uma nova forma de se criar APIs com HTTP. Na verdade, ele nem usa verbos HTTP, ele desconhece completamente esta camada. GraphQL não se limita ao contexto de aplicações HTTP.

Quanto a sua Tipagem

GraphQL é estaticamente tipado, tudo nele precisa de um tipo associado, e esses tipos formam um schema. É a partir desse schema que as queries são executadas e consequentemente validadas, tanto entrada quanto saída. Há alguns tipos base, como String, Int, Float, ID e Boolean. Eles são conhecidos como Scalar Types, e é possível criar os seus próprios tipos, escalares e objetos.

Os tipos acompanhados de ! Informam que não aceitam null como valor. O mais interessante deste exemplo é o field address de User, ele aponta para outro tipo, o Address. Podemos assumir que há um relacionamento entre User e Address. Como esse relacionamento é feito? O GraphQL não entrega detalhes de implementação, o field address, pode vir de qualquer lugar seja, outro banco, arquivo ou API. Para que consultas sejam feitas, há um tipo especial no schema, ele é a “porta de entrada”

Comparando com REST

Uma boa maneira de entender o GraphQL é dizer que está entre SOAP e REST, pegando pedaços de cada um. Aqui está uma rápida visão geral das principais diferenças entre as APIs GrapQL e REST.

Descrição GraphQL REST
Endpoint Single Multiple
HTTP Semântica Query, Mutation, Subscription GET, POST, PUT, DELETE
Códigos de erro Código 200 único Diversos códigos de erro
Cacheable Não Sim
Stateless Sim Sim
Overfetching Não Sim
Underfetching Não Sim

Por que usá-lo?

O GraphQL resolve vários problemas NÃO endereçados pelo REST, incluindo:

  • Controle de versão da API;
  • Busca excessiva / insuficiente;
  • Desempenho lento de grandes aplicativos móveis;

Benefícios do GraphQL

  • Reduza os custos de transferência de dados, tanto no lado do servidor (transferência) quanto no lado do cliente (banda 4G).
  • Garanta tempos de resposta mais rápidos, mesmo em conexões lentas.
  • Tempos de carregamento mais rápidos para seu aplicativo móvel.
  • A simplicidade leva a um back-end mais estável.
  • Busca apenas os campos que você realmente vai utilizar.
  • Consegue fazer várias buscar em uma única requisição.
  • Documentação automática.
  • O sistema de tipos dele já contém um processo de validação tanto de entrada quanto de saída.
  • Facilidade de se trabalhar com múltiplos bancos de dados.

Desvantagens do GraphQL

  • Curva de aprendizado. Você já conhece o REST e precisará aprender o GraphQL.
  • Armazenamento em cache. É mais difícil com o GraphQL.
  • As consultas sempre retornam o código de status 200.

Quando utilizar o GraphQL?

  • Projetos que requerem processar dados rapidamente.
  • Aplicativos com alta taxa de transferência de dados.
  • Projetos que precisam recuperar informações de vários bancos de dados.
  • Colete dados de diferentes stacks.
  • Integração com serviços de terceiros.
  • Implementações de várias plataformas (Web, dispositivos móveis, IoT).

APIs baseadas em GraphQL também podem trazer alguns problemas: elas não são, por exemplo, visionadas, não pelo menos de maneira natural. Em alguns cenários, o versionamento de APIs pode ser muito interessante: por exemplo, se estamos com sistemas novos e legados que consomem os mesmos recursos. Muitas vezes, pode vir a ser interessante separarmos o acesso de sistemas legados de sistemas que são mais recentes. Com REST, uma das maneiras de se fazer isso é através do versionamento. O versionamento de APIs também nos ajuda a identificar as alterações que uma API teve no decorrer do tempo, o que fica completamente transparente com o GraphQL. Dependendo da situação, isso pode vir a causar alguns problemas, principalmente a longo prazo ou em ambientes completamente heterogêneos, com várias aplicações de várias versões consumindo a mesma API.

Implantando o GraphQL com um BaaS

O uso de um BaaS (Backend as a Service) fornecerá os seguintes benefícios:

  • Você se concentra no seu produto principal sem reinventar a roda.
  • Automação em relação ao gerenciamento de bancos de dados, infraestrutura em execução etc.
  • Reduza o custo total de desenvolvimento.
  • Você reunirá as vantagens de um back-end como serviço com a flexibilidade e simplicidade que o GraphQL oferece. Essa configuração permite que um desenvolvedor crie seus esquemas e os implemente automaticamente em um ambiente de infraestrutura pronto para uso.

Provedores de back-end que utilizam GraphQL

Algumas empresas fornecerão hospedagem gerenciada de back-end do GraphQL. Os outros fornecerão apenas opções de auto hospedagem.

  • Back4App
  • Parse
  • AWS Amplify
  • Hasura
  • GraphCool
  • Prisma

Conclusão

Adotando GraphQL em uma aplicação, você terá inicialmente uma curva levemente mais lenta no começo, porém rapidamente o valor agregado se destaca, o desenvolvimento do back-end e do front-end se torna mais ágil e dinâmico, menos idas e voltas. A maior dificuldade não está em sua implementação e uso, e sim no design dele. Ele não tem os problemas de design que uma aplicação Rest possui, porém isso não diminui a forma que o desenvolvedor deverá pensar ao construir os schemas. Ainda não há um consenso difundido sobre padrões de design com GraphQL. Também é utilizado como front-end de outros back-end, isso é conhecido como Backend-For-Frontend. Pense na complexidade de um front-end ter que acessar várias APIs distintas para conseguir uma informação, GraphQL pode resolver esse tipo de complexidade.

Fontes:

https://graphql.org/

https://nordicapis.com/5-potential-benefits-integrating-graphql/

https://www.moesif.com/blog/technical/graphql/REST-vs-GraphQL-APIs-the-good-the-bad-the-ugly/#

https://onebitcode.com/graphql-introducao/

https://medium.com/idexo-developers/graphql-e-rest-quais-as-diferen%C3%A7as-99cae22871a7 https://medium.com/@jcc0xp/graphql-vs-rest-pensando-de-uma-forma-inovadora-a89c0d514a0d

https://tableless.com.br/graphql-a-nova-era-das-apis-web/

 

Por Tiago O. de Farias, Desenvolvedor de Sistemas da DBC.

tiago.farias@dbccompany.com.br

8 Likes

Comments: 0

There are not comments on this post yet. Be the first one!

Deixe um comentário