53

How Master GraphQL by Francois de Campredon

Embed Size (px)

Citation preview

Page 1: How Master GraphQL by Francois de Campredon
Page 2: How Master GraphQL by Francois de Campredon

lamifasisiTheFamilyTheFamilylamifasisi

Page 3: How Master GraphQL by Francois de Campredon

DISAGREE ON TWITTERDISAGREE ON TWITTER

#CODITO

Page 4: How Master GraphQL by Francois de Campredon

FRANÇOIS DE CAMPREDON

Page 5: How Master GraphQL by Francois de Campredon

GraphQL

@fdecampredon20/10/2016

Page 6: How Master GraphQL by Francois de Campredon

Agenda

• REST Problems

• GraphQL

• Relay

• Apollo

Page 7: How Master GraphQL by Francois de Campredon

REST

Page 8: How Master GraphQL by Francois de Campredon

2000: Static WebWeb Browser

Web Server

Data Service

HTML

Page 9: How Master GraphQL by Francois de Campredon

2005: AJAXWeb Browser

Web Server

Data Service

JavaScript Client

HTML API

Page 10: How Master GraphQL by Francois de Campredon

API

• SOAP

• XML-RPC / JSON-RPC

• AMF / RemoteObjects

• Etc …

Page 11: How Master GraphQL by Francois de Campredon

REST Advantages

• Stateless

• Cacheable

• Uniform interface

• Scalability

Page 12: How Master GraphQL by Francois de Campredon

2010: Mobile AppWeb Browser

Web Server

Data Service

JavaScript Client

HTML API

Mobile APP

Page 13: How Master GraphQL by Francois de Campredon

/conversations /users/3

/messages/222

/conversations_for_listview

Page 14: How Master GraphQL by Francois de Campredon

• /conversations

• /conversations_for_listview

• /conversations_special

• ….

Page 15: How Master GraphQL by Francois de Campredon

/users/3

/v1/users/3

/v1/users/3

/v2/users/3

Page 16: How Master GraphQL by Francois de Campredon

• /v1/conversations

• /v1/conversations_for_listview

• /v1/conversations_special

• /v2/conversations

• /v2/conversations_for_listview

• /v2/conversations_special

• ….

Page 17: How Master GraphQL by Francois de Campredon

REST problems

• Multiple round trip

• Versionning

• Endpoints multiplication

• No type system

Page 18: How Master GraphQL by Francois de Campredon

Facebook Netflix

GraphQL Falcor

Page 19: How Master GraphQL by Francois de Campredon

GraphQL

Page 20: How Master GraphQL by Francois de Campredon

What is GraphQL

• A query language for API

• ≠ Database query language

• Strongly Typed

• Hierarchical

Page 21: How Master GraphQL by Francois de Campredon

How does it works ?

• Define the types exposed by the service

• Define how the fields of those types are resolved

• Query

Page 22: How Master GraphQL by Francois de Campredon

Basic Query

Page 23: How Master GraphQL by Francois de Campredon

Nesting

Page 24: How Master GraphQL by Francois de Campredon

Arguments

Page 25: How Master GraphQL by Francois de Campredon

Alias

Page 26: How Master GraphQL by Francois de Campredon

Fragments

Page 27: How Master GraphQL by Francois de Campredon

Variables

Page 28: How Master GraphQL by Francois de Campredon

Mutations

Page 29: How Master GraphQL by Francois de Campredon

Types

Page 30: How Master GraphQL by Francois de Campredon

Query Response

Page 31: How Master GraphQL by Francois de Campredon

No versioning !

Page 32: How Master GraphQL by Francois de Campredon

Advantages

• Complex Query with only one Request

• Versioning Free

• Strongly Typed

• Introspection

Page 33: How Master GraphQL by Francois de Campredon

Examples

Page 34: How Master GraphQL by Francois de Campredon

Relay

Page 35: How Master GraphQL by Francois de Campredon

Relay• Data fetching framework for React

• Features :

• Declarative

• Query Colocation

• Automatic mutations management

Page 36: How Master GraphQL by Francois de Campredon

Container

Page 37: How Master GraphQL by Francois de Campredon

Container composition

Page 38: How Master GraphQL by Francois de Campredon

Variables

Page 39: How Master GraphQL by Francois de Campredon

Mutations

• Map a GraphQL mutation

• Declare how this mutation affects the Data State

• Declare Optimistic Response

• Better described by Example

Page 40: How Master GraphQL by Francois de Campredon

Examples

Page 41: How Master GraphQL by Francois de Campredon

Relay Advantages

• Query Colocation = Isolation

• Declarative

• Productive

Page 42: How Master GraphQL by Francois de Campredon

Relay Drawbacks

• Assumptions on how the GraphQL schema is structured

• Black Box

• Complex

• Does not suit all the applications

Page 43: How Master GraphQL by Francois de Campredon
Page 44: How Master GraphQL by Francois de Campredon

Apollo• A stack based on GraphQL

• Apollo Server: HTTP JavaScript GraphQL server

• Apollo Client: fully-featured caching GraphQL client, with binding for React, Angular, IOS and android

• graphql-tools: Alternative approach to constructing GraphQL schema.

• And a lot more …

Page 45: How Master GraphQL by Francois de Campredon

Apollo client

Page 46: How Master GraphQL by Francois de Campredon

Apollo Client vs Relay

• No build step

• Not assumptions on Schema• http://www.codazen.com/choosing-graphql-client-apollo-vs-relay/

Page 47: How Master GraphQL by Francois de Campredon

Queries

Page 48: How Master GraphQL by Francois de Campredon

Mutations

Page 49: How Master GraphQL by Francois de Campredon

Optimistic Updates

Page 50: How Master GraphQL by Francois de Campredon

Apollo Advantages

• Flexibility

• Simplicity

• Evolving Fast

• Integrate well with third party library

Page 51: How Master GraphQL by Francois de Campredon

Apollo Drawbacks• No Container composition (not entirely true)

• No errors at build time

• Less « magic »

• Perhaps less performant ?

• Not Facebook ? :p

Page 52: How Master GraphQL by Francois de Campredon

François de Campredon

@fdecampredonhttps://github.com/fdecampredon/

Thanks !

GraphQL: http://graphql.org/Relay: https://facebook.github.io/relay/Apollo: http://dev.apollodata.com/

Page 53: How Master GraphQL by Francois de Campredon

SEE YOU SOON!SEE YOU SOON!

THEFAMILY.CO