The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very...

96
BETTER APIS WITH The Future of the Realtime Web Josh Price @joshprice GRAPHQL

Transcript of The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very...

Page 1: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

BETTER APIS WITHThe Future of the Realtime Web

Josh Price @joshprice

GRAPHQL

Page 2: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There
Page 3: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

STEPPING STONES TO FPLa

ngua

ge (E

lixir)

Strongly-Typed APIs (GraphQL)

Page 4: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

GRAPHQL WAS

HERE?

http://whiteafrican.com/2008/05/12/crossing-the-mapping-chasm/

Page 5: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

COMMON ISSUES WITH RESTA TAXONOMY OF

Page 6: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

PERFORMANCE

Page 7: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

UNDERFETCHING

Page 8: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

COMMON ISSUES WITH REST

UNDERFETCHING

▸ N + 1 HTTP request problem

▸ eg. Fetched a Blog Post but not Comments

▸ Must make more requests to fulfil data requirements

▸ For complex views we saw 6-7 requests (usually serial)

▸ Have seen up to 25+ requests in the wild

Page 9: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

OVERFETCHING

Page 10: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

COMMON ISSUES WITH REST

OVERFETCHING

▸ Client wants a small subset of data from endpoint

▸ But gets everything regardless

▸ The addition of fields to a endpoint bloats payloads

▸ Create more endpoints, but this means more roundtrips

▸ Could create a homepage specific endpoint for each device, but harder to manage

Page 11: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

BIG UPFRONT DESIGN

Page 12: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

COMMON ISSUES WITH REST

BIG UPFRONT DESIGN NEEDED

▸ Need to anticipate all current and future clients’ needs

▸ ie Mobile v Web clients

▸ Could have multiple representations/endpoints

▸ Divergence of server code

▸ Keeping everything in sync is hard

Page 13: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

HYPERMEDIA?

Page 14: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

COMMON ISSUES WITH REST

HYPERMEDIA ISN’T ALWAYS APPLICABLE

▸ If you control the clients and the server

▸ Less useful for your web or mobile app calling a known API 1000x / sec

▸ Semantics are communicated out of the

▸ A self-describing, well-typed API is an alternative approach

Page 15: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

GRAPHQL

Page 16: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

GRAPHQL HISTORY

WHAT IS GRAPHQL?

▸ Language for defining schemas, types & queries

▸ It’s a specification for that language (like OpenAPI, Swagger)

▸ Developed by Facebook in 2012

▸ Used internally to improve mobile app performance

▸ Served 300B+ requests per day (1.6B DAU on mobile)

▸ Open sourced spec in mid 2015

Page 17: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

DATA FETCHINGGENERALISED

Page 18: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There
Page 19: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

EASIER TO BUILDGRAPHQL APIS ARE

Page 20: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

EASIER TO CONSUMEGRAPHQL APIS ARE

Page 21: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

PERFORMANCEBETTER

Page 22: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

SELF DOCUMENTINGSELF DESCRIBING AND

Page 23: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

CONSUMER DRIVEN CONTRACTS

EXPOSE YOUR DOMAIN MODEL VIA

Page 24: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

ISOMORPHICQUERIES AND RESPONSES ARE

Page 25: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

STRONGLY TYPED APISTYPES IN YOUR SCHEMA ==

Page 26: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

EASIER EVOLUTIONBUILT-IN FIELD DEPRECATION MEANS

Page 27: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

MYTHS & MISCONCEPTIONS

Page 28: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

GRAPH DATABASEYOU DO NOT NEED A

Page 29: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

QUERY LANGUAGETHIS IS NOT YOUR TYPICAL

Page 30: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

LANGUAGE AGNOSTICNOT ONLY FOR JAVASCRIPT

Page 31: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

HTTP OR JSONNOT DEPENDENT ON

Page 32: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

DOES NOT REPLACE REST IT’S EASIER TO WORK WITH BUT

Page 33: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

MAKES REST EASIERPOTENTIALLY

Page 34: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

GRAPHQL CONCEPTSLET’S LEARN SOME

Page 35: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

SCHEMAS, TYPES AND SCALARS

