SlideShare uma empresa Scribd logo
Globalcode	–	Open4education
Trilha – Ruby
Sergio Lima
Ruby Developer
Globalcode	–	Open4education
#rubydev.rb
@sergiosouzalima
Globalcode	–	Open4education
blog
writer
onebitcode.com/author/sergio-lima
Globalcode	–	Open4education
systems
analyst/
developer
linkedin.com/in/sergiosouzalima
Globalcode	–	Open4education
Uma Aplicação Ruby On Rails
Integrada com GraphQL,
a Linguagem do Facebook para APIs.
Globalcode	–	Open4education
Globalcode	–	Open4education
Agenda
  Minha experiência com GraphQL.
  GraphQL, o que é isso?
  Como funciona?
Globalcode	–	Open4education
Agenda
  Que problemas o GraphQL resolve?
  Integração com Ruby On Rails.
  Perguntas?
Globalcode	–	Open4education
Minha Experiência
com GraphQL.
Globalcode	–	Open4education
Minha Experiência
•  Sistema de transações financeiras.
 Feito em NodeJS
 Arquitetura de dados informacional (data-mart)
 Servidor de dados GraphQL
Globalcode	–	Open4education
Minha Experiência
•  Artigo para o blog da Onebitcode
 How to “Rails x GraphQL”
https://onebitcode.com/graphql-introducao/
Projeto
https://github.com/OneBitCodeBlog/graphqlapp
Globalcode	–	Open4education
Minha Experiência
•  Palestra na Guide Investimentos
 Slides
https://www.slideshare.net/sergiosouzalima/graphql-a-
linguagem-do-facebook-para-apis-93202036
Projeto
https://github.com/sergiosouzalima/transactionapp
Globalcode	–	Open4education
Minha Experiência
•  Palestra na TDC 2018 São Paulo
 Slides
https://pt.slideshare.net/sergiosouzalima/rails-api-com-graphql
Projeto
https://notabug.org/sergiosouzalima/graphqlapp
tdc-rails-graphql.herokuapp.com/
tdcapi.herokuapp.com/gq
Globalcode	–	Open4education
GraphQL,
o que é isso?
Globalcode	–	Open4education
GraphQL, o que é isso?
•  Alternativa à maneira tradicional de se construir
APIs.
Globalcode	–	Open4education
GraphQL, o que é isso?
•  É algo que colocamos entre um aplicativo front-end
e um serviço de dados de back-end.
Globalcode	–	Open4education
GraphQL, o que é isso?
•  Projetada pelos engenheiros do Facebook, 2012.
•  Site oficial
http://graphql.org
  “A query language for your API”
Globalcode	–	Open4education
GraphQL, o que é isso?
•  Mais que linguagem de consulta
•  GraphiQL.
Mecanismo de execução de consulta
Feito em React
Documentação da API no browser
Permite testes
Globalcode	–	Open4education
GraphQL, o que é isso?
•  Mas por que esse nome?
Especificação de API
baseada em grafos.
Globalcode	–	Open4education
GraphQL, o que é isso?
•  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
•  …
Globalcode	–	Open4education
GraphQL, o que é isso?
user
Globalcode	–	Open4education
GraphQL, o que é isso?
user
country
Globalcode	–	Open4education
GraphQL, o que é isso?
user
country
Globalcode	–	Open4education
Como
funciona?
Globalcode	–	Open4education
Como funciona?
GraphQL
resolvers (queries) mutations
subscriptions fragments
Globalcode	–	Open4education
Como funciona?
GraphQL
resolvers (queries) mutations
Globalcode	–	Open4education
Como funciona?
GraphQL
consultas modificações
Globalcode	–	Open4education
Como funciona?
GraphQL
resolvers mutations
GET ALLGET PUTPOST
DELETE
R
E
S
T
R
E
S
T
Globalcode	–	Open4education
Como funciona?
Globalcode	–	Open4education
Como funciona?
REST GraphQL
GET user?id=1
query {
user(id: 1) {
name
email
}
}
Globalcode	–	Open4education
Como funciona?
REST GraphQL Resposta do resolver
GET
user?
id=1
query {
user(id: 1) {
name
email
}
}
{
"data": {
"user": {
"name": "Isaac",
"email”:"isaac@gmail.com"
}
}
}
Globalcode	–	Open4education
Como funciona?
REST GraphQL
GET users
query {
allUsers {
id
}
}
Globalcode	–	Open4education
Como funciona?
REST GraphQL Resposta do resolver
GET
users
query {
allUsers {
id
}
}
{
"data": {
"allUsers": [
{
"id": "1"
},
{
"id": "2"
}
]
}
}
Globalcode	–	Open4education
Como funciona?
REST GraphQL
POST users
name=Steve&is_admin=true
&email=jobs@apple.com&p
hone_number=55555555
mutation {
createUser(name: "Steve",
is_admin: true,
email:"jobs@apple.com",
country_id: 1,
phone_number: 55555555) {
id
}
}
Globalcode	–	Open4education
Como funciona?
REST GraphQL Resposta da mutation
POST
mutation {
createUser(name: "Steve",
is_admin: true,
email:"jobs@apple.com",
country_id: 1,
phone_number: 55555555)
{
id
}
}
{
"data": {
"createUser": {
"id": "9"
}
}
}
Globalcode	–	Open4education
Como funciona?
REST GraphQL
PUT users
id=9&name=‘Steve Jobs’
mutation {
updateUser(id: 9,
name: "Steve Jobs") {
name
}
}
Globalcode	–	Open4education
Como funciona?
REST GraphQL Resposta da mutation
PUT
mutation {
updateUser(id: 9,
name:"Steve Jobs”){
name
}
}
{
"data": {
"updateUser": {
"name": "Steve Jobs"
}
}
}
Globalcode	–	Open4education
Como funciona?
REST GraphQL
DELETE users id=9 mutation {
deleteUser(id: 9)
}
Globalcode	–	Open4education
Como funciona?
REST GraphQL Resposta da mutation
DELETE mutation {
deleteUser(id: 9)
}
{
"data": {
"deleteUser": true
}
}
Globalcode	–	Open4education
Que problemas o
GraphQL resolve?
Globalcode	–	Open4education
Que problema resolve?
•  Motivação do Facebook
Acessos por conexões de rede lentas
  A situação se complicava a medida que cresciam os
