SlideShare uma empresa Scribd logo
1 de 21
Baixar para ler offline
GraphQL: PUTs, onde
foram parar os verbos
HTTP?
“A query language for your API”
Rio de Janeiro - RJ, 24 de maio de 2018
Leonardo Gomes
● Programador PHP, Ruby on Rails e JS
● Técnico em Informática (2013) e Bacharel em
Sistemas de Informação (2016) pelo IF Fluminense
● Desenvolvedor (profissionalmente) desde 2015
Quem utiliza o GraphQL?
● Inicialmente começou a ser utilizado pelos apps mobile do Facebook em 2012.
○ Em 2015 tornou-se open source e passou a ser utilizado por diversas
empresas.
● Site oficial: graphql.org
Visão geral
● GraphQL é uma linguagem e não um framework
● As APIs são criadas já com documentação
● Não utiliza-se todos os verbos HTTP
○ Normalmente 200 e array de erros se houver
● Não gerencia autenticação de usuários
Visão geral
● Reduz o stack de inicialização por fazer menos requests
○ Mas não é para fazer tudo em um só request
● É comum o uso de endpoint único para requisições
Alguns princípios
1. Pergunte pelo que você precisa e receba exatamente o solicitado
{
hero {
name
}
}
{
"hero": {
"name": "Luke Skywalker"
}
}
Alguns princípios
1. Pergunte pelo que você precisa e receba exatamente o solicitado
{
hero {
name
height
mass
}
}
{
"hero": {
"name": "Luke Skywalker",
"height": 1.72,
"mass": 77
}
}
Alguns princípios
2. Busque vários recursos em apenas uma requisição
{
hero {
name
friends {
name
}
}
}
{
"hero": {
"name": "Luke Skywalker",
"friends": [
{ "name": "Obi-Wan Kenobi" },
{ "name": "R2-D2" },
{ "name": "Han Solo" },
{ "name": "Leia Organa" }
]
}
}
Alguns princípios
3. Descreva os dados que estão disponíveis através de um sistema de Types
{
hero {
name
friends {
name
homeWorld {
name
climate
}
}
}
}
type Query {
hero: Character
}
type Character {
name: String
friends: [Character]
homeWorld: Planet
}
type Planet {
name: String
climate: String
}
Alguns princípios
4. Evolua sua API sem versionamentos
type Film {
title: String
episode: Int
director: String
}
type Film {
title: String
episode: Int
director: String
}
type Person {
name: String
directed: [Film]
}
@deprecated
+ directedBy: Person
Types padrões
● Int: Um inteiro de 32 bits => 10
● Float: Um valor de ponto flutuante de precisão dupla com sinal => 10.99
● String: Uma sequência em UTF-8 => “Esse é um exemplo”
● Boolean: true ou false.
● ID: Um identificador exclusivo e que não deve ser entendido por humanos.
● * nonNull: Um campo que não pode ser nulo. É diferente de obrigatório.
● * listOf: Uma lista de outros types (um array de dados)
Types adicionais
● Enum
○ Utilizado para lista de status, tipos, etc
● Scalar
○ Utilizado para Date, Datetime, JSON, etc
● Filter
○ Pode ser implementado para receber parâmetros de entrada e filtrar dados a
serem retornados
Conceitos
● Não são utilizados diversos verbos HTTP, normalmente o POST.
● As operações são organizadas em Schema da seguinte forma:
1. Query
Leitura
2. Mutation
Escrita
Bibliotecas para PHP via Composer
● webonyx/graphql-php
○ github.com/webonyx/graphql-php
● rebing/graphql-laravel
○ github.com/rebing/graphql-laravel
Não é exclusivo para PHP e outras linguagens já possuem bibliotecas disponíveis:
C# / .NET Clojure Elixir Erlang Go
Groovy Java JavaScript Python Scala
Ruby
Ferramentas para consumo e testes
● Altair GraphQL Client (Extensão do Chrome)
○ github.com/imolorhe/altair
● GraphQL IDE (Uso avançado)
○ github.com/andev-software/graphql-ide
● Postman (Genérico)
○ getpostman.com
github.com/leogomezzz/laravel-graphql
Não tente modificar os padrões básicos
Conclusão
● GraphQL, quando implementado via HTTP, pode
receber dados via POST (mais comum) ou GET.
● Não implementa os códigos HTTP por não ser
desenvolvido para utilizar e depender exclusivamente
dessa camada.
● Um exemplo é a implementação via Sockets, que
também é possível.
● Embora não implemente todos os códigos HTTP,
códigos 500 e 404 podem ser retornados pelo servidor
(e não pelo GraphQL)
Dicas de leitura
● GraphQL vs. REST
○ dev-blog.apollodata.com/graphql-vs-rest-5d425123e34b
● Easy build API using Laravel and GraphQL
○ medium.com/skyshidigital/easy-build-api-using-laravel-and-graphql-67e2c5c5e
150
● Implementation of graphql with Laravel, JWT and Docker
○ github.com/leogomezzz/laravel-graphql
● GraphQL with WebSockets
○ github.com/apollographql/subscriptions-transport-ws
Dúvidas e agradecimentos
linkedin.com/in/lgomess
github.com/leogomezzz
leonardo.delfica@gmail.com