type Meetup { title: String! date: Date description: String url: URL! talks: [Talk!]! }

type Talk { title: String! description: Markdown presenter: Person! }

schema { query: Query mutation: Mutation }

GraphQL SDL

Page 36: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

SCHEMAS, TYPES AND SCALARS

type Meetup { title: String! date: Date description: String url: URL! talks: [Talk!]! }

type Talk { title: String! description: String presenter: Person! }

schema { query: Query mutation: Mutation }

@desc "A meetup” object :meetup do @desc "The title of the meetup" field :title, non_null(:string)

@desc "The date of the meetup" field :date, :date

@desc "The description of the meetup" field :description, :string

@desc "The Meetup.com url" field :url, :string

@desc "The talks at the meetup" field :talks, list_of(:talk) end

GraphQL SDL Elixir with Absinthe

Page 37: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

GRAPHQL CONCEPTS

RESOLVER FUNCTIONS FETCH YOUR DATA

▸ Resolver functions fetch (or update) data

▸ Called when query fields are matched against schema fields

▸ Return data or an error

▸ Can take arguments specified in schema

▸ Can take a context in from the query (ie current user for authentication and authorisation)

Page 38: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

GRAPHQL CONCEPTS

RESOLVER FUNCTIONS (ELIXIR EXAMPLE)defmodule GraphqlSydney.GraphQL.Schema do use Absinthe.Schema alias GraphqlSydney.Events

import_types Absinthe.Type.Custom

query do @desc "Get the next meetup" field :next_meetup, type: :meetup do resolve fn _, _ -> {:ok, Events.next_meetup} end end

@desc "Get the previous meetups" field :previous_meetups, type: list_of(:meetup) do resolve fn _, _ -> {:ok, Events.past_meetups} end end end end

Page 39: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

GRAPHQL CONCEPTS

QUERY PROCESSING PIPELINE

▸ Client send Query documents as Strings

▸ Server Parses into AST

▸ Validation of AST

▸ Query fields matched against Schema

▸ Matching resolver functions executed

▸ Data (and errors) returned to client as a Map

Page 40: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

1 2

34CLIENT

DB

CMS

SIMPLE QUERY LIFECYCLE

Query (String)

Response (Map)

Data Fetching

Run Resolver

Functions

Page 41: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

LET’S SEE IT IN ACTION!

Page 42: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There
Page 43: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

QUERY: FETCH NEXT MEETUP

Page 44: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

QUERY: AUTOCOMPLETE / AUTOCORRECTION

Page 45: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

QUERY: FETCH NEXT MEETUP’S TALKS

Page 46: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

QUERY: INLINE DOCUMENTATION

Page 47: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

QUERY: MEETUP WITH TALKS AND PRESENTERS

Page 48: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

GETTING STARTED

Page 49: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

HOW TO GET STARTED WITH GRAPHQL

STEP 1: PICK A SERVER IMPLEMENTATION

▸ JavaScript reference implementation

▸ Apollo Server Tools

▸ Java / Scala (Sangria)

▸ .NET / F#

▸ Ruby / Python / PHP

▸ Elixir / Erlang

▸ Go / Rust / Haskell

Page 50: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

HOW TO GET STARTED WITH GRAPHQL

STEP 2: WRITE YOUR SCHEMA

▸ Figure out your domain types

▸ Write top level queries for reads

▸ Add mutations for writes

▸ Subscriptions for reactive data changes

▸ Don’t forget field descriptions!

Page 51: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

HOW TO GET STARTED WITH GRAPHQL

STEP 3: CHOOSE A CLIENT

▸ Relay Modern

▸ Declare data requirements of UI component as query fragments

▸ Sends a single query

▸ Render collects query fragments in the render tree

▸ Caches objects by unique ID

▸ Added graph convention of nodes and edges

▸ Pagination metadata, etc

▸ Not actually part of the spec and can be confusing

Page 52: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

HOW TO GET STARTED WITH GRAPHQL

STEP 3: CHOOSE A CLIENT

▸ Apollo 2.0

▸ Bit simpler than Relay, no graph conventions

▸ Hand rolled queries for each view

