The Evolution of API Design
API
History
New API Standard
GraphQL over REST
GraphQL Fundamentals
Application
Application Database
Application DatabaseServer
rogramming
pplication
nterface
Socket Programming
Socket
Remote Procedure Call
XML-RPC
XML-RPC
Remote Procedure Call
Remote Procedure Call
XML-RPC
Simple Object Access Protocol
SOAP
SOAP-ENV : Envelope
SOAP-ENV: Header
SOAP-ENV: Body
Simple Object Access Protocol
SOAP
REpresentational State Transfer
REST
REST
• Need for efficient data loading
• Need for efficient data loading
• Variety of different frontend platforms
• Need for efficient data loading
• Variety of different frontend platforms
• Fast & Iterative development
With GraphQL,
you model your business domain as a graph
A Query Language for your APIQuery Language


• New API Standard invented by Facebook
• New API Standard invented by Facebook
• Presented publicly at React.js Conf 2015
• New API Standard invented by Facebook
• Presented publicly at React.js Conf 2015
• Declarative Data Fetching
• New API Standard invented by Facebook
• Presented publicly at React.js Conf 2015
• Declarative Data Fetching
• Single Endpoint, Single Request
• New API Standard invented by Facebook
• Presented publicly at React.js Conf 2015
• Declarative Data Fetching
• Single Endpoint, Single Request
• Strong Type System
Open Source License
BSD + Patents
Open Source License
BSD + Patents
Open Source License
BSD + Patents
Open Source License
OWFa v1.0
https://developer.github.com/v3/
https://developer.github.com/v4/
User Name
User Name
Post Title
User Name
Post Title
Follower Name
/users/<id>
/users/<id>/posts
/users/<id>/followers
/users/<id>
/users/<id>/posts
/users/<id>/followers
Fetch user data
/users/<id>
/users/<id>/posts
/users/<id>/followers
Fetch user data
/users/<id>
/users/<id>/posts
/users/<id>/followers
Fetch posts
/users/<id>
/users/<id>/posts
/users/<id>/followers
Fetch posts
/users/<id>
/users/<id>/posts
/users/<id>/followers
Fetch followers
/users/<id>
/users/<id>/posts
/users/<id>/followers
Fetch followers
/graphql
/graphql
Fetch everything with a single request
/graphql
Fetch everything with a single request
• Underfetching (N + 1 requests problem)
/users/<id>
/users/<id>/posts
/users/<id>/followers
/users/<id>
/users/<id>/posts
/users/<id>/followers
/users/<id>
/users/<id>/posts
/users/<id>/followers
/graphql
• Underfetching (N + 1 requests problem)
• Nested CompletionHandler
• Underfetching (N + 1 requests problem)
• Nested CompletionHandler
• Underfetching (N + 1 requests problem)
• Nested CompletionHandler
• Overfetching
.
.
.
.
.
.
.
.
.
• Underfetching (N + 1 requests problem)
• Nested CompletionHandler
• Overfetching
• Too Many Endpoints
Clients
/users
/usersInfo
/usersCount
/userPosts
/users
/usersInfo
/usersCount
/userPosts
/userFollowers
Clients
/userByPost
/userNameStartsK
• Underfetching (N + 1 requests problem)
• Nested CompletionHandler
• Overfetching
• Too Many Endpoints
• Versioning
• Underfetching (N + 1 requests problem)
• Nested CompletionHandler
• Overfetching
• Too Many Endpoints
• Versioning
• Schemaless
• Underfetching (N + 1 requests problem)
• Nested CompletionHandler
• Overfetching
• Too Many Endpoints
• Versioning
• Schemaless
• Slow Product Development
User Requests (per hour)
Authenticated 5000
Unauthenticated 60
User Requests (per hour)
Authenticated 5000
Unauthenticated 60
User Requests (per hour)
Authenticated 5000
Unauthenticated 60
• Node Limit

Individual Call ≦ 500,000 total nodes
• Node Limit
• Rate Limit

5,000 points per hour (points ≠ call)
1
1
100
1
100
5000
1
100
5000
5101
1
100
5000
5101 / 100
= 51
Server
Server
Server
Connection
Server
Connection
Server
Connection
Architectural Style
HTTP, HTTPS Protocol
Multiple Endpoints
Schemaless
Fixed Data Structure
Versioning
Standard API
Transport Layer Agnostic
Single Endpoint
Strongly Typed Schema
Flexible Data Structure
Evolve API Without Versions
GraphQL over REST
GraphQL over REST

GraphQL over REST