SlideShare uma empresa Scribd logo
1 de 78
Baixar para ler offline
@marcosbrizeno
O que é GraphQL
GraphQL is a query language
for your API, and a server-side
runtime for executing queries
by using a type system you
define for your data.
http://graphql.org/learn/
Type Query {
me: User
}
Type User {
id: ID
name: String
}
Type Query {
me: User
}
Type User {
id: ID
name: String
}
{
me {
name
}
}
{
"me": {
"name": "Luke Skywalker"
}
}
Type Query {
me: User
}
Type User {
id: ID
name: String
}
{
me {
name
}
}
Como funciona na prática?
POST http://localhost/graphql
{
"query" : "query { me { name } }"
}
Como funciona na prática?
POST http://localhost/graphql
{
"query" : "query { me { name } }"
}
Response
{
"data" : {
"me" : {
"name" : "Luke Skywalker"
}
}
}
De onde veio GraphQL?
● Protótipo em 2012
https://youtu.be/zVNrqo9XGOs
De onde veio GraphQL?
● Protótipo em 2012
● 2015 Falaram sobre GraphQL
https://youtu.be/zVNrqo9XGOs
De onde veio GraphQL?
● Protótipo em 2012
● 2015 Falaram sobre GraphQL
● Mais tarde (Julho) foi OSS (JavaScript)
https://youtu.be/zVNrqo9XGOs
De onde veio GraphQL?
● Protótipo em 2012
● 2015 Falaram sobre GraphQL
● Mais tarde (Julho) foi OSS (JavaScript)
● 2016 Production Ready
https://youtu.be/zVNrqo9XGOs
Explorando APIs GraphQL
Com GraphiQL!
GraphiQL is a graphical
interactive in-browser GraphQL
IDE.
https://github.com/graphql/graphiql
https://github.com/graphql/graphiql
http://graphql.org/swapi-graphql/
GraphiQL
http://graphql.org/swapi-graphql/
Show me the Code!
Acessando a
API do Github
Quais linguagens
tenho utilizado nos
meus últimos
repositórios?
API Rest
GET /user/repos
Response
API Rest
GET /user/repos
Response
API Rest
GET /repos/:owner/:repo/languages
Response
API Rest
10x
API GraphQL do Github
https://developer.github.com/v4
API GraphQL do Github
https://developer.github.com/v4/explorer/
https://developer.github.com/v4/explorer/
https://developer.github.com/v4/explorer/
https://developer.github.com/v4/explorer/
https://developer.github.com/v4/explorer/
https://developer.github.com/v4/explorer/
https://developer.github.com/v4/explorer/
Show me the Code! [2]
Criando uma
API GraphQL
Gemfile
Gemfile
$> bundle
Gemfile
$> bundle
$> rails g graphql:install
Gemfile
$> bundle
$> rails g graphql:install
routes.rb
app/controllers/graphql_controller.rb
app/controllers/graphql_controller.rb
app/graphql/leave_management_schema.rb
app/graphql/leave_management_schema.rb
app/graphql/types/query_type.rb
app/graphql/types/query_type.rb
app/graphql/types/query_type.rb
app/graphql/types/query_type.rb
app/graphql/types/leave_query_type.rb
app/graphql/types/leave_query_type.rb
app/graphql/types/leave_query_type.rb
app/graphql/types/leave_query_type.rb
app/graphql/types/consultant_query_type.rb
app/graphql/types/consultant_query_type.rb
http://localhost:3001/graphiql
E aí?
GraphQL
ou
REST
Ninguém usa GraphQL
- O Github já tá usando! - Retrabalho para novos
consumidores
O Github já usa GraphQL!
- A versão nova da API
(v4) não é REST
- Github v3 é o primeiro
resultado no google
GraphQL é mais fácil de evoluir
- Evoluir os modelos do
grafo é mais fácil do
que criar uma nova
versão da API
- Mudanças destrutivas
continuam quebrando
os clientes, e GraphQL
não versiona
GraphQL é mais fácil de codar
- Uma vez que o grafo é
definido, é fácil
reutilizá-lo
GraphiQL facilita muito a Developer Experience
- Consumidores podem
explorar os dados e
criar suas consultas
(além de ver a
documentação)
GraphQL facilita muito a Developer Experience
- APIs REST precisam
que você implemente
customizações da
resposta
GraphQL + BFF = <3
- GraphQL reduz o
payload (essencial para
apps mobile)
GraphQL exige mudança na mentalidade
- Pensar em grafos não é
tão direto assim
Beleza!
Quero usar GraphQL,
#comofaz?
Preciso de uma linguagem
nova só pro GraphQL?
Preciso de uma linguagem
nova só pro GraphQL?
Não!
http://graphql.org/code/
Preciso de um servidor
só pro GraphQL?
Preciso de um servidor
só pro GraphQL?
Não!
REST API
GraphQL API
GraphQL precisa estar junto
com os dados?
GraphQL precisa estar junto
com os dados?
Não!
POST /graphql
GraphQL é apenas
uma (fina) camada
http://graphql.org/learn/thinking-in-graphs/
https://martinfowler.com/articles/born-for-it.html
Valeu!
@marcosbrizeno

