Introdução ao GraphQL
Uma nova forma de criar APIs
Fernando Henriques
● Desenvolvedor 10+ anos
● Senior Full Stack Developer
● JavaScript, Ruby, PHP e Java
● Front-end 💓 3000
github.com/fernandohenriques
Nova forma de criar APIs?
Foi criada em 2012 e lançada publicamente em 2015, mas...
FACEBOOK STACK
https://stackshare.io/facebook/facebook
Ecossistema rico
Mais de mil pacotes no NPM para o termo “graphql”...
Alguém está usando em prod ?
Minha empresa também usa
O que é o GraphQL?
GraphQL
➔ Criada pelo Facebook
➔ Open-source
➔ Linguagem de consulta de dados
➔ Não é um protocolo para APIs,
mas funcionando como um
➔ Agnóstico: independe de
linguagem ou banco de dados
➔ É uma spec!
Protocolo para APIs ?
Motivação
Quem solicita decide o que quer receber
(somente o que precisa)
Essa é a premissa básica, motivo de sua criação
No REST não é assim
Em uma API REST é preciso criar um novo
endpoint para receber uma resposta com estrutura
de dados diferente
Netflix
GraphQL REST
● Representational State Transfer
● Verbos HTTP (GET, POST, PUT, DELETE, HEAD…)
● Resource based URLs - Endpoint (/movie/10)
● RESTful: capacidade de determinado sistema aplicar os
conceitos REST
REST (ful) API
Action-based URL x Resource-based URL
Como ficam as URLs no GraphQL?
Buscando dados com REST
GET /babies
Buscando dados com GraphQL
POST /graphql
Buscando dados por ID com REST
GET /babies/1
Buscando dados por ID com GraphQL
POST /graphql
Salvando dados com REST
POST /babies
Salvando dados com GraphQL
POST /graphql
Filtrando dados com REST
POST /babies?name=joaquim
Filtrando dados com GraphQL
POST /graphql
★ Baixo custo de mudança
★ Mais poder para o front-end
Duas grandes vantagens do GraphQL
Vamos entender como a mágica
acontece
1. Single endpoint
2. Well defined contract (tem schema, é tipado - o REST é
schemaless, não tem contrato)
3. No more overfetching
4. No more underfetching (vários endpoints para uma feature)
Conceitos fundamentais do GraphQL
● Documentação: auto-documentação através do Schema
○ Chamada de introspection retorna o Schema
● Legibilidade da API: sem “salada” de URLs
● Menos tráfego de dados no cliente: payload menor
● Tempo de desenvolvimento do back-end focado em regras
de negócio e qualidade, e não em “ajudar” o front-end
Problemas comuns que o GraphQL resolve
Problema de versionamento
Int: A signed 32‐bit integer
Float: A signed double-precision
floating-point value
String: A UTF‐8 character
sequence
Boolean: True ou false
ID: Unique identifier (não legível
para humanos)
Tipos primitivos
Tipos e schema
Enum, custom scalar, listas e non-null
Interface
Union Types
O GraphQL trabalha com o conceito
de estado
Queries e Mutations
Exemplo de query e mutation
Resolvers
Responsável pela magia mais poderosa
Suporte a real time
Subscription
★ Sobrecarga de responsabilidades no front-end funciona
para todos os times e projetos?
★ Nada impede o dev de escrever (é até fácil) uma query
com potencial destrutivo para sua app (ex.: sem
paginação)
★ Ainda precisa evoluir/padronizar os processos de
autorização de acesso
GraphQL não é bala de prata
Outros protocolos para APIs
GraphQL como API
Gateway
Links úteis
★ https://graphql-ruby.org/
★ https://www.howtographql.com/graphql-ruby/1-getting-
started/
★ https://github.com/rmosolgo/graphql-
ruby/blob/master/guides/fields/resolvers.md
★ https://github.com/graphql/graphiql
Show me the code!
https://github.com/fernandohenriques/graphql-on-rails
Obrigado!

Introdução ao GraphQL - Uma nova forma de criar APIs (Ruby)