SlideShare uma empresa Scribd logo
1 de 47
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!

Mais conteúdo relacionado

Semelhante a Introdução ao GraphQL: Uma nova forma de criar APIs

REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfBrunoAlbuquerque864673
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfBrunoAlbuquerque864673
 
GraphQL na GetNinjas (2017-09-20)
GraphQL na GetNinjas (2017-09-20)GraphQL na GetNinjas (2017-09-20)
GraphQL na GetNinjas (2017-09-20)Bruno Soares
 
GraphQL - A Linguagem do Facebook para APIs
GraphQL - A Linguagem do Facebook para APIsGraphQL - A Linguagem do Facebook para APIs
GraphQL - A Linguagem do Facebook para APIsSergio Lima
 
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorPorque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorDickson S. Guedes
 
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018 O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018 Gabriel Machado
 
Arquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningArquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningFelipe Santos
 
InterCon 2017 - Design Coerente: decisões de tecnologia para APIs - Ravan Scafi
InterCon 2017 - Design Coerente: decisões de tecnologia para APIs - Ravan ScafiInterCon 2017 - Design Coerente: decisões de tecnologia para APIs - Ravan Scafi
InterCon 2017 - Design Coerente: decisões de tecnologia para APIs - Ravan ScafiiMasters
 
FISL12. Web Services e Computação em Nuvem com PHP
FISL12. Web Services e Computação em Nuvem com PHPFISL12. Web Services e Computação em Nuvem com PHP
FISL12. Web Services e Computação em Nuvem com PHPFlávio Lisboa
 
GraphQL com .NET Core
GraphQL com .NET CoreGraphQL com .NET Core
GraphQL com .NET CoreMVP Microsoft
 
Vacinando mais de 200 mil pessoas com ReactJS e GraphQL
Vacinando mais de 200 mil pessoas com ReactJS e GraphQLVacinando mais de 200 mil pessoas com ReactJS e GraphQL
Vacinando mais de 200 mil pessoas com ReactJS e GraphQLTaller Negócio Digitais
 
TDC Floripa 2018 - Metralhando sua API
TDC Floripa 2018 - Metralhando sua APITDC Floripa 2018 - Metralhando sua API
TDC Floripa 2018 - Metralhando sua APIEdlaine Zamora
 

Semelhante a Introdução ao GraphQL: Uma nova forma de criar APIs (20)

REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdf
 
REST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdfREST vs GraphQL - A batalha das APIs.pdf
REST vs GraphQL - A batalha das APIs.pdf
 
Intro à Graphql
Intro à GraphqlIntro à Graphql
Intro à Graphql
 
GraphQL - Uma nova maneira de projetar api's
GraphQL - Uma nova maneira de projetar api'sGraphQL - Uma nova maneira de projetar api's
GraphQL - Uma nova maneira de projetar api's
 
GraphQL - uma nova maneira de projetar api's
GraphQL - uma nova maneira de projetar api'sGraphQL - uma nova maneira de projetar api's
GraphQL - uma nova maneira de projetar api's
 
GraphQL na GetNinjas (2017-09-20)
GraphQL na GetNinjas (2017-09-20)GraphQL na GetNinjas (2017-09-20)
GraphQL na GetNinjas (2017-09-20)
 
Django
DjangoDjango
Django
 
GraphQL - A Linguagem do Facebook para APIs
GraphQL - A Linguagem do Facebook para APIsGraphQL - A Linguagem do Facebook para APIs
GraphQL - A Linguagem do Facebook para APIs
 
Apres s3
Apres s3 Apres s3
Apres s3
 
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhorPorque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
Porque aprender várias linguagens me tornou um DBA (e desenvolvedor) melhor
 
Metralhando sua API
 Metralhando sua API Metralhando sua API
Metralhando sua API
 
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018 O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
O que não fazer ao atualizar para o PHP 7 @ TDC SP 2018
 
Arquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine LearningArquitetura Serverless para Machine Learning
Arquitetura Serverless para Machine Learning
 
