SlideShare ist ein Scribd-Unternehmen logo
1 von 37
Downloaden Sie, um offline zu lesen
GraphQL	
a	linguagem	do	Facebook	para	APIs	
Fundamentos	e	Prá/cas	
Sergio	Lima	
Ruby	Developer	
Scrum	team	member	
Abril	de	2018
GraphQL	
Agenda	
1.  Minha	experiência	com	GraphQL	
2.  O	Que	é	o	GraphQL	
3.  Que	problema	o	GraphQL	resolve?	
4.  	Usar	GraphQL	ou	REST?
GraphQL	
Agenda	
5.  PráRca	
o  Implementação	passo	a	passo	
o  Explorar	consultas	
o  GraphQL	Client	
o  Comando	curl	
o  Client	com	Ruby	
6.  Referências
Minha	Experiência	com	GraphQL	
•  STD	– Sinacor	TransacRon	Data	-	sistema	
de	transações	financeiras	em	NodeJS.	
	
•  ArRgo	para	blog	
•  Pesquisas	
•  Criação	de	app	Ruby	On	Rails	com	
GraphQL
Minha	Experiência	com	GraphQL	
•  ArRgo	para	blog	
	
•  ArRgo:	 	
h`ps://onebitcode.com/graphql-introducao/	
	
•  Aplicação	Rpo	API:
h`ps://github.com/OneBitCodeBlog/graphqlapp
Minha	Experiência	com	GraphQL	
•  Apresentação	sobre	GraphQL	
	
•  Aplicação	Rpo	API:
h`ps://github.com/sergiosouzalima/
transacRonapp
O	Que	é	o	GraphQL	
•  AlternaRva	à	maneira	tradicional	de	se	
construir	APIs.	
•  Site	oficial:	
•  “A	query	language	for	your	API”	
•  h`p://graphql.org	
•  Projetada	pelos	engenheiros	do	
Facebook,	2012.	
•  Lee	Byron	
•  @leeb
O	Que	é	o	GraphQL	
•  Mais	que	linguagem	de	consulta:	
	
•  GraphiQL.	
	
•  Mecanismo	de	execução	de	consulta.
O	Que	é	o	GraphQL	
•  GraphiQL.	
•  Feito	em	React	
•  Interface	no	browser	
•  Documentação	da	API	
•  Consultas	e	operações:	
•  Disponibilizadas	instantaneamente	
•  Permite	testes
O	Que	é	o	GraphQL	
•  Mas	por	que	esse	nome?	
•  Especificação	de	API	baseada	em	
grafos.
O	Que	é	o	GraphQL	
•  Cada	nó:	um	recurso	
do	sistema.	
•  Recurso:	usuário,	
cliente,	fornecedor.	
	
•  Outro	recurso:		
•  país	do	usuário	
•  peça	fornecida	
pelo	fornecedor	
•  nota	fiscal	do	
cliente	
•  ...	
	
Grafo:	
Pontos	chamados	
de	nó	e	ligados	uns	
aos	outros.
O	Que	é	o	GraphQL	
•  Dessa	forma,	o	GraphQL	permite	a	
ligação	entre	recursos	do	sistema	em	
forma	de	um	grafo.	
•  Letras:	
•  Q	=	Query	
•  L	=	Language	
	
•  Tradução	livre:	
•  GraphQL	
•  Linguagem	de	consulta	de	grafos
Que	problema	o	GraphQL	resolve?	
•  Criada	pela	equipe	do	Facebook	em	
2012.	
•  2015,	disponibilizada	como	open	
source.	
•  Lee	Byron,	moRvação:	
•  Obter	dados	necessários	para	o	feed	
de	noncias	do	Facebook
Que	problema	o	GraphQL	resolve?	
•  MoRvação:	
•  DisposiRvos	móveis,	usando	
conexões	de	rede	lentas.	
•  E	a	situação	se	complicava:	
•  Crescentes	acessos	ao	Facebook	
via	disposiRvos	móveis.
Que	problema	o	GraphQL	resolve?	
Problema	 Solução	
Under-fetching	
múlRplas	chamadas	que	o	
cliente	tem	que	fazer,	ou	seja,	
várias	idas	e	voltas	ao	servidor	
(roundtrips)	para	obter	os	
dados	necessários	
	
Apenas	uma	chamada	para	
vários	recursos
Problema	 Solução
Que	problema	o	GraphQL	resolve?	
Problema	 Solução	
Muitas	chamadas,	no	caso	
quatro	chamadas	ao	servidor	
para	resgatar	dados	a	serem	
exibidos	em	uma	página.	
No	GraphQL,	é	necessário	
somente	um	único	end-point.	
	