▸ Handles client side caching

▸ Probably easiest to start here

▸ Also has native iOS and Android client libs

Page 53: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

HOW TO GET STARTED WITH GRAPHQL

STEP 4: PROFIT

▸ Start with read only first

▸ Shim existing REST APIs

▸ Frontend and Backend need to be on board

▸ Easy to experiment

▸ Try it out on new non-critical path projects

Page 54: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

THINGS TO WATCH OUT FOR

Page 55: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

THINGS TO WATCH OUT FOR

COMPLEX AND PATHOLOGICAL QUERIES

▸ Denial of Service possible for slow queries

▸ Be careful with exposing sorting, filtering and aggregation

▸ ie Don’t expose a sort field without an index

▸ Limit query depth and/or complexity

▸ Not all implementations have this though

▸ Instrumentation can alleviate this

Page 56: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

THINGS TO WATCH OUT FOR

AVOID “STRINGLY TYPING”

▸ It’s very easy overuse plain String types

▸ You lose information: makes mocking harder

▸ There are no type aliases in the spec (yet)

▸ Can write your own custom Scalars (impl specific)

▸ Fine-grained “Micro-types” are useful

▸ ie URL, Email, Markdown, Name, Money, etc

Page 57: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

THINGS TO WATCH OUT FOR

NO HTTP CACHING

▸ Can send queries by GET

▸ POST is preferred

▸ Can’t use standard HTTP caching

▸ Varnish, Squid, etc

▸ Can cache elsewhere however

▸ Client, Resolvers, Data Store, etc

Page 58: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

RICH TOOLING ECOSYSTEM

Page 59: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

EXPORATION & VISUALISATION

Page 60: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There
Page 61: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There
Page 62: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There
Page 63: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There
Page 64: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There
Page 65: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There
Page 66: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

GRAPHQL SERVER ANALYTICS

Page 67: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There
Page 68: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

QUERY EXECUTION TRACING

Page 69: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

INTEGRATED CACHE MANAGEMENT

Page 70: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

ERROR TRACKING

Page 71: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

SCHEMA ANALYSIS

Page 72: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

SCHEMA STITCHING AND COMPOSITION

Page 73: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

SCHEMA COMPOSITION

Page 74: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There
Page 75: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

SCHEMA STITCHING

GRAFT

Page 76: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

TOOL ECOSYSTEM

SCHEMA COMPOSITION TOOLS

▸ Apollo Schema Stitching

▸ https://dev-blog.apollodata.com/graphql-schema-stitching-8af23354ac37

▸ Gramps the IBM microservice API composition framework

▸ https://github.com/gramps-graphql/gramps

▸ GraphQL Weaver

▸ https://github.com/AEB-labs/graphql-weaver

Page 77: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

API MOCKING

Page 78: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There
Page 79: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

GRAPHQL STACKS

Page 80: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There
Page 81: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There
Page 82: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There
Page 83: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There
Page 84: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

CMS BACKENDS

Page 85: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There
Page 86: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There
Page 87: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

GRAPHQL BACKENDS AS A SERVICE

Page 88: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There
Page 89: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There
Page 90: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There
Page 91: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

REALTIME APIS WITH SUBSCRIPTIONS

Page 92: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

REACTIVE BACKENDSHTTP/2 PUSH AND THE RISE OF

Page 93: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

HAS GRAPHQL CROSSED THE CHASM?

Page 94: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There
Page 95: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

GRAPHQL IS

HERE

http://whiteafrican.com/2008/05/12/crossing-the-mapping-chasm/

Page 96: The Future of the Realtime Web BETTER APIS WITH GRAPHQL · AVOID “STRINGLY TYPING” It’s very easy overuse plain String types You lose information: makes mocking harder There

NEXT STEPS

RESOURCES

▸ http://graphql.org/

▸ https://github.com/chentsulin/awesome-graphql

▸ https://www.apollographql.com/

▸ https://facebook.github.io/relay/

▸ GraphQL Summit Videos

▸ https://www.youtube.com/playlist?list=PLpi1lPB6opQywks7yYYs5jJAIRI3faRTm