acessos ao Facebook via dispositivos móveis
Globalcode	–	Open4education
Que problema resolve?
TRADITIONAL
REST API
/users
/posts
/photos
/friends
Globalcode	–	Open4education
Que problema resolve?
GraphQL
API
users
posts
photos
friends
/graphql
Globalcode	–	Open4education
Que problema resolve?
Problema Solução
Under-fetching
Cliente consumidor de dados
recebe menos dados que o
necessário.
Apenas uma chamada para
vários recursos, recebendo
todos os dados necessários.
Globalcode	–	Open4education
Que problema resolve?
Problema Solução
Over-fetching
Cliente consumidor de dados
recebe muito mais dados que
o necessário.
Receber somente o
necessário, assim evita-se
demora na consulta e menor
processamento no servidor e
no cliente.
Globalcode	–	Open4education
Que problema resolve?
Problema Solução
Versionamento da API
APIs tradicionais, com o
passar do tempo, acontecem
modificação de campos.
Consulta é feita pelo cliente.
Ele decide quais dados
aparecem na query.
Sem necessidade de manter
versões das APIs.
Globalcode	–	Open4education
Que problema resolve?
Problema Solução
Muitas solicitações da
equipe de front-end
Tempo e esforço e de
comunicação entre equipes é
comum hoje em dia
A equipe de front-end
escolhe o que pedir da API.
A comunicação para este
propósito diminuirá,
liberando tempo para outras
atividades.
Globalcode	–	Open4education
Que problema resolve?
REST
API
data
requirements
characteristics
client
GraphQL
API
data
requirements
characteristics
client
Globalcode	–	Open4education
Integração com uma
aplicação Ruby On Rails.
Globalcode	–	Open4education
Integração com Rails
•  How to GraphQL integrado com Rails
https://onebitcode.com/graphql-introducao/
Globalcode	–	Open4education
Integração com Rails
$ mkdir graphqlapp && cd graphqlapp
$ rvm use ruby-2.5.0@graphqlapp --ruby-version --create
$ gem install rails -v 5.2.0 --no-ri --no-rdoc
$ rails _5.2.0_ new . --api –T
Globalcode	–	Open4education
Integração com Rails
# Gemfile
gem 'graphql', '~> 1.7.13’
gem ‘graphiql-rails’, '~> 1.4.10', group: :development
## GraphiQL fornece uma interface
## de consulta via browser para GraphQL.
$ bundle install
Globalcode	–	Open4education
Integração com Rails
$ rails generate model
Country abbreviation name
$ rails generate model
User name email phone_number:integer
country:references is_admin:boolean
Globalcode	–	Open4education
Integração com Rails
$ rails db:migrate
$ rails console
Country.create abbreviation: 'BRA', name: 'BRAZIL'
Country.create abbreviation: 'USA', name: 'UNITED STATES OF AMERICA'
User.create name: 'Isaac', email: 'isaac@gmail.com', phone_number: 5556767, country:
Country.first, is_admin: true
User.create name: 'Stephen', email: 'stephen@yahoo.com', phone_number: 5558989, country:
Country.second, is_admin: false
User.create name: 'Albert', email: 'albert@outlook.com', phone_number: 5554545, country:
Country.second, is_admin: false
exit
Globalcode	–	Open4education
Integração com Rails
$ bundle exec rails generate graphql:install
# config/application.rb
# retirar o comentário da linha:
require "sprockets/railtie"
Globalcode	–	Open4education
Integração com Rails
graphqlapp/
app/ config/
controllers/ routes.rb
graphql_
controller.rb
graphql/
mutations/ types/
graphqlapp_
schema.rb
mutation_type.rb query_type.rb
Globalcode	–	Open4education
Integração com Rails
graphqlapp/
app/ config/
controllers/ routes.rb
graphql_
controller.rb
graphql/
mutations/ types/
graphqlapp_
schema.rb
mutation_type.rb query_type.rb
Globalcode	–	Open4education
Integração com Rails
routes.rbgraphql/
mutations/ types/
graphqlapp_
schema.rb
mutation_type.rb query_ype.rb
Globalcode	–	Open4education
Integração com Rails
routes.rbgraphql/
mutations/ types/
graphqlapp_
schema.rb
mutation_type.rb query_type.rb
Globalcode	–	Open4education
Integração com Rails
routes.rbgraphql/
mutations/ types/
graphqlapp_
schema.rb
mutation_type.rb query_type.rb
Globalcode	–	Open4education
Integração com Rails
Globalcode	–	Open4education
Integração com Rails
Globalcode	–	Open4education
Integração com Rails
$ rails server
Globalcode	–	Open4education
Integração com Rails
Globalcode	–	Open4education
Integração com Rails
routes.rbgraphql/
mutations/ types/
graphqlapp_
schema.rb
mutation_type.rb query_type.rb
Globalcode	–	Open4education
Integração com Rails
Globalcode	–	Open4education
Integração com Rails
routes.rbgraphql/
mutations/ types/
graphqlapp_
schema.rb
mutation_type.rb query_type.rb
Globalcode	–	Open4education
Integração com Rails
routes.rbgraphql/
mutations/ types/
graphqlapp_
schema.rb
mutation_type.rb query_type.rb
Globalcode	–	Open4education
Integração com Rails
Globalcode	–	Open4education
Integração com Rails
user
Globalcode	–	Open4education
Integração com Rails
routes.rbgraphql/
mutations/ types/
graphqlapp_
schema.rb
mutation_type.rb query_type.rb user_type.rb
Globalcode	–	Open4education
Integração com Rails
routes.rbgraphql/
mutations/ types/
graphqlapp_
schema.rb
mutation_type.rb query_type.rb user_type.rb
Globalcode	–	Open4education
Integração com Rails
Globalcode	–	Open4education
Integração com Rails
user
idname
email
phone_number
id_admin
Globalcode	–	Open4education
Integração com Rails
Globalcode	–	Open4education
Integração com Rails
user
idname
email
phone_number
id_admin
country
Globalcode	–	Open4education
Integração com Rails
Globalcode	–	Open4education
Integração com Rails
Globalcode	–	Open4education
Integração com Rails
user
idname
email
phone_number
id_admin
country
country
Globalcode	–	Open4education
Integração com Rails
routes.rbgraphql/
mutations/ types/
graphqlapp_
schema.rb
mutation_type.rb query_type.rb user_type.rb country_type.rb
Globalcode	–	Open4education
Integração com Rails
Globalcode	–	Open4education
Integração com Rails
user
idname
email
phone_number
id_admin
country
country
id
abbreviationname
Globalcode	–	Open4education
Integração com Rails
Globalcode	–	Open4education
Integração com Rails
Globalcode	–	Open4education
Integração com Rails
$ curl -XPOST -d 'query={ user(id: 1) {id name}}'
http://localhost:3000/graphql
{"data":{"user":{"id":"1","name":Isaac"}}}
Globalcode	–	Open4education
Integração com Rails
routes.rbgraphql/
mutations/ types/
graphqlapp_
schema.rb
mutation_type.rb query_type.rb user_type.rb country_type.rb
Globalcode	–	Open4education
Integração com Rails
Globalcode	–	Open4education
Integração com Rails
Globalcode	–	Open4education
Integração com Rails
routes.rbgraphql/
mutations/ types/
graphqlapp_
schema.rb
mutation_type.rb query_type.rb user_type.rb country_type.rb
Globalcode	–	Open4education
Integração com Rails
routes.rbgraphql/
mutations/ types/
graphqlapp_
schema.rb
mutation_type.rb query_type.rb user_type.rb country_type.rb
create_user.rb
Globalcode	–	Open4education
Integração com Rails
routes.rbgraphql/
mutations/ types/
graphqlapp_
schema.rb
mutation_type.rb query_type.rb user_type.rb country_type.rb
create_user.rb
Globalcode	–	Open4education
Integração com Rails
Globalcode	–	Open4education
Integração com Rails
Globalcode	–	Open4education
Integração com Rails
query {
user(id: 1) {
name
email
}
}
{
"data": {
"user": {
"name": "Isaac",
"email”:"isaac@gmail.com"
}
}
}
Globalcode	–	Open4education
Integração com Rails
query {
allUsers {
id
}
}
{
"data": {
"allUsers": [
{
"id": "1"
},
{
"id": "2"
}
]
}
}
Globalcode	–	Open4education
Integração com Rails
mutation {
createUser(name: "Steve",
is_admin: true,
email:"jobs@apple.com",
country_id: 1,
phone_number: 55555555)
{
id
}
}
{
"data": {
"createUser": {
"id": "9"
}
}
}
Globalcode	–	Open4education
Integração com Rails
mutation {
updateUser(id: 9,
name:"Steve Jobs”){
name
}
}
{
"data": {
"updateUser": {
"name": "Steve Jobs"
}
}
}
Globalcode	–	Open4education
Integração com Rails
mutation {
deleteUser(id: 9)
}
{
"data": {
"deleteUser": true
}
}
Globalcode	–	Open4education
Finalizando...
Empresas que usam GraphQL
Github
 Twitter
Beek.io: a social network for book lovers
Atlassian
Globalcode	–	Open4education
Finalizando...
Empresas que usam GraphQL
Atlassian
Coursera
 KLM
 Facebook
Globalcode	–	Open4education
Finalizando...
SQL databases x NO SQL databases
==
REST APIs x NO REST APIs
?
Globalcode	–	Open4education
Finalizando...
NO REST API
Globalcode	–	Open4education
Questions?
Thank you
@sergiosouzalima
onebitcode.com/author/sergio-lima
linkedin.com/in/sergiosouzalima
Globalcode	–	Open4education
Referências
http://graphql.org
https://graphql.org/users/
https://onebitcode.com/graphql-introducao/
https://www.howtographql.com/graphql-ruby
https://www.moesif.com/blog/technical/graphql/REST-vs-
GraphQL-APIs-the-good-the-bad-the-ugly/

Mais conteúdo relacionado

DOCX
B.Resume
DOCX
Shoaib Kamal Resume
DOCX
3 years of experience in Software Testing
PDF
GraphQL
DOCX
sumeet_resume(Manual_Testing)latest
PDF
GraphQL: Enabling a new generation of API developer tools
DOCX
BALASAINMA_RESUME
PDF
Tutorial: Building a GraphQL API in PHP
B.Resume
Shoaib Kamal Resume
3 years of experience in Software Testing
GraphQL
sumeet_resume(Manual_Testing)latest
GraphQL: Enabling a new generation of API developer tools
BALASAINMA_RESUME
Tutorial: Building a GraphQL API in PHP

Mais procurados (20)

PPTX
Oracle REST Data Services Best Practices/ Overview
PDF
How to GraphQL
PDF
C# ASP.NET WEB API APPLICATION DEVELOPMENT
PPTX
An intro to GraphQL
PDF
Introduction to GraphQL
DOC
Niyati_Manual_Testing_ISTQB_Certified_Resume
PPTX
White Box Testing And Control Flow & Loop Testing
PDF
OpenAPI and gRPC Side by-Side
PDF
Introduction to GraphQL
PDF
React & GraphQL
PDF
Intro to GraphQL
PDF
JHipster
PDF
Az ve Öz Kotlin - Beyza KOYULMUS
PPTX
Introduction to Backend Development (1).pptx
PPTX
What is an API
PDF
I Love APIs 2015: Crash Course Foundational Topics in Apigee Edge Workshop
PDF
GraphQL in Symfony
PPTX
Attacking GraphQL
PPTX
Katalon Studio Presentation.pptx
PDF
Api Gateway
Oracle REST Data Services Best Practices/ Overview
How to GraphQL
C# ASP.NET WEB API APPLICATION DEVELOPMENT
An intro to GraphQL
Introduction to GraphQL
Niyati_Manual_Testing_ISTQB_Certified_Resume
White Box Testing And Control Flow & Loop Testing
OpenAPI and gRPC Side by-Side
Introduction to GraphQL
React & GraphQL
Intro to GraphQL
JHipster
Az ve Öz Kotlin - Beyza KOYULMUS
Introduction to Backend Development (1).pptx
What is an API
I Love APIs 2015: Crash Course Foundational Topics in Apigee Edge Workshop
GraphQL in Symfony
Attacking GraphQL
Katalon Studio Presentation.pptx
Api Gateway
Anúncio

Semelhante a Rails API com GraphQL (20)

PDF
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
PDF
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
PDF
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
PPTX
Introdução ao GraphQL - Uma nova forma de criar APIs (Ruby)
PDF
Restful APIs com Spring 3
PPTX
Garantindo a qualidade da sua API REST com Behave
PPTX
Introdução ao GraphQL - Uma nova forma de criar APIs
PDF
Buscapé 2.0 - Como mudamos uma empresa em 1 ano
PDF
GraphQL e WordPress, uma bonita união
PDF
Aplicações 12 fatores, melhor com Docker
PDF
A Revolução já começou
PDF
GraphQL ou APIs RESTful - DevDay 2017
PDF
Construindo um micro-serviço Java 100% funcional em 15 minutos
PDF
REST vs GraphQL - A batalha das APIs.pdf
PPT
Instalando arquitetura Lambda com Graphx e Elasticsearch 2.0 em uma aplicação...
PPT
Instanciando a Arquitetura Lambda com GraphX e Elasticsearch 2.0 em uma apl...
PDF
GraphQL - aposta ou retrocesso?
PDF
REST vs GraphQL - A batalha das APIs.pdf
PDF
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
PPT
TDC2018SP | Trilha .Net - Programacao Funcional com C#
TDC2015 Porto Alegre - Interfaces ricas com Rails e React.JS
Interfaces ricas com Rails e React.JS @ Rubyconf 2015
TDC São Paulo 2015 - Interfaces Ricas com Rails e React.JS
Introdução ao GraphQL - Uma nova forma de criar APIs (Ruby)
Restful APIs com Spring 3
Garantindo a qualidade da sua API REST com Behave
Introdução ao GraphQL - Uma nova forma de criar APIs
Buscapé 2.0 - Como mudamos uma empresa em 1 ano
GraphQL e WordPress, uma bonita união
Aplicações 12 fatores, melhor com Docker
A Revolução já começou
GraphQL ou APIs RESTful - DevDay 2017
Construindo um micro-serviço Java 100% funcional em 15 minutos
REST vs GraphQL - A batalha das APIs.pdf
Instalando arquitetura Lambda com Graphx e Elasticsearch 2.0 em uma aplicação...
Instanciando a Arquitetura Lambda com GraphX e Elasticsearch 2.0 em uma apl...
GraphQL - aposta ou retrocesso?
REST vs GraphQL - A batalha das APIs.pdf
TDC SP 2016 - Construindo um microserviço Java 100% funcional em 30 minutos
TDC2018SP | Trilha .Net - Programacao Funcional com C#
Anúncio

Último (9)

PDF
A sua pontuação aumenta ao escolher uma categoria, preencher uma descrição lo...
PPTX
Classifirrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrcação_IPAQ.pptx
PPTX
Fundamentos do Desenvolvimento Web. Fundamentos do Desenvolvimento Web.Fundam...
PPTX
TURMA modelo de modelo apresentação 4DE.pptx
PDF
Agosto-Lilas-Conscientizacao-e-Combate-a-Violencia-contra-a-Mulher.pdf
PPTX
AULA DE HTML E CSS PARA INICIANTES EM INFORMÁTICA
PDF
Apostila_de_Laboratorio_de_Quimica_Inorg.pdf
PDF
Certificado de Conclusão Jornada Inteligência Artificial
PDF
Metodologias ágeis - Slides - aulas 1 a 5.pdf
A sua pontuação aumenta ao escolher uma categoria, preencher uma descrição lo...
Classifirrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrcação_IPAQ.pptx
Fundamentos do Desenvolvimento Web. Fundamentos do Desenvolvimento Web.Fundam...
TURMA modelo de modelo apresentação 4DE.pptx
Agosto-Lilas-Conscientizacao-e-Combate-a-Violencia-contra-a-Mulher.pdf
AULA DE HTML E CSS PARA INICIANTES EM INFORMÁTICA
Apostila_de_Laboratorio_de_Quimica_Inorg.pdf
Certificado de Conclusão Jornada Inteligência Artificial
Metodologias ágeis - Slides - aulas 1 a 5.pdf

Rails API com GraphQL