Mais conteúdo relacionado

Mais procurados

Introdução ao SQLAlchemy
Introdução ao SQLAlchemyIntrodução ao SQLAlchemy
Introdução ao SQLAlchemyJoão Toss Molon
 
Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014Christiano Anderson
 
Visao geralti netshoes04
Visao geralti netshoes04Visao geralti netshoes04
Visao geralti netshoes04Ale Uehara
 
Comsolid2011 Introdução Python
Comsolid2011 Introdução PythonComsolid2011 Introdução Python
Comsolid2011 Introdução PythonGleison Rodrigues
 
Introdução ao framework Django
Introdução ao framework DjangoIntrodução ao framework Django
Introdução ao framework DjangoEduardo Palma
 
Desenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyDesenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyGilson Filho
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDouglas V. Pasqua
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + PythonMateus Padua
 
Logging e depuração enterprise-level com Log4perl
Logging e depuração enterprise-level com Log4perlLogging e depuração enterprise-level com Log4perl
Logging e depuração enterprise-level com Log4perlgarux
 
Testes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoTestes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoPaula Grangeiro
 
Ruby (nem tão) Básico
Ruby (nem tão) BásicoRuby (nem tão) Básico
Ruby (nem tão) BásicoFrevo on Rails
 

Mais procurados (20)

Introdução ao SQLAlchemy
Introdução ao SQLAlchemyIntrodução ao SQLAlchemy
Introdução ao SQLAlchemy
 
SQLAlchemy - Desenvolvendo uma aplicação com Python
SQLAlchemy - Desenvolvendo uma aplicação com Python SQLAlchemy - Desenvolvendo uma aplicação com Python
SQLAlchemy - Desenvolvendo uma aplicação com Python
 
Qual linguagem escolher?
Qual linguagem escolher?Qual linguagem escolher?
Qual linguagem escolher?
 
Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014Grafos - Uma abordagem divertida - Latinoware 2014
Grafos - Uma abordagem divertida - Latinoware 2014
 
Visao geralti netshoes04
Visao geralti netshoes04Visao geralti netshoes04
Visao geralti netshoes04
 
Visao geralti netshoes04
Visao geralti netshoes04Visao geralti netshoes04
Visao geralti netshoes04
 
Aula10 -PHP
Aula10 -PHPAula10 -PHP
Aula10 -PHP
 
Aula 9 - Introdução ao Python
Aula 9 - Introdução ao PythonAula 9 - Introdução ao Python
Aula 9 - Introdução ao Python
 
Comsolid2011 Introdução Python
Comsolid2011 Introdução PythonComsolid2011 Introdução Python
Comsolid2011 Introdução Python
 
Introdução ao framework Django
Introdução ao framework DjangoIntrodução ao framework Django
Introdução ao framework Django
 
Aula12- PHP
Aula12- PHPAula12- PHP
Aula12- PHP
 
Desenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2pyDesenvolvendo aplicações web com python e web2py
Desenvolvendo aplicações web com python e web2py
 
Aula11 - PHP
Aula11 - PHPAula11 - PHP
Aula11 - PHP
 
Dicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHPDicas para sua carreira de Desenvolvedor PHP
Dicas para sua carreira de Desenvolvedor PHP
 
Aula14 - Funções em PHP
Aula14 - Funções em PHPAula14 - Funções em PHP
Aula14 - Funções em PHP
 
Tutorial Django + Python
Tutorial Django + PythonTutorial Django + Python
Tutorial Django + Python
 
Logging e depuração enterprise-level com Log4perl
Logging e depuração enterprise-level com Log4perlLogging e depuração enterprise-level com Log4perl
Logging e depuração enterprise-level com Log4perl
 