“POST	/graphql”.		
	
Todas	as	operações	são	
realizadas	por	meio	desse	
caminho.
Problema	
Over-fetching	
receber	mais	dados	que	o	necessário		
Na	consulta	anterior	era	necessário		
•  nome	do	usuário,		data	dos	posts,	nome	dos	amigos,	foto	
do	usuário.	
Recebemos	também	
•  código	do	usuário,	data	de	nascimento,	profissão.	
•  Posts,	texto	de	cada	um	deles.	
	
Recebemos	muito	mais	dados	que	o	necessário,	já	que	a	API	
não	sabe	exatamente	o	que	queremos.	
Que	problema	o	GraphQL	resolve?
Que	problema	o	GraphQL	resolve?	
Solução	
Receber	somente	o	necessário,	assim	evita-se		demora	na	
consulta	e	menor	processamento	no	servidor	e	no	cliente.		
O	GraphQL	dá	liberdade	para	o	cliente	solicitar	ao	servidor	somente	o	que	é	
necessário.	Usando	GraphQL,	esta	consulta	fica	assim:	
query	{		
		user(id:	"1")	{	
			name	
			posts	{	
					created_at	
			},	
			friends	{	
					name	
			},	
			picture	{	
					image	
		}	
}
Que	problema	o	GraphQL	resolve?	
Versionamento	e	
Manutenção	de	API	
O	Cliente	escolhe	o	que	
pedir	da	API	
APIs	tradicionais,	com	o	passar	
do	tempo,	acontecem	
modificação	de	campos.	
	
	Versões	de	APIs:	versões	
anRgas	entram	em	desuso	
gradualmente.	
	
No	GraphQL	a	consulta	é	
feita	pelo	cliente.		
Ele	decide	quais	dados	
aparecem	na	query.	
	
Sem	necessidade	de	manter	
versões	das	APIs.
Que	problema	o	GraphQL	resolve?	
Muitas	solicitações	da	equipe	
de	front-end	
A	equipe	de	front-end	
escolhe	o	que	pedir	da	API	
A	equipe	de	front-end	tem	que	
solicitar	a	equipe	de	back-end	
modificações	nos	dados	a	
serem	disponibilizados	nas	
APIs.	
	
Este	tempo	e	esforço	de	
comunicação	é	comum	entre	
as	duas	equipes,	hoje	em	dia.	
	
No	GraphQL,	a	própria	
equipe	de	front-end	poderá	
criar	suas	consultas.	
	
Desta	forma,	a	comunicação	
para	este	propósito	
diminuirá,	liberando	tempo	
para	outras	aRvidades.
Usar	GraphQL	ou	REST?	
Se	seu	end-point	se	parece	
com	isso	
Melhor	usar	GraphQL	
	
/transacRons/100/account/
advisor/?
sortBy=date&fields=id,code&n
ame	
{
transaction(id: 100) {
account {
id
email
advisor {
id
code
name
}
}
}
}
Usar	GraphQL	ou	REST?	
Se	você	tem	controle	sobre	o	
consumo	de	sua	API	
Melhor	usar	REST	
	
A	app	é	uma	SPA	(Single	Page	
ApplicaRon)	ou	mobile	
applicaRon.	
	
/users/countries/2	
	
/is_running	à	ok
PráRca
PráRca	
	
•  GraphqlApp	
	
•  h`ps://
github.com/
OneBitCodeBlog
/graphqlapp
PráRca	-	GraphqlApp	
{
user(id: 1) {
name
email
}
}	
GET
PráRca	-	GraphqlApp	
{
allUsers {
id
name
country {
id
name
}
}
}
GET	all
PráRca	-	GraphqlApp	
muta/on	{	
		createUser(name:	“John”,	
is_admin:	true,	email:	
“john@mail.com”,		
				country_id:	1,	
phone_number:	55555555)	
{	
				id	
		}	
}
POST
PráRca	-	GraphqlApp	
mutation {
updateUser(id: 6,
name: “Johnny”) {
name
id
}
}
PUT
PráRca	-	GraphqlApp	
muta/on	{	
		deleteUser(id:	6)	
}
DELETE
PráRca	
	
•  TransacRonApp	
	
•  h`ps://
github.com/
sergiosouzalima/
transacRonapp
PráRca	– TransacRonApp	
Curl	
curl	-XPOST	h`p://localhost:3000/graphql	-
d	“query={	allTransacRons	{	id,	equity,	
value	}	}”	
	
curl	-XPOST	h`p://localhost:3000/graphql	-
d	“query={	transacRon(id:	888)	{	id,	equity,	
value	}	}”
PráRca	– TransacRonApp	
Client	em	Ruby	
#	gem	'graphlient'	
	
url	=	'h`p://ubuntu-
sergiosouzalima980040.codeanyapp.com:3000/graphql'	
	
client	=	Graphlient::Client.new(url)
PráRca	– TransacRonApp	
Client	em	Ruby	
response	=	client.query	do	
		query	do	
				transacRon(id:	899)	do	
						equity	
						account	do	
								name	
						end	
				end	
		end	
end	
	
response.data.transacRon.account.name
Fundamentos	e	Prá/cas	
Dúvidas,	
comentários?	
GraphQL	
a	linguagem	do	Facebook	para	APIs
Fundamentos	e	Prá/cas	
GraphQL	
a	linguagem	do	Facebook	para	APIs	
Thanks!
Fundamentos	e	Prá/cas	
GraphQL	
a	linguagem	do	Facebook	para	APIs	
	Referências:	
•  GraphQL:	a	linguagem	do	Facebook	para	APIs	
•  h`ps://onebitcode.com/graphql-introducao/	
•  GraphQL		
•  h`ps://graphql.org	
•  h`ps://www.howtographql.com/	
•  h`ps://www.quora.com/Should-I-stay-with-REST-or-move-to-GraphQL

Weitere ähnliche Inhalte

Ähnlich wie GraphQL - A Linguagem do Facebook para APIs

Ähnlich wie GraphQL - A Linguagem do Facebook para APIs (20)

TDC2018SP | Trilha Ruby - Uma Aplicação Ruby On Rails Integrada com GraphQL, ...
TDC2018SP | Trilha Ruby - Uma Aplicação Ruby On Rails Integrada com GraphQL, ...TDC2018SP | Trilha Ruby - Uma Aplicação Ruby On Rails Integrada com GraphQL, ...
TDC2018SP | Trilha Ruby - Uma Aplicação Ruby On Rails Integrada com GraphQL, ...
 
Rails API com GraphQL
Rails API com GraphQLRails API com GraphQL
Rails API com GraphQL
 
Introdução ao GraphQL - Uma nova forma de criar APIs
Introdução ao GraphQL - Uma nova forma de criar APIsIntrodução ao GraphQL - Uma nova forma de criar APIs
Introdução ao GraphQL - Uma nova forma de criar APIs
 
Introdução ao GraphQL - Uma nova forma de criar APIs (Ruby)
Introdução ao GraphQL - Uma nova forma de criar APIs (Ruby)Introdução ao GraphQL - Uma nova forma de criar APIs (Ruby)
Introdução ao GraphQL - Uma nova forma de criar APIs (Ruby)
 
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 ou APIs RESTful - DevDay 2017
GraphQL ou APIs RESTful - DevDay 2017GraphQL ou APIs RESTful - DevDay 2017
GraphQL ou APIs RESTful - DevDay 2017
 
GraphQL na GetNinjas (2017-09-20)
GraphQL na GetNinjas (2017-09-20)GraphQL na GetNinjas (2017-09-20)
GraphQL na GetNinjas (2017-09-20)
 
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 e WordPress, uma bonita união
GraphQL e WordPress, uma bonita uniãoGraphQL e WordPress, uma bonita união
GraphQL e WordPress, uma bonita união
 
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
 
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando PimentaIniciando com Ruby on Rails - Luiz Fernando Pimenta
Iniciando com Ruby on Rails - Luiz Fernando Pimenta
 
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipster
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipsterGerando aplicações Spring Boot e AngularJS com gerador de código JHipster
Gerando aplicações Spring Boot e AngularJS com gerador de código JHipster
 
Migracao gae-openshift
Migracao gae-openshiftMigracao gae-openshift
Migracao gae-openshift
 
Introdução ao GraphQL
Introdução ao GraphQLIntrodução ao GraphQL
Introdução ao GraphQL
 
Desenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e SpringDesenvolvimento RIA com GWT e Spring
Desenvolvimento RIA com GWT e Spring
 
php4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHPphp4android: desenvolva aplicações android em PHP
php4android: desenvolva aplicações android em PHP
 
Introducao ao GraphQL
Introducao ao GraphQLIntroducao ao GraphQL
Introducao ao GraphQL
 
Node.js - Programação assíncrona e de tempo real
Node.js - Programação assíncrona e de tempo realNode.js - Programação assíncrona e de tempo real
Node.js - Programação assíncrona e de tempo real
 
GraphQL com .NET Core
GraphQL com .NET CoreGraphQL com .NET Core
GraphQL com .NET Core
 
Palestra Fatec
Palestra FatecPalestra Fatec
Palestra Fatec
 

GraphQL - A Linguagem do Facebook para APIs