SlideShare uma empresa Scribd logo
Felipe Lopes
Software Engineer
Criando um Gateway de
microserviços com GraphQL
Felipe Lopes
Software Engineer
GraphQL
Facebook
Mobile
Data Services
Web Server
HTML5 App
HTML
Data Services
App Server
Native App
Data
RESTful API
Join Tables
Join Tables
Criando um gateway de microserviços com GraphQL - Felipe Lopes
GraphQL
O que é GraphQL?
{
me {
name
}
}
{
me {
name
}
}
{
"me": {
"name": "Felipe Lopes"
}
}
{
user(id: 4815162342) {
name
}
}
{
me {
name
profilePicture {
width
height
url
}
}
}
{
me {
name
profilePicture {
width
height
url
}
}
}
{
"me" {
"name": "Felipe Lopes",
"profilePicture": {
"width": 50,
"height": 50,
"url": "https://cdn/pic.jpg"
}
}
}
{
me {
name
profilePicture(size: 300) {
width
height
url
}
}
}
{
"me" {
"name": "Felipe Lopes",
"profilePicture": {
"width": 300,
"height": 300,
"url": "https://cdn/300.jpg"
}
}
}
{
me {
name
lilPic: profilePicture (size: 50) {
width
height
url
}
bigPic: profilePicture (size: 300) {
width
height
url
}
}
}
{
"me" {
"name": "Felipe Lopes",
"lilPic": {
"width": 50,
"height": 50,
"url": "https://cdn/50.jpg"
},
"bigPic": {
"width": 300,
"height": 300,
"url": "https://cdn/300.jpg"
}
}
}
{
me {
name
lilPic: profilePicture (size: 50) {
width
height
url
}
bigPic: profilePicture (size: 300) {
width
height
url
}
}
}
{
"me" {
"name": "Felipe Lopes",
"lilPic": {
"width": 50,
"height": 50,
"url": "https://cdn/50.jpg"
},
"bigPic": {
"width": 300,
"height": 300,
"url": "https://cdn/300.jpg"
}
}
}
{
me {
name
friends: {
name
events: {
name
}
}
}
}
{
"me" {
"name": "Felipe Lopes",
"friends": [
{
"name": "David Lynch"
"events": [
{
"name": "Academy Awards"
},
{
"name": "SXSW"
}
]
}
…
}
}
Princípios Core do
GraphQL
Modelo mental para
desenvolvedores de produto
Type System
{
me {
name
profilePicture(size: 300) {
width
height
url
}
friends(orderby: IMPORTANCE, first: 1) {
name
events(first: 1) {
name
}
}
}
}
{
me {
name
profilePicture(size: 300) {
width
height
url
}
friends(orderby: IMPORTANCE, first: 1) {
name
events(first: 1) {
name
}
}
}
}
type Query {
me: User
user(id: Int): User
}
{
me {
name
profilePicture(size: 300) {
width
height
url
}
friends(orderby: IMPORTANCE, first: 1) {
name
events(first: 1) {
name
}
}
}
}
type User {
name: String
profilePicture(size: Int = 50): ProfilePicture
friends(first: Int, orderby: FriendOrder):
[User]
events(first: Int): [Event]
}
enum FriendOrder {
FIRST_NAME,
LAST_NAME,
IMPORTANCE
}
{
me {
name
profilePicture(size: 300) {
width
height
url
}
friends(orderby: IMPORTANCE, first: 1) {
name
events(first: 1) {
name
}
}
}
}
type ProfilePicture {
width: Int
height: Int
url: String
}
{
me {
name
profilePicture(size: 300) {
width
height
url
}
friends(orderby: IMPORTANCE, first: 1) {
name
events(first: 1) {
name
}
}
}
}
type User {
name: String
profilePicture(size: Int = 50): ProfilePicture
friends(first: Int, orderby: FriendOrder): [User]
events(first: Int): [Event]
}
{
me {
name
profilePicture(size: 300) {
width
height
url
}
friends(orderby: IMPORTANCE, first: 1) {
name
events(first: 1) {
name
}
}
}
}
type Event {
name: String
attendees(first: Int): [User]
}
Um novo contrato
server/client
MODELS
APP SERVER
CLIENT
VIEWS
MODELS
APP SERVER
CLIENT
VIEWS
Model: 123, pfvr
MODELS
APP SERVER
CLIENT
VIEWS
Model: 123, pfvr
Aqui está seu model 123
MODELS
APP SERVER
CLIENT
VIEWS
Model: 123, v2, pfvr
Aqui está seu model 123, v2
Model V2
Views V2
MODELS
APP SERVER
CLIENT
VIEWS
Model: 123, v3, pfvr
Aqui está seu model 123, v3
Model v2
Views v2
Model v3
Views v3
MODELS
APP SERVER
CLIENT
VIEWS
Model: 123, v4, pfvr
Aqui está seu model 123, v4
Model v2
Views v2
Model v3
Views v3
Model v4
Views v4
APP SERVER
CLIENT
Possibilidades
APP SERVER
CLIENT
Possibilidades
Requerimentos
APP SERVER
CLIENT
Type System
Models
Views
APP SERVER
CLIENT
Essa formato de dados, pfvr
Type System
Models
Views
APP SERVER
CLIENT
Essa formato de dados, pfvr
Aqui está seus dados específicos
Type System
Models
Views
APP SERVER
CLIENT
Essa formato de dados, pfvr
Aqui está seus dados específicos
Type System
Models
Views
Model v2
Views v2
APP SERVER
CLIENT
Essa formato de dados, pfvr
Aqui está seus dados específicos
Type System
Models
Views
Model v2
Model v3
Views v2
Views v3
APP SERVER
CLIENT
Essa formato de dados, pfvr
Aqui está seus dados específicos
Type System
Models
Views
Model v2
Model v3
Model v4
Views v2
Views v3
Views v4
Composição
{
me {
friends {
name
events {
name
}
}
}
}
{
me {
friends {
...friendFragment
}
}
}
fragment friendFragment on User {
name
events {
name
}
}
Suportado por código
arbitrário
CacheDatabase Queue
Código de Aplicação Existente
CacheDatabase Queue
GraphQL
Código de Aplicação Existente
CacheDatabase Queue
GraphQL não é um
mecanismo de armazenamento
Queries GraphQL operam sobre
código arbitrário existente
Type GraphQL Seu código
type User {
name: String
profilePicture(size: Int = 50): ProfilePicture
friends: [User]
}
type User {
name: String
profilePicture(size: Int = 50): ProfilePicture
friends: [User]
}
Introspection
{
__schema {
queryType { name }
types {
name
fields {
name
type {
kind
name
ofType { name }
}
}
}
}
}
Type System no Client
{
me {
name
profilePicture {
width
height
url
}
}
}
@interface GraphQLUser : NSObject {
- (NSString *)name;
- (GraphQLProfilePicture *)profilePicture;
}
@interface GraphQLProfilePicture : NSObject {
- (NSNumber *)width;
- (NSNumber *)height;
- (NSString *)url;
}
Geração de código
{
me {
name
profilePicture {
width
height
url
}
}
}
public class User
{
public string Name { get; set; }
public ProfilePicture ProfilePicture { get; set; }
}
public class ProfilePicture
{
public int Width { get; set; }
public int Height { get; set; }
public string Url { get; set; }
}
Geração de código
GraphiQL
Read/Write
query {
user(id: 4815162342) {
name
profilePicture {
width
height
url
}
}
}
mutation {
}
mutation {
likeStory {
}
}
mutation {
likeStory(storyId: 210688) {
}
}
mutation {
likeStory(storyId: 210688) {
story {
likers {
count
}
doesViewerLike
}
}
}
mutation {
createComment(
storyId: 210688
text: "Hello"
) {
comment {
createTime
}
}
}
mutation {
updateComment(
commentId: 210688
newText: "Hello World"
) {
comment {
text
}
}
}
CODE!!!
Quem está usando
(Duh!)
Felipe Lopes
Software Engineer
felipe.lopes@socialminer.com
@OLopesFelipe
linkedin.com/in/felipelopes01
github.com/lopes-felipe
fb.com/socialminerdev
Seja um Miner
99jobs.com/social-miner/jobs

Mais conteúdo relacionado

PDF
Intro à Graphql
PDF
TDC2017 | POA Trilha Arquitetura - Thinking in GraphQL
PDF
De um sistema legado para micro serviços com GraphQL
PDF
GraphQL na Era das APIs
PPTX
Introdução ao GraphQL - Uma nova forma de criar APIs (Ruby)
PPTX
GraphQL - APIs mais robustas e flexíveis
PPTX
Graphql - o que é, onde e porque usar?
PPTX
Introdução ao GraphQL - Uma nova forma de criar APIs
Intro à Graphql
TDC2017 | POA Trilha Arquitetura - Thinking in GraphQL
De um sistema legado para micro serviços com GraphQL
GraphQL na Era das APIs
Introdução ao GraphQL - Uma nova forma de criar APIs (Ruby)
GraphQL - APIs mais robustas e flexíveis
Graphql - o que é, onde e porque usar?
Introdução ao GraphQL - Uma nova forma de criar APIs

Semelhante a Criando um gateway de microserviços com GraphQL - Felipe Lopes (20)

PPTX
Utilizando graphQL em projetos .Net
PDF
Introdução ao GraphQL
PDF
GraphQL e WordPress, uma bonita união
PDF
GraphQL na GetNinjas (2017-09-20)
PDF
GraphQL - aposta ou retrocesso?
PDF
GraphQL 101
PDF
GraphQL ou APIs RESTful - DevDay 2017
PDF
PHP Community Summit - Do REST ao GraphQL com PHP
PDF
GraphQL: PUTs, onde foram parar os verbos HTTP?
PDF
Do REST ao GraphQL com PHP
PPTX
GraphQL - uma nova maneira de projetar api's
PDF
Workshop Hands-On APIX 2018 - Trilha Básica
PDF
Mecanismo de Busca com Node.js + MongoDB
PDF
JS Experience 2017 - Criação de mecanismos de busca usando Node.js + MongoDB
PPTX
GraphQL com .NET Core
ODP
Desenvolvimento de WebServices RESTful com NodeJS e MongoDB
PPTX
Introducao ao GraphQL
PDF
Ph pn rio 2012 - conheça seu primeiro banco de dados orientado a grafos
PDF
Construindo um sistema distribuido usando rest
PPTX
GraphQL - Uma nova maneira de projetar api's
Utilizando graphQL em projetos .Net
Introdução ao GraphQL
GraphQL e WordPress, uma bonita união
GraphQL na GetNinjas (2017-09-20)
GraphQL - aposta ou retrocesso?
GraphQL 101
GraphQL ou APIs RESTful - DevDay 2017
PHP Community Summit - Do REST ao GraphQL com PHP
GraphQL: PUTs, onde foram parar os verbos HTTP?
Do REST ao GraphQL com PHP
GraphQL - uma nova maneira de projetar api's
Workshop Hands-On APIX 2018 - Trilha Básica
Mecanismo de Busca com Node.js + MongoDB
JS Experience 2017 - Criação de mecanismos de busca usando Node.js + MongoDB
GraphQL com .NET Core
Desenvolvimento de WebServices RESTful com NodeJS e MongoDB
Introducao ao GraphQL
Ph pn rio 2012 - conheça seu primeiro banco de dados orientado a grafos
Construindo um sistema distribuido usando rest
GraphQL - Uma nova maneira de projetar api's
Anúncio

Último (7)

PDF
apresentacao introducao computacao ead.pdf
DOC
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
DOC
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
PDF
Dos requisitos ao código: como criar código rastreável em PHP
PPTX
Mapeamento de Objeto para Tabela Relacional
PDF
Evolução em código: algoritmos genéticos com PHP
PPTX
Curso de Windows 11 resumido na prática.pptx
apresentacao introducao computacao ead.pdf
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
Dos requisitos ao código: como criar código rastreável em PHP
Mapeamento de Objeto para Tabela Relacional
Evolução em código: algoritmos genéticos com PHP
Curso de Windows 11 resumido na prática.pptx
Anúncio

Criando um gateway de microserviços com GraphQL - Felipe Lopes