Testes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de códigoTestes unitários como ferramentas de design de código
Testes unitários como ferramentas de design de código
 
Gisele
GiseleGisele
Gisele
 
Ruby (nem tão) Básico
Ruby (nem tão) BásicoRuby (nem tão) Básico
Ruby (nem tão) Básico
 

Semelhante a GraphQL: PUTs, onde foram parar os verbos HTTP?

REST Web Services com Java
REST Web Services com JavaREST Web Services com Java
REST Web Services com JavaJugVale
 
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
 
Rest web services com Java
Rest web services com JavaRest web services com Java
Rest web services com JavajesuinoPower
 
Testando sua API com HTTParty e RSpec
Testando sua API com HTTParty e RSpecTestando sua API com HTTParty e RSpec
Testando sua API com HTTParty e RSpecDeyvirson Mendonça
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoEduardo Bohrer
 
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)Fernando Henriques
 
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
 
Primeiros Passos com JavaScript
Primeiros Passos com JavaScriptPrimeiros Passos com JavaScript
Primeiros Passos com JavaScriptRamon Bezerra
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011Evaldo Junior
 
Desenvolvimento Ágil de Aplicações Web com Python e Django
Desenvolvimento Ágil de Aplicações Web com Python e DjangoDesenvolvimento Ágil de Aplicações Web com Python e Django
Desenvolvimento Ágil de Aplicações Web com Python e DjangoMatheus Pereira
 
Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Luís Cobucci
 
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...tdc-globalcode
 
It skills para rh aprender e contratar
It skills para rh  aprender e contratarIt skills para rh  aprender e contratar
It skills para rh aprender e contratarAle Uehara
 
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 Pimentamichel adriano medeiros
 

Semelhante a GraphQL: PUTs, onde foram parar os verbos HTTP? (20)

REST Web Services com Java
REST Web Services com JavaREST Web Services com Java
REST Web Services com Java
 
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
 
Rest web services com Java
Rest web services com JavaRest web services com Java
Rest web services com Java
 
Testando sua API com HTTParty e RSpec
Testando sua API com HTTParty e RSpecTestando sua API com HTTParty e RSpec
Testando sua API com HTTParty e RSpec
 
Node.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançadoNode.JS - Workshop do básico ao avançado
Node.JS - Workshop do básico ao avançado
 
Django
DjangoDjango
Django
 
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)
 
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
 
Estudos Technocorp
Estudos TechnocorpEstudos Technocorp
Estudos Technocorp
 
Primeiros Passos com JavaScript
Primeiros Passos com JavaScriptPrimeiros Passos com JavaScript
Primeiros Passos com JavaScript
 
Módulo de php
Módulo de phpMódulo de php
Módulo de php
 
PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011PHP Turbinado com CodeIgniter - Conisli 2011
PHP Turbinado com CodeIgniter - Conisli 2011
 
Desenvolvimento Ágil de Aplicações Web com Python e Django
Desenvolvimento Ágil de Aplicações Web com Python e DjangoDesenvolvimento Ágil de Aplicações Web com Python e Django
Desenvolvimento Ágil de Aplicações Web com Python e Django
 
Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011Qualidade em projetos PHP - PHPSC Conf 2011
Qualidade em projetos PHP - PHPSC Conf 2011
 
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...
Open4Education | MC59 - Aprendendo a programar de forma divertida e eficiente...
 
It skills para rh aprender e contratar
It skills para rh  aprender e contratarIt skills para rh  aprender e contratar
It skills para rh aprender e contratar
 
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
 
GET /conceitos HTTP/1.1
GET /conceitos HTTP/1.1GET /conceitos HTTP/1.1
GET /conceitos HTTP/1.1
 
Guia php
Guia phpGuia php
Guia php
 
Vivendo de hacking
Vivendo de hackingVivendo de hacking
Vivendo de hacking
 

