SlideShare uma empresa Scribd logo
@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 GraphQL ou APIs RESTful - DevDay 2017

XML Free Programming - Brazil
XML Free Programming - BrazilXML Free Programming - Brazil
XML Free Programming - Brazil
Stephen Chin
 

Semelhante a GraphQL ou APIs RESTful - DevDay 2017 (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

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
 

GraphQL ou APIs RESTful - DevDay 2017