InterCon 2017 - Design Coerente: decisões de tecnologia para APIs - Ravan Scafi
InterCon 2017 - Design Coerente: decisões de tecnologia para APIs - Ravan ScafiInterCon 2017 - Design Coerente: decisões de tecnologia para APIs - Ravan Scafi
InterCon 2017 - Design Coerente: decisões de tecnologia para APIs - Ravan Scafi
 
FISL12. Web Services e Computação em Nuvem com PHP
FISL12. Web Services e Computação em Nuvem com PHPFISL12. Web Services e Computação em Nuvem com PHP
FISL12. Web Services e Computação em Nuvem com PHP
 
GraphQL com .NET Core
GraphQL com .NET CoreGraphQL com .NET Core
GraphQL com .NET Core
 
Vacinando mais de 200 mil pessoas com ReactJS e GraphQL
Vacinando mais de 200 mil pessoas com ReactJS e GraphQLVacinando mais de 200 mil pessoas com ReactJS e GraphQL
Vacinando mais de 200 mil pessoas com ReactJS e GraphQL
 
Metralhando sua API
Metralhando sua APIMetralhando sua API
Metralhando sua API
 
TDC Floripa 2018 - Metralhando sua API
TDC Floripa 2018 - Metralhando sua APITDC Floripa 2018 - Metralhando sua API
TDC Floripa 2018 - Metralhando sua API
 
#Moving br workshop
#Moving br workshop#Moving br workshop
#Moving br workshop
 

Mais de Fernando Henriques

9 erros que desenvolvedores Node.js cometem
9 erros que desenvolvedores Node.js cometem9 erros que desenvolvedores Node.js cometem
9 erros que desenvolvedores Node.js cometemFernando Henriques
 
A importância de padronizar nosso CSS
A importância de padronizar nosso CSSA importância de padronizar nosso CSS
A importância de padronizar nosso CSSFernando Henriques
 
Como Rails e DHH revolucionaram a engenharia de software
Como Rails e DHH revolucionaram a engenharia de software Como Rails e DHH revolucionaram a engenharia de software
Como Rails e DHH revolucionaram a engenharia de software Fernando Henriques
 
O front-end moderno e sua lib mais popular: React
O front-end moderno e sua lib mais popular: ReactO front-end moderno e sua lib mais popular: React
O front-end moderno e sua lib mais popular: ReactFernando Henriques
 
O front-end moderno e sua lib mais popular: React
O front-end moderno e sua lib mais popular: ReactO front-end moderno e sua lib mais popular: React
O front-end moderno e sua lib mais popular: ReactFernando Henriques
 
Rails admin : Como criar um painel administrativo na velocidade da luz
Rails admin : Como criar um painel administrativo na velocidade da luzRails admin : Como criar um painel administrativo na velocidade da luz
Rails admin : Como criar um painel administrativo na velocidade da luzFernando Henriques
 

Mais de Fernando Henriques (6)

9 erros que desenvolvedores Node.js cometem
9 erros que desenvolvedores Node.js cometem9 erros que desenvolvedores Node.js cometem
9 erros que desenvolvedores Node.js cometem
 
A importância de padronizar nosso CSS
A importância de padronizar nosso CSSA importância de padronizar nosso CSS
A importância de padronizar nosso CSS
 
Como Rails e DHH revolucionaram a engenharia de software
Como Rails e DHH revolucionaram a engenharia de software Como Rails e DHH revolucionaram a engenharia de software
Como Rails e DHH revolucionaram a engenharia de software
 
O front-end moderno e sua lib mais popular: React
O front-end moderno e sua lib mais popular: ReactO front-end moderno e sua lib mais popular: React
O front-end moderno e sua lib mais popular: React
 
O front-end moderno e sua lib mais popular: React
O front-end moderno e sua lib mais popular: ReactO front-end moderno e sua lib mais popular: React
O front-end moderno e sua lib mais popular: React
 
Rails admin : Como criar um painel administrativo na velocidade da luz
Rails admin : Como criar um painel administrativo na velocidade da luzRails admin : Como criar um painel administrativo na velocidade da luz
Rails admin : Como criar um painel administrativo na velocidade da luz
 

Introdução ao GraphQL: Uma nova forma de criar APIs