GraphQL: PUTs, onde foram parar os verbos HTTP?

  • 1. GraphQL: PUTs, onde foram parar os verbos HTTP? “A query language for your API” Rio de Janeiro - RJ, 24 de maio de 2018
  • 2. Leonardo Gomes ● Programador PHP, Ruby on Rails e JS ● Técnico em Informática (2013) e Bacharel em Sistemas de Informação (2016) pelo IF Fluminense ● Desenvolvedor (profissionalmente) desde 2015
  • 3. Quem utiliza o GraphQL? ● Inicialmente começou a ser utilizado pelos apps mobile do Facebook em 2012. ○ Em 2015 tornou-se open source e passou a ser utilizado por diversas empresas. ● Site oficial: graphql.org
  • 4. Visão geral ● GraphQL é uma linguagem e não um framework ● As APIs são criadas já com documentação ● Não utiliza-se todos os verbos HTTP ○ Normalmente 200 e array de erros se houver ● Não gerencia autenticação de usuários
  • 5. Visão geral ● Reduz o stack de inicialização por fazer menos requests ○ Mas não é para fazer tudo em um só request ● É comum o uso de endpoint único para requisições
  • 6. Alguns princípios 1. Pergunte pelo que você precisa e receba exatamente o solicitado { hero { name } } { "hero": { "name": "Luke Skywalker" } }
  • 7. Alguns princípios 1. Pergunte pelo que você precisa e receba exatamente o solicitado { hero { name height mass } } { "hero": { "name": "Luke Skywalker", "height": 1.72, "mass": 77 } }
  • 8. Alguns princípios 2. Busque vários recursos em apenas uma requisição { hero { name friends { name } } } { "hero": { "name": "Luke Skywalker", "friends": [ { "name": "Obi-Wan Kenobi" }, { "name": "R2-D2" }, { "name": "Han Solo" }, { "name": "Leia Organa" } ] } }
  • 9. Alguns princípios 3. Descreva os dados que estão disponíveis através de um sistema de Types { hero { name friends { name homeWorld { name climate } } } } type Query { hero: Character } type Character { name: String friends: [Character] homeWorld: Planet } type Planet { name: String climate: String }
  • 10. Alguns princípios 4. Evolua sua API sem versionamentos type Film { title: String episode: Int director: String } type Film { title: String episode: Int director: String } type Person { name: String directed: [Film] } @deprecated + directedBy: Person
  • 11. Types padrões ● Int: Um inteiro de 32 bits => 10 ● Float: Um valor de ponto flutuante de precisão dupla com sinal => 10.99 ● String: Uma sequência em UTF-8 => “Esse é um exemplo” ● Boolean: true ou false. ● ID: Um identificador exclusivo e que não deve ser entendido por humanos. ● * nonNull: Um campo que não pode ser nulo. É diferente de obrigatório. ● * listOf: Uma lista de outros types (um array de dados)
  • 12. Types adicionais ● Enum ○ Utilizado para lista de status, tipos, etc ● Scalar ○ Utilizado para Date, Datetime, JSON, etc ● Filter ○ Pode ser implementado para receber parâmetros de entrada e filtrar dados a serem retornados
  • 13. Conceitos ● Não são utilizados diversos verbos HTTP, normalmente o POST. ● As operações são organizadas em Schema da seguinte forma: 1. Query Leitura 2. Mutation Escrita
  • 14. Bibliotecas para PHP via Composer ● webonyx/graphql-php ○ github.com/webonyx/graphql-php ● rebing/graphql-laravel ○ github.com/rebing/graphql-laravel Não é exclusivo para PHP e outras linguagens já possuem bibliotecas disponíveis: C# / .NET Clojure Elixir Erlang Go Groovy Java JavaScript Python Scala Ruby
  • 15. Ferramentas para consumo e testes ● Altair GraphQL Client (Extensão do Chrome) ○ github.com/imolorhe/altair ● GraphQL IDE (Uso avançado) ○ github.com/andev-software/graphql-ide ● Postman (Genérico) ○ getpostman.com
  • 17.
  • 18. Não tente modificar os padrões básicos
  • 19. Conclusão ● GraphQL, quando implementado via HTTP, pode receber dados via POST (mais comum) ou GET. ● Não implementa os códigos HTTP por não ser desenvolvido para utilizar e depender exclusivamente dessa camada. ● Um exemplo é a implementação via Sockets, que também é possível. ● Embora não implemente todos os códigos HTTP, códigos 500 e 404 podem ser retornados pelo servidor (e não pelo GraphQL)
  • 20. Dicas de leitura ● GraphQL vs. REST ○ dev-blog.apollodata.com/graphql-vs-rest-5d425123e34b ● Easy build API using Laravel and GraphQL ○ medium.com/skyshidigital/easy-build-api-using-laravel-and-graphql-67e2c5c5e 150 ● Implementation of graphql with Laravel, JWT and Docker ○ github.com/leogomezzz/laravel-graphql ● GraphQL with WebSockets ○ github.com/apollographql/subscriptions-transport-ws