Mais conteúdo relacionado

Semelhante a O que é GraphQL e como funciona

Decoupled Drupal com GraphQL e React
Decoupled Drupal com GraphQL e ReactDecoupled Drupal com GraphQL e React
Decoupled Drupal com GraphQL e ReactCleber Gasparoto
 
GraphQL na Era das APIs
GraphQL na Era das APIsGraphQL na Era das APIs
GraphQL na Era das APIsDaniel Varanda
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
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 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ãoLeo Baiano
 
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.Sergio Lima
 
GraphQL - aposta ou retrocesso?
GraphQL - aposta ou retrocesso?GraphQL - aposta ou retrocesso?
GraphQL - aposta ou retrocesso?Wender Machado
 
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 APIsFernando Henriques
 
CouchDB vs Postgres em Rails
CouchDB vs Postgres em RailsCouchDB vs Postgres em Rails
CouchDB vs Postgres em RailsJuan Maiz
 
CouchDB vs PostgreSQL no Rails
CouchDB vs PostgreSQL no RailsCouchDB vs PostgreSQL no Rails
CouchDB vs PostgreSQL no RailsJohalf Farina
 
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015  - Interfaces Ricas com Rails e React.JSTDC São Paulo 2015  - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JSRodrigo Urubatan
 
XML Free Programming - Brazil
XML Free Programming - BrazilXML Free Programming - Brazil
XML Free Programming - BrazilStephen Chin
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JSRodrigo Urubatan
 
Javascript no SAPO e libsapojs
Javascript no SAPO e libsapojsJavascript no SAPO e libsapojs
Javascript no SAPO e libsapojscodebits
 
Overview de Grails: O Java em alta produtividade
Overview de Grails: O Java em alta produtividadeOverview de Grails: O Java em alta produtividade
Overview de Grails: O Java em alta produtividadeCleórbete Santos
 

Semelhante a O que é GraphQL e como funciona (20)

Decoupled Drupal com GraphQL e React
Decoupled Drupal com GraphQL e ReactDecoupled Drupal com GraphQL e React
Decoupled Drupal com GraphQL e React
 
GraphQL na Era das APIs
GraphQL na Era das APIsGraphQL na Era das APIs
GraphQL na Era das APIs
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
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 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.
 
GraphQL - aposta ou retrocesso?
GraphQL - aposta ou retrocesso?GraphQL - aposta ou retrocesso?
GraphQL - aposta ou retrocesso?
 
GDG Angular 2
GDG Angular 2GDG Angular 2
GDG Angular 2
 
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
 
CouchDB vs Postgres em Rails
CouchDB vs Postgres em RailsCouchDB vs Postgres em Rails
CouchDB vs Postgres em Rails
 
CouchDB vs PostgreSQL no Rails
CouchDB vs PostgreSQL no RailsCouchDB vs PostgreSQL no Rails
CouchDB vs PostgreSQL no Rails
 
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015  - Interfaces Ricas com Rails e React.JSTDC São Paulo 2015  - Interfaces Ricas com Rails e React.JS
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
XML Free Programming - Brazil
XML Free Programming - BrazilXML Free Programming - Brazil
XML Free Programming - Brazil
 
Curso de Grails
Curso de GrailsCurso de Grails
Curso de Grails
 
Intro à Graphql
Intro à GraphqlIntro à Graphql
Intro à Graphql
 
Plack
PlackPlack
Plack
 
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015  Porto Alegre - Interfaces ricas com Rails e React.JSTDC2015  Porto Alegre - Interfaces ricas com Rails e React.JS
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
 
Javascript no SAPO e libsapojs
Javascript no SAPO e libsapojsJavascript no SAPO e libsapojs
Javascript no SAPO e libsapojs
 
Overview de Grails: O Java em alta produtividade
Overview de Grails: O Java em alta produtividadeOverview de Grails: O Java em alta produtividade
Overview de Grails: O Java em alta produtividade
 

Mais de Marcos Brizeno

Refatorando tudo! [Agile brazil 2017]
Refatorando tudo! [Agile brazil 2017] Refatorando tudo! [Agile brazil 2017]
Refatorando tudo! [Agile brazil 2017] Marcos Brizeno
 
Developer Experience como diferencial na Transformação Digital
Developer Experience como diferencial na Transformação DigitalDeveloper Experience como diferencial na Transformação Digital
Developer Experience como diferencial na Transformação DigitalMarcos Brizeno
 
Desventuras em série adotando microserviços
Desventuras em série adotando microserviçosDesventuras em série adotando microserviços
Desventuras em série adotando microserviçosMarcos Brizeno
 
Aprenda Elixir em um final de semana
Aprenda Elixir em um final de semanaAprenda Elixir em um final de semana
Aprenda Elixir em um final de semanaMarcos Brizeno
 
