GraphQL
vs
Traditional REST API
Vladimir DejanovićJavaDaya
05 May 2018
@VladimirD_42@javadayistanbul
Let’s Meet
@VladimirD_42
Vladimir Dejanović
@javadayistanbul
Let’s Meet
@VladimirD_42
Vladimir Dejanović
@javadayistanbul
Let’s Meet
@VladimirD_42
Vladimir Dejanović
@javadayistanbul
Let’s Meet
@VladimirD_42
Vladimir Dejanović and Others...
@javadayistanbul
Agenda
@VladimirD_42@javadayistanbul
Agenda
@VladimirD_42
REST
@javadayistanbul
Agenda
@VladimirD_42
REST
GraphQL
@javadayistanbul
Agenda
@VladimirD_42
REST
GraphQL vs REST
GraphQL
@javadayistanbul
Agenda
@VladimirD_42
REST
GraphQL vs REST
Questions
GraphQL
@javadayistanbul
@VladimirD_42
What is REST?
@javadayistanbul
REST
@VladimirD_42
http://www.ics.uci.edu/~fielding/pubs
/dissertation/rest_arch_style.htm
@javadayistanbul
REST
@VladimirD_42
Client-Server Architecture
@javadayistanbul
REST
@VladimirD_42
Client-Server Architecture
Statelessness
@javadayistanbul
REST
@VladimirD_42
Client-Server Architecture
Cacheability
Statelessness
@javadayistanbul
REST
@VladimirD_42
Client-Server Architecture
Cacheability
Layered System
Statelessness
@javadayistanbul
REST
@VladimirD_42
Client-Server Architecture
Cacheability
Layered System
Statelessness
Code on Demand (Optional)
@javadayistanbul
REST
@VladimirD_42
Client-Server Architecture
Cacheability
Layered System
Statelessness
Code on Demand (Optional)
Uniform Interface
@javadayistanbul
REST in real life
@VladimirD_42@javadayistanbul
REST in real life
@VladimirD_42@javadayistanbul
REST in real life
@VladimirD_42@javadayistanbul
REST in real life
@VladimirD_42@javadayistanbul
Simple Blog
@VladimirD_42@javadayistanbul
Simple Blog
@VladimirD_42@javadayistanbul
Author
id
name
Simple Blog
@VladimirD_42@javadayistanbul
Author
id
name
Post
id
title
body
authorId
Simple Blog
@VladimirD_42@javadayistanbul
Author
id
name
Post
id
title
body
authorId
Comment
id
text
postId
authorId
Simple Blog
@VladimirD_42@javadayistanbul
Simple Blog REST Code
@VladimirD_42@javadayistanbul
https://github.com/vladimir-dejanovic/graphql
-vs-traditional-rest-api-conftalk_demo
Tag: rest-0.1
@VladimirD_42
What is GraphQL?
@javadayistanbul
GraphQL
@VladimirD_42@javadayistanbul
GraphQL is a query language
for APIs
@VladimirD_42
GraphQL
is
specification
@javadayistanbul
GraphQL
@VladimirD_42@javadayistanbul
graphql-java
GraphQL
@VladimirD_42@javadayistanbul
Talking is boring
Show Code
Simple Blog GraphQL Code
@VladimirD_42@javadayistanbul
https://github.com/vladimir-dejanovic/graphql
-vs-traditional-rest-api-conftalk_demo
Tag: graphql-0.1
GraphQL
@VladimirD_42
Client-Server Architecture
Cacheability
Layered System
Statelessness
Code on Demand (Optional)
Uniform Interface
@javadayistanbul
GraphQL
@VladimirD_42
Client-Server Architecture
Cacheability
Layered System
Statelessness
Code on Demand (Optional)
Uniform Interface
@javadayistanbul
GraphQL
@VladimirD_42
Client-Server Architecture
Cacheability
Layered System
Statelessness
Code on Demand (Optional)
Uniform Interface
@javadayistanbul
GraphQL
@VladimirD_42
Client-Server Architecture
Cacheability
Layered System
Statelessness
Code on Demand (Optional)
Uniform Interface
@javadayistanbul
GraphQL
@VladimirD_42
Client-Server Architecture
Cacheability
Layered System
Statelessness
Code on Demand (Optional)
Uniform Interface
@javadayistanbul
GraphQL
@VladimirD_42
Client-Server Architecture
Cacheability
Layered System
Statelessness
Code on Demand (Optional)
Uniform Interface
@javadayistanbul
GraphQL
@VladimirD_42
Client-Server Architecture
Cacheability
Layered System
Statelessness
Code on Demand (Optional)
Uniform Interface
@javadayistanbul
REST
@VladimirD_42
Schema optional
@javadayistanbul
REST
@VladimirD_42
Schema optional
@javadayistanbul
Good practice, but still optional
GraphQL
@VladimirD_42
Schema is mandatory
@javadayistanbul
GraphQL
@VladimirD_42@javadayistanbul
GraphQL
@VladimirD_42@javadayistanbul
GraphQL
@VladimirD_42@javadayistanbul
GraphQL
@VladimirD_42@javadayistanbul
GraphQL
@VladimirD_42@javadayistanbul
GraphQL
@VladimirD_42@javadayistanbul
@VladimirD_42@javadayistanbul
ref: https://i0.wp.com/keyholesoftware.com/wp-content/uploads/HATEOAS.png
REST
Simple Blog GraphQL Code
@VladimirD_42@javadayistanbul
https://github.com/vladimir-dejanovic/graphql
-vs-traditional-rest-api-conftalk_demo
Tag: graphql-0.2
GraphQL
@VladimirD_42@javadayistanbul
Post
Comment
Author
GraphQL
@VladimirD_42@javadayistanbul
Post
Comment
Author
GraphQL
@VladimirD_42@javadayistanbul
Post
Comment
Author
GraphQL
@VladimirD_42@javadayistanbul
Post
Comment
Author
GraphQL
@VladimirD_42@javadayistanbul
Post
Comment
Author
GraphQL
@VladimirD_42@javadayistanbul
Post
Comment
Author
Simple Blog GraphQL Code
@VladimirD_42@javadayistanbul
https://github.com/vladimir-dejanovic/graphql
-vs-traditional-rest-api-conftalk_demo
Tag: graphql-0.3
GraphQL
@VladimirD_42@javadayistanbul
GraphQL is a query language
for APIs
GraphQL
@VladimirD_42@javadayistanbul
API
GraphQL
@VladimirD_42@javadayistanbul
Powerful query language
GraphQL
@VladimirD_42@javadayistanbul
Client call the shots
GraphQL
@VladimirD_42@javadayistanbul
Post
Comment
Author
GraphQL
@VladimirD_42@javadayistanbul
Post
Comment
Author
@VladimirD_42
Abuse of GraphQL
query {
allPosts {
title
comments {
text
createdBy {
name
posts {
title
comments {
text
@javadayistanbul
@VladimirD_42
Abuse of GraphQL
query {
allPosts {
title
comments {
text
createdBy {
name
posts {
title
comments {
text
@javadayistanbul
Protect from Abuse
@VladimirD_42@javadayistanbul
Protect from Abuse
@VladimirD_42
Time out
@javadayistanbul
Protect from Abuse
@VladimirD_42
Time out
@javadayistanbul
Max Query Depth
Protect from Abuse
@VladimirD_42
Time out
@javadayistanbul
Max Query Depth
Max Query Complexity
Protect from Abuse
@VladimirD_42
Time out
@javadayistanbul
Max Query Depth
Max Query Complexity
Throttling
GraphQL query language for API
@VladimirD_42@javadayistanbul
GraphQL query language for API
@VladimirD_42
Query
@javadayistanbul
GraphQL query language for API
@VladimirD_42
Query
@javadayistanbul
Mutation
Simple Blog GraphQL Code
@VladimirD_42@javadayistanbul
https://github.com/vladimir-dejanovic/graphql
-vs-traditional-rest-api-conftalk_demo
Tag: graphql-0.4
GraphQL query language for API
@VladimirD_42
Query
@javadayistanbul
Mutation
Subscription
GraphQL questions to ask
@VladimirD_42@javadayistanbul
GraphQL questions to ask
@VladimirD_42@javadayistanbul
Error Responses
GraphQL questions to ask
@VladimirD_42@javadayistanbul
Error Responses
Performance & Cache
GraphQL questions to ask
@VladimirD_42@javadayistanbul
Error Responses
Performance & Cache
Authentication & Authorisation
@VladimirD_42
GraphQL
vs
Traditional REST API
@javadayistanbul
GraphQL vs Traditional REST API
@VladimirD_42
Similar, but different
@javadayistanbul
GraphQL vs Traditional REST API
@VladimirD_42
Similar, but different
@javadayistanbul
Tools & knowledge
GraphQL vs Traditional REST API
@VladimirD_42
Similar, but different
@javadayistanbul
Tools & knowledge
“Old Tricks” can be used
GraphQL vs Traditional REST API
@VladimirD_42@javadayistanbul
GraphQL rich SDL
GraphQL vs Traditional REST API
@VladimirD_42@javadayistanbul
GraphQL rich SDL
GraphQL powerful Query Lang
@VladimirD_42
Thank You
@javadayistanbul
Questions
@VladimirD_42
@VladimirD_42
vladimir@itshark.xyz
@javadayistanbul

Java Day Istanbul 2018 GraphQL vs Traditional REST API