5 mitos sobre código bom
5 mitos sobre código bom5 mitos sobre código bom
5 mitos sobre código bomMarcos Brizeno
 
Padrões de projeto superestimados
Padrões de projeto superestimadosPadrões de projeto superestimados
Padrões de projeto superestimadosMarcos Brizeno
 
Abraçando a mudança com Código
Abraçando a mudança com CódigoAbraçando a mudança com Código
Abraçando a mudança com CódigoMarcos Brizeno
 
Práticas Ágeis Distribuidas
Práticas Ágeis DistribuidasPráticas Ágeis Distribuidas
Práticas Ágeis DistribuidasMarcos Brizeno
 
The fine art of slacking
The fine art of slackingThe fine art of slacking
The fine art of slackingMarcos Brizeno
 
Aplicando padrões de projeto em Ruby
Aplicando padrões de projeto em RubyAplicando padrões de projeto em Ruby
Aplicando padrões de projeto em RubyMarcos Brizeno
 
Comunidade e Carreira: Você Ganha Todos Ganham
Comunidade e Carreira: Você Ganha Todos GanhamComunidade e Carreira: Você Ganha Todos Ganham
Comunidade e Carreira: Você Ganha Todos GanhamMarcos Brizeno
 
Entrega Contínua - E Eu Com Isso?
Entrega Contínua - E Eu Com Isso?Entrega Contínua - E Eu Com Isso?
Entrega Contínua - E Eu Com Isso?Marcos Brizeno
 
The fine art of slacking
The fine art of slackingThe fine art of slacking
The fine art of slackingMarcos Brizeno
 
Programar #COMOFAS ? - Rails Girls Fortaleza
Programar #COMOFAS ? - Rails Girls FortalezaProgramar #COMOFAS ? - Rails Girls Fortaleza
Programar #COMOFAS ? - Rails Girls FortalezaMarcos Brizeno
 
Metaprogramação Ruby
Metaprogramação RubyMetaprogramação Ruby
Metaprogramação RubyMarcos Brizeno
 

Mais de Marcos Brizeno (18)

Refatorando tudo! [Agile brazil 2017]
Refatorando tudo! [Agile brazil 2017] Refatorando tudo! [Agile brazil 2017]
Refatorando tudo! [Agile brazil 2017]
 
Developer Experience como diferencial na Transformação Digital
Developer Experience como diferencial na Transformação DigitalDeveloper Experience como diferencial na Transformação Digital
Developer Experience como diferencial na Transformação Digital
 
Desventuras em série adotando microserviços
Desventuras em série adotando microserviçosDesventuras em série adotando microserviços
Desventuras em série adotando microserviços
 
Aprenda Elixir em um final de semana
Aprenda Elixir em um final de semanaAprenda Elixir em um final de semana
Aprenda Elixir em um final de semana
 
5 mitos sobre código bom
5 mitos sobre código bom5 mitos sobre código bom
5 mitos sobre código bom
 
Padrões de projeto superestimados
Padrões de projeto superestimadosPadrões de projeto superestimados
Padrões de projeto superestimados
 
Abraçando a mudança com Código
Abraçando a mudança com CódigoAbraçando a mudança com Código
Abraçando a mudança com Código
 
Práticas Ágeis Distribuidas
Práticas Ágeis DistribuidasPráticas Ágeis Distribuidas
Práticas Ágeis Distribuidas
 
The fine art of slacking
The fine art of slackingThe fine art of slacking
The fine art of slacking
 
Aplicando padrões de projeto em Ruby
Aplicando padrões de projeto em RubyAplicando padrões de projeto em Ruby
Aplicando padrões de projeto em Ruby
 
Comunidade e Carreira: Você Ganha Todos Ganham
Comunidade e Carreira: Você Ganha Todos GanhamComunidade e Carreira: Você Ganha Todos Ganham
Comunidade e Carreira: Você Ganha Todos Ganham
 
Dubles de teste
Dubles de testeDubles de teste
Dubles de teste
 
Entrega Contínua - E Eu Com Isso?
Entrega Contínua - E Eu Com Isso?Entrega Contínua - E Eu Com Isso?
Entrega Contínua - E Eu Com Isso?
 
The fine art of slacking
The fine art of slackingThe fine art of slacking
The fine art of slacking
 
Programar #COMOFAS ? - Rails Girls Fortaleza
Programar #COMOFAS ? - Rails Girls FortalezaProgramar #COMOFAS ? - Rails Girls Fortaleza
Programar #COMOFAS ? - Rails Girls Fortaleza
 
Metaprogramação Ruby
Metaprogramação RubyMetaprogramação Ruby
Metaprogramação Ruby
 
Arquitetura Ágil
Arquitetura ÁgilArquitetura Ágil
Arquitetura Ágil
 
Clean code
Clean codeClean code
Clean code
 

O que é GraphQL e como funciona