SlideShare a Scribd company logo
GRAPHQL
Sebastian Siemssen @thefubhy
A LITTLE STORY …
‣ Requires multiple round trips for fetching complex object graphs
‣ Over fetching — As the model grows, so does the payload
‣ High potential for breaking API changes
‣ Structure of the response dictated by the server
‣ Potentially a huge amount of different endpoints and thus complexity
‣ No formal specification resulting in various other shortcomings
PROBLEMS WITH REST
DEAR REST,
I STILL LOVE YOU !
Multiple round trips
When fetching complex, relational data structures: In
order to descent further into the object graph,
multiple round trips to the server are required.
Over fetching
Unless specifically designed for a given purpose, you
often have to deal with needlessly large and bloated
responses.
Compatibility and versioning
By changing your model you are very likely to break
your APIs. API versioning can mitigate that potential
damage at the cost of exponentially increasing
complexity.
Endpoints galore
Attempting to circumvent the aforementioned
problems often leads to a huge amount of bespoke/
ad-hoc endpoints. This, in turn, inevitably increases
the complexity of your application.
Your API is usually
composed of a
spectrum of different
interpretations of REST
No formal specification
No prescribed pattern for deprecation.
No standardized introspection functionality.
…
REST IS WHAT YOU MAKE IT
„This is not not how we as product developers think
about data. Product developers think of data in
terms of graphs.“
Nick Schrock
Code cartoons by Lin Clark
WHAT IS GRAPHQL?
What is GraphQL?
GraphQL is a query language designed to build client
applications by providing an intuitive and flexible
syntax and system for describing their data
requirements and interactions.
IT IS NOT A QUERY
LANGUAGE FOR A
GRAPH DATABASE
GRAPHQL IS
AGNOSTIC TO YOUR
STORAGE LAYER
{	
  
	
  	
  me	
  {	
  
	
  	
  	
  	
  name	
  
	
  	
  }	
  
}
{	
  
	
  	
  'me':	
  {	
  
	
  	
  	
  	
  'name':	
  'Sebastian	
  Siemssen'	
  
	
  	
  }	
  
}
{	
  
	
  	
  me	
  {	
  
	
  	
  	
  	
  name	
  
	
  	
  }	
  
}
{	
  
	
  	
  user(id:	
  123)	
  {	
  
	
  	
  	
  	
  name	
  
	
  	
  }	
  
}
{	
  
	
  	
  user(id:	
  123)	
  {	
  
	
  	
  	
  	
  name	
  
	
  	
  }	
  
}
{	
  
	
  	
  'user':	
  {	
  
	
  	
  	
  	
  'name':	
  'Sebastian	
  Siemssen'	
  
	
  	
  }	
  
}
{	
  
	
  	
  'me':	
  {	
  
	
  	
  	
  	
  'name':	
  'Sebastian	
  Siemssen',	
  
	
  	
  	
  	
  'company':	
  {	
  
	
  	
  	
  	
  	
  	
  'name':	
  'Zensations',	
  
	
  	
  	
  	
  	
  	
  'website':	
  'http://zensations.at'	
  
	
  	
  	
  	
  }	
  
	
  	
  }	
  
}
{	
  
	
  	
  me	
  {	
  
	
  	
  	
  	
  name,	
  
	
   	
   company	
  {	
  
	
  	
  	
  	
  	
  	
  name,	
  
	
  	
  	
  	
  	
  	
  website	
  
	
  	
  	
  	
  }	
  
	
  	
  }	
  
}
{	
  
	
  	
  'me':	
  {	
  
	
  	
  	
  	
  'name':	
  'Sebastian	
  Siemssen',	
  
	
  	
  	
  	
  'profilePic':	
  {	
  
	
  	
  	
  	
  	
  	
  'width':	
  100,	
  
	
  	
  	
  	
  	
  	
  'height':	
  200,	
  
	
  	
  	
  	
  	
  	
  'url':	
  'http://...'	
  
	
  	
  	
  	
  }	
  
	
  	
  }	
  
}
{	
  
	
  	
  me	
  {	
  
	
  	
  	
  	
  name,	
  
	
   	
   profilePic(size:	
  100)	
  {	
  
	
  	
  	
  	
  	
  	
  width,	
  
	
  	
  	
  	
  	
  	
  height,	
  
	
  	
  	
  	
  	
  	
  url	
  
	
  	
  	
  	
  }	
  
	
  	
  }	
  
}
{	
  
	
  	
  'me':	
  {	
  
	
  	
  	
  	
  'name':	
  'Sebastian	
  Siemssen',	
  
	
  	
  	
  	
  'small':	
  {	
  
	
  	
  	
  	
  	
  	
  'width':	
  100,	
  
	
  	
  	
  	
  	
  	
  'height':	
  200,	
  
	
  	
  	
  	
  	
  	
  'url':	
  'http://...'	
  
	
  	
  	
  	
  },	
  
	
  	
  	
  	
  'large':	
  {	
  
	
  	
  	
  	
  	
  	
  'width':	
  300,	
  
	
  	
  	
  	
  	
  	
  'height':	
  600,	
  
	
  	
  	
  	
  	
  	
  'url':	
  'http://...'	
  
	
  	
  	
  	
  }	
  
	
  	
  }	
  
}
{	
  
	
  	
  me	
  {	
  
	
  	
  	
  	
  name,	
  
	
   	
   small:profilePic(size:	
  100)	
  {	
  
	
  	
  	
  	
  	
  	
  width,	
  
	
  	
  	
  	
  	
  	
  height,	
  
	
  	
  	
  	
  	
  	
  url	
  
	
  	
  	
  	
  },	
  
	
   	
   large:profilePic(size:	
  300)	
  {	
  
	
  	
  	
  	
  	
  	
  width,	
  
	
  	
  	
  	
  	
  	
  height,	
  
	
  	
  	
  	
  	
  	
  url	
  
	
  	
  	
  	
  }	
  
	
  	
  }	
  
}
{	
  
	
  	
  'me':	
  {	
  
	
  	
  	
  	
  'name':	
  'Sebastian	
  Siemssen',	
  
	
  	
  	
  	
  'articles':	
  [	
  
	
   	
   	
   {	
  
	
  	
  	
  	
  	
  	
  	
  	
  'title':	
  'GraphQL	
  rocks'	
  
	
  	
  	
  	
  	
  	
  },	
  
	
   	
   	
   {	
  
	
  	
  	
  	
  	
  	
  	
  	
  'title':	
  'Ruben	
  sucks'	
  
	
  	
  	
  	
  	
  	
  },	
  
	
   	
   	
   {	
  
	
  	
  	
  	
  	
  	
  	
  	
  'title':	
  '...'	
  
	
  	
  	
  	
  	
  	
  },	
  
	
   	
   	
   {	
  
	
  	
  	
  	
  	
  	
  	
  	
  'title':	
  '...'	
  
	
  	
  	
  	
  	
  	
  },	
  
	
  	
  	
  	
  ]	
  
	
  	
  }	
  
}
{	
  
	
  	
  me	
  {	
  
	
  	
  	
  	
  name,	
  
	
   	
   articles	
  {	
  
	
  	
  	
  	
  	
  	
  title	
  
	
  	
  	
  	
  }	
  
	
  	
  }	
  
}
{	
  
	
  	
  'me':	
  {	
  
	
  	
  	
  	
  'name':	
  'Sebastian	
  Siemssen',	
  
	
  	
  	
  	
  'articles':	
  [	
  
	
  	
  	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  'title':	
  'GraphQL	
  rocks',	
  
	
  	
  	
  	
  	
  	
  	
  	
  'comments':	
  [	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'author':	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'name':	
  'Ruben	
  Teijeiro',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'label':	
  'This	
  is	
  sorcercy!'	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  },	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'author':	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'name':	
  'Dries	
  Buytaert',	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  'label':	
  'We	
  need	
  that	
  in	
  core!'	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  ]	
  
	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  ]	
  
	
  	
  }	
  
}
{	
  
	
  	
  me	
  {	
  
	
  	
  	
  	
  name,	
  
	
   	
   articles	
  {	
  
	
  	
  	
  	
  	
  	
  title,	
  
	
  	
  	
  	
  	
  	
  comments(first:	
  10)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  author	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  name,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  label	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  }	
  
	
  	
  }	
  
}
Code cartoons by Lin Clark
Code cartoons by Lin Clark
Code cartoons by Lin Clark
GRAPHQL CHANGES
THE SERVER — CLIENT
RELATIONSHIP
THE SERVER PUBLISHES ITS
POSSIBILITIES
THE CLIENT SPECIFIES ITS
REQUIREMENTS
type	
  Query	
  {	
  
	
  	
  me:	
  User,	
  
	
  	
  user:	
  (id:	
  Int!):	
  User	
  
}
{	
  
	
  	
  me	
  {	
  
	
  	
  	
  	
  name	
  
	
  	
  },	
  
	
  	
  user(id:	
  123)	
  {	
  
	
  	
  	
  	
  name	
  
	
  	
  }	
  
}
type	
  User	
  {	
  
	
  	
  name:	
  String,	
  
	
  	
  articles:	
  (first:	
  Int,	
  orderBy:	
  ArticleOrderEnum):	
  [Article]	
  
}
{	
  
	
  	
  me	
  {	
  
	
  	
  	
  	
  name	
  
	
  	
  	
  	
  articles(first:	
  10,	
  orderBy:	
  CREATION_DATE)	
  
	
  	
  },	
  
	
  	
  user(id:	
  123)	
  {	
  
	
  	
  	
  	
  name,	
  
	
  	
  	
  	
  articles(first:	
  10,	
  orderBy:	
  CREATION_DATE)	
  
	
  	
  }	
  
}
enum	
  ArticleOrderEnum	
  [	
  
	
  	
  CREATION_DATE,	
  
	
  	
  CHANGED_DATE,	
  
	
  	
  IMPORTANCE	
  
]
TYPE
INTROSPECTION
{	
  
	
  	
  __schema	
  {	
  
	
  	
  	
  	
  queryType	
  {	
  
	
  	
  	
  	
  	
  	
  name	
  
	
  	
  	
  	
  },	
  
	
  	
  	
  	
  types	
  {	
  
	
  	
  	
  	
  	
  	
  name,	
  
	
  	
  	
  	
  	
  	
  fields	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  name,	
  
	
  	
  	
  	
  	
  	
  	
  	
  type	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  kind	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  name,	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ofType	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  name	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  }	
  
	
  	
  }	
  
}
BUILDING A
GRAPHQL SERVER
GraphQL
Your application code
Database External APIs Others
type	
  User	
  {	
  
	
  	
  name(user)	
  {	
  
	
  	
  	
  	
  return	
  user.name;	
  
	
  	
  },	
  
	
  	
  articles(user,	
  arguments)	
  {	
  
	
  	
  	
  	
  return	
  storage-­‐>load(…);	
  
	
  	
  }	
  
}
There is even more …
Conditionals, Fragments, Mutations, Subscriptions, …
DEMO
QUESTIONS
‣ RFC Working Draft: https://facebook.github.io/graphql/
‣ Reference implemenetation: https://github.com/graphql/graphql-js
‣ GraphiQL: https://github.com/graphql/graphiql
‣ StarWars API Playground: http://graphql-swapi.parseapp.com/
‣ GraphQL Relay: https://facebook.github.io/relay/docs/graphql-relay-specification.html
‣ Learn GraphQL: https://learngraphql.com/
‣ …
RESOURCES
A Wiedner Hauptstraße 64 

1040 Wien
T 01 89 00 179
M office@zensations.at
W www.zensations.at

More Related Content

What's hot

Getting Started with GraphQL && PHP
Getting Started with GraphQL && PHPGetting Started with GraphQL && PHP
Getting Started with GraphQL && PHP
Andrew Rota
 
Introduction to GraphQL
Introduction to GraphQLIntroduction to GraphQL
Introduction to GraphQL
Amazon Web Services
 
Tutorial: Building a GraphQL API in PHP
Tutorial: Building a GraphQL API in PHPTutorial: Building a GraphQL API in PHP
Tutorial: Building a GraphQL API in PHP
Andrew Rota
 
Serverless Orchestration with AWS Step Functions
Serverless Orchestration with AWS Step FunctionsServerless Orchestration with AWS Step Functions
Serverless Orchestration with AWS Step Functions
Amazon Web Services
 
The battle of Protractor and Cypress - RunIT Conference 2019
The battle of Protractor and Cypress - RunIT Conference 2019The battle of Protractor and Cypress - RunIT Conference 2019
The battle of Protractor and Cypress - RunIT Conference 2019
Ludmila Nesvitiy
 
Building a GraphQL API in PHP
Building a GraphQL API in PHPBuilding a GraphQL API in PHP
Building a GraphQL API in PHP
Andrew Rota
 
Persistence Smoothie
Persistence SmoothiePersistence Smoothie
Persistence Smoothie
Flip Sasser
 
Agile data presentation 3 - cambridge
Agile data   presentation 3 - cambridgeAgile data   presentation 3 - cambridge
Agile data presentation 3 - cambridge
Romans Malinovskis
 
AngularJS
AngularJSAngularJS
AngularJS
LearningTech
 
.NET Fest 2019. Сергій Бута. Feature Toggles: Dynamic Configuration at Wirex
.NET Fest 2019. Сергій Бута. Feature Toggles: Dynamic Configuration at Wirex.NET Fest 2019. Сергій Бута. Feature Toggles: Dynamic Configuration at Wirex
.NET Fest 2019. Сергій Бута. Feature Toggles: Dynamic Configuration at Wirex
NETFest
 
From ActiveRecord to EventSourcing
From ActiveRecord to EventSourcingFrom ActiveRecord to EventSourcing
From ActiveRecord to EventSourcing
Emanuele DelBono
 
Using AI for Providing Insights and Recommendations on Activity Data Alexis R...
Using AI for Providing Insights and Recommendations on Activity Data Alexis R...Using AI for Providing Insights and Recommendations on Activity Data Alexis R...
Using AI for Providing Insights and Recommendations on Activity Data Alexis R...
Databricks
 
Delightful steps to becoming a functioning user of Step Functions
Delightful steps to becoming a functioning user of Step FunctionsDelightful steps to becoming a functioning user of Step Functions
Delightful steps to becoming a functioning user of Step Functions
Yan Cui
 
Domain Driven Design and Hexagonal Architecture with Rails
Domain Driven Design and Hexagonal Architecture with RailsDomain Driven Design and Hexagonal Architecture with Rails
Domain Driven Design and Hexagonal Architecture with Rails
Declan Whelan
 
EdgeWorkers: Enabling Autonomous, Developer Friendly Programming at the Edge
EdgeWorkers: Enabling Autonomous, Developer Friendly Programming at the EdgeEdgeWorkers: Enabling Autonomous, Developer Friendly Programming at the Edge
EdgeWorkers: Enabling Autonomous, Developer Friendly Programming at the Edge
Akamai Developers & Admins
 
iOS Reactive Cocoa Pipeline
iOS Reactive Cocoa PipelineiOS Reactive Cocoa Pipeline
iOS Reactive Cocoa Pipeline
Ivan Trifonov
 

What's hot (16)

Getting Started with GraphQL && PHP
Getting Started with GraphQL && PHPGetting Started with GraphQL && PHP
Getting Started with GraphQL && PHP
 
Introduction to GraphQL
Introduction to GraphQLIntroduction to GraphQL
Introduction to GraphQL
 
Tutorial: Building a GraphQL API in PHP
Tutorial: Building a GraphQL API in PHPTutorial: Building a GraphQL API in PHP
Tutorial: Building a GraphQL API in PHP
 
Serverless Orchestration with AWS Step Functions
Serverless Orchestration with AWS Step FunctionsServerless Orchestration with AWS Step Functions
Serverless Orchestration with AWS Step Functions
 
The battle of Protractor and Cypress - RunIT Conference 2019
The battle of Protractor and Cypress - RunIT Conference 2019The battle of Protractor and Cypress - RunIT Conference 2019
The battle of Protractor and Cypress - RunIT Conference 2019
 
Building a GraphQL API in PHP
Building a GraphQL API in PHPBuilding a GraphQL API in PHP
Building a GraphQL API in PHP
 
Persistence Smoothie
Persistence SmoothiePersistence Smoothie
Persistence Smoothie
 
Agile data presentation 3 - cambridge
Agile data   presentation 3 - cambridgeAgile data   presentation 3 - cambridge
Agile data presentation 3 - cambridge
 
AngularJS
AngularJSAngularJS
AngularJS
 
.NET Fest 2019. Сергій Бута. Feature Toggles: Dynamic Configuration at Wirex
.NET Fest 2019. Сергій Бута. Feature Toggles: Dynamic Configuration at Wirex.NET Fest 2019. Сергій Бута. Feature Toggles: Dynamic Configuration at Wirex
.NET Fest 2019. Сергій Бута. Feature Toggles: Dynamic Configuration at Wirex
 
From ActiveRecord to EventSourcing
From ActiveRecord to EventSourcingFrom ActiveRecord to EventSourcing
From ActiveRecord to EventSourcing
 
Using AI for Providing Insights and Recommendations on Activity Data Alexis R...
Using AI for Providing Insights and Recommendations on Activity Data Alexis R...Using AI for Providing Insights and Recommendations on Activity Data Alexis R...
Using AI for Providing Insights and Recommendations on Activity Data Alexis R...
 
Delightful steps to becoming a functioning user of Step Functions
Delightful steps to becoming a functioning user of Step FunctionsDelightful steps to becoming a functioning user of Step Functions
Delightful steps to becoming a functioning user of Step Functions
 
Domain Driven Design and Hexagonal Architecture with Rails
Domain Driven Design and Hexagonal Architecture with RailsDomain Driven Design and Hexagonal Architecture with Rails
Domain Driven Design and Hexagonal Architecture with Rails
 
EdgeWorkers: Enabling Autonomous, Developer Friendly Programming at the Edge
EdgeWorkers: Enabling Autonomous, Developer Friendly Programming at the EdgeEdgeWorkers: Enabling Autonomous, Developer Friendly Programming at the Edge
EdgeWorkers: Enabling Autonomous, Developer Friendly Programming at the Edge
 
iOS Reactive Cocoa Pipeline
iOS Reactive Cocoa PipelineiOS Reactive Cocoa Pipeline
iOS Reactive Cocoa Pipeline
 

Viewers also liked

Be truly responsive & responsible! Why and how accessibility matters.
Be truly responsive & responsible! Why and how accessibility matters. Be truly responsive & responsible! Why and how accessibility matters.
Be truly responsive & responsible! Why and how accessibility matters.
Zensations GmbH
 
Enterprise works overview 2013 v2
Enterprise works overview 2013 v2Enterprise works overview 2013 v2
Enterprise works overview 2013 v2
UIResearchPark
 
GraphQL IndyJS April 2016
GraphQL IndyJS April 2016GraphQL IndyJS April 2016
GraphQL IndyJS April 2016
Brad Pillow
 
Graphql
GraphqlGraphql
Relay: Seamless Syncing for React (VanJS)
Relay: Seamless Syncing for React (VanJS)Relay: Seamless Syncing for React (VanJS)
Relay: Seamless Syncing for React (VanJS)
Brooklyn Zelenka
 
GraphQL Relay Introduction
GraphQL Relay IntroductionGraphQL Relay Introduction
GraphQL Relay Introduction
Chen-Tsu Lin
 
Work with V8 memory leaks
Work with V8 memory leaksWork with V8 memory leaks
Work with V8 memory leaks
Roman Krivtsov
 
IoC with PHP
IoC with PHPIoC with PHP
IoC with PHP
Chris Weldon
 
Introduction to GraphQL at API days
Introduction to GraphQL at API daysIntroduction to GraphQL at API days
Introduction to GraphQL at API days
yann_s
 
Migration microservices to GraphQL
Migration microservices to GraphQLMigration microservices to GraphQL
Migration microservices to GraphQL
Roman Krivtsov
 
GraphQL vs REST
GraphQL vs RESTGraphQL vs REST
GraphQL vs REST
GreeceJS
 
UX als digitales Wellenreiten
UX als digitales Wellenreiten UX als digitales Wellenreiten
UX als digitales Wellenreiten
Zensations GmbH
 
Swift + GraphQL
Swift + GraphQLSwift + GraphQL
Swift + GraphQL
Sommer Panage
 
GraphQL
GraphQLGraphQL
GraphQL
Joel Corrêa
 
Design und Accessibility
Design und AccessibilityDesign und Accessibility
Design und Accessibility
Zensations GmbH
 
GraphQL Story: Intro To GraphQL
GraphQL Story: Intro To GraphQLGraphQL Story: Intro To GraphQL
GraphQL Story: Intro To GraphQL
Riza Fahmi
 
London React August - GraphQL at The Financial Times - Viktor Charypar
London React August - GraphQL at The Financial Times - Viktor CharyparLondon React August - GraphQL at The Financial Times - Viktor Charypar
London React August - GraphQL at The Financial Times - Viktor Charypar
React London Community
 
Graphql Intro (Tutorial and Example)
Graphql Intro (Tutorial and Example)Graphql Intro (Tutorial and Example)
Graphql Intro (Tutorial and Example)
Rafael Wilber Kerr
 

Viewers also liked (18)

Be truly responsive & responsible! Why and how accessibility matters.
Be truly responsive & responsible! Why and how accessibility matters. Be truly responsive & responsible! Why and how accessibility matters.
Be truly responsive & responsible! Why and how accessibility matters.
 
Enterprise works overview 2013 v2
Enterprise works overview 2013 v2Enterprise works overview 2013 v2
Enterprise works overview 2013 v2
 
GraphQL IndyJS April 2016
GraphQL IndyJS April 2016GraphQL IndyJS April 2016
GraphQL IndyJS April 2016
 
Graphql
GraphqlGraphql
Graphql
 
Relay: Seamless Syncing for React (VanJS)
Relay: Seamless Syncing for React (VanJS)Relay: Seamless Syncing for React (VanJS)
Relay: Seamless Syncing for React (VanJS)
 
GraphQL Relay Introduction
GraphQL Relay IntroductionGraphQL Relay Introduction
GraphQL Relay Introduction
 
Work with V8 memory leaks
Work with V8 memory leaksWork with V8 memory leaks
Work with V8 memory leaks
 
IoC with PHP
IoC with PHPIoC with PHP
IoC with PHP
 
Introduction to GraphQL at API days
Introduction to GraphQL at API daysIntroduction to GraphQL at API days
Introduction to GraphQL at API days
 
Migration microservices to GraphQL
Migration microservices to GraphQLMigration microservices to GraphQL
Migration microservices to GraphQL
 
GraphQL vs REST
GraphQL vs RESTGraphQL vs REST
GraphQL vs REST
 
UX als digitales Wellenreiten
UX als digitales Wellenreiten UX als digitales Wellenreiten
UX als digitales Wellenreiten
 
Swift + GraphQL
Swift + GraphQLSwift + GraphQL
Swift + GraphQL
 
GraphQL
GraphQLGraphQL
GraphQL
 
Design und Accessibility
Design und AccessibilityDesign und Accessibility
Design und Accessibility
 
GraphQL Story: Intro To GraphQL
GraphQL Story: Intro To GraphQLGraphQL Story: Intro To GraphQL
GraphQL Story: Intro To GraphQL
 
London React August - GraphQL at The Financial Times - Viktor Charypar
London React August - GraphQL at The Financial Times - Viktor CharyparLondon React August - GraphQL at The Financial Times - Viktor Charypar
London React August - GraphQL at The Financial Times - Viktor Charypar
 
Graphql Intro (Tutorial and Example)
Graphql Intro (Tutorial and Example)Graphql Intro (Tutorial and Example)
Graphql Intro (Tutorial and Example)
 

Similar to Zensations Drupal 8 GraphQL Presentation 2015

Single Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and JasmineSingle Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
Paulo Ragonha
 
Server-Side Push: Comet, Web Sockets come of age (OSCON 2013)
Server-Side Push: Comet, Web Sockets come of age (OSCON 2013)Server-Side Push: Comet, Web Sockets come of age (OSCON 2013)
Server-Side Push: Comet, Web Sockets come of age (OSCON 2013)
Brian Sam-Bodden
 
Managing GraphQL servers with AWS Fargate & Prisma Cloud
Managing GraphQL servers  with AWS Fargate & Prisma CloudManaging GraphQL servers  with AWS Fargate & Prisma Cloud
Managing GraphQL servers with AWS Fargate & Prisma Cloud
Nikolas Burk
 
Node.js: scalability tips - Azure Dev Community Vijayawada
Node.js: scalability tips - Azure Dev Community VijayawadaNode.js: scalability tips - Azure Dev Community Vijayawada
Node.js: scalability tips - Azure Dev Community Vijayawada
Luciano Mammino
 
JSON and the APInauts
JSON and the APInautsJSON and the APInauts
JSON and the APInauts
Wynn Netherland
 
Data models in Angular 1 & 2
Data models in Angular 1 & 2Data models in Angular 1 & 2
Data models in Angular 1 & 2
Adam Klein
 
GRAPHQL TO THE RES(T)CUE, ELLA SHARAKANSKI, Salto
GRAPHQL TO THE RES(T)CUE, ELLA SHARAKANSKI, SaltoGRAPHQL TO THE RES(T)CUE, ELLA SHARAKANSKI, Salto
GRAPHQL TO THE RES(T)CUE, ELLA SHARAKANSKI, Salto
DevOpsDays Tel Aviv
 
前端MVC 豆瓣说
前端MVC 豆瓣说前端MVC 豆瓣说
前端MVC 豆瓣说
Ting Lv
 
RESTful APIs: Promises & lies
RESTful APIs: Promises & liesRESTful APIs: Promises & lies
RESTful APIs: Promises & lies
Tareque Hossain
 
Massimo Artizzu - The tricks of Houdini: a magic wand for the future of CSS -...
Massimo Artizzu - The tricks of Houdini: a magic wand for the future of CSS -...Massimo Artizzu - The tricks of Houdini: a magic wand for the future of CSS -...
Massimo Artizzu - The tricks of Houdini: a magic wand for the future of CSS -...
Codemotion
 
Overview of GraphQL & Clients
Overview of GraphQL & ClientsOverview of GraphQL & Clients
Overview of GraphQL & Clients
Pokai Chang
 
Socket.IO
Socket.IOSocket.IO
Socket.IO
Arnout Kazemier
 
Accelerated Stylesheets
Accelerated StylesheetsAccelerated Stylesheets
Accelerated Stylesheets
Wynn Netherland
 
GraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learnedGraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learned
MarcinStachniuk
 
Python Code Camp for Professionals 3/4
Python Code Camp for Professionals 3/4Python Code Camp for Professionals 3/4
Python Code Camp for Professionals 3/4
DEVCON
 
JS.Chi CSS Animations
JS.Chi CSS AnimationsJS.Chi CSS Animations
JS.Chi CSS Animations
Justin Meyer
 
Tomer Elmalem - GraphQL APIs: REST in Peace - Codemotion Milan 2017
Tomer Elmalem - GraphQL APIs: REST in Peace - Codemotion Milan 2017Tomer Elmalem - GraphQL APIs: REST in Peace - Codemotion Milan 2017
Tomer Elmalem - GraphQL APIs: REST in Peace - Codemotion Milan 2017
Codemotion
 
SDKs, the good the bad the ugly - Japan
SDKs, the good the bad the ugly - JapanSDKs, the good the bad the ugly - Japan
SDKs, the good the bad the ugly - Japan
tristansokol
 
Leveraging the Power of Graph Databases in PHP
Leveraging the Power of Graph Databases in PHPLeveraging the Power of Graph Databases in PHP
Leveraging the Power of Graph Databases in PHP
Jeremy Kendall
 
Drupal Mobile
Drupal MobileDrupal Mobile
Drupal Mobile
Ruben Teijeiro
 

Similar to Zensations Drupal 8 GraphQL Presentation 2015 (20)

Single Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and JasmineSingle Page Web Applications with CoffeeScript, Backbone and Jasmine
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
 
Server-Side Push: Comet, Web Sockets come of age (OSCON 2013)
Server-Side Push: Comet, Web Sockets come of age (OSCON 2013)Server-Side Push: Comet, Web Sockets come of age (OSCON 2013)
Server-Side Push: Comet, Web Sockets come of age (OSCON 2013)
 
Managing GraphQL servers with AWS Fargate & Prisma Cloud
Managing GraphQL servers  with AWS Fargate & Prisma CloudManaging GraphQL servers  with AWS Fargate & Prisma Cloud
Managing GraphQL servers with AWS Fargate & Prisma Cloud
 
Node.js: scalability tips - Azure Dev Community Vijayawada
Node.js: scalability tips - Azure Dev Community VijayawadaNode.js: scalability tips - Azure Dev Community Vijayawada
Node.js: scalability tips - Azure Dev Community Vijayawada
 
JSON and the APInauts
JSON and the APInautsJSON and the APInauts
JSON and the APInauts
 
Data models in Angular 1 & 2
Data models in Angular 1 & 2Data models in Angular 1 & 2
Data models in Angular 1 & 2
 
GRAPHQL TO THE RES(T)CUE, ELLA SHARAKANSKI, Salto
GRAPHQL TO THE RES(T)CUE, ELLA SHARAKANSKI, SaltoGRAPHQL TO THE RES(T)CUE, ELLA SHARAKANSKI, Salto
GRAPHQL TO THE RES(T)CUE, ELLA SHARAKANSKI, Salto
 
前端MVC 豆瓣说
前端MVC 豆瓣说前端MVC 豆瓣说
前端MVC 豆瓣说
 
RESTful APIs: Promises & lies
RESTful APIs: Promises & liesRESTful APIs: Promises & lies
RESTful APIs: Promises & lies
 
Massimo Artizzu - The tricks of Houdini: a magic wand for the future of CSS -...
Massimo Artizzu - The tricks of Houdini: a magic wand for the future of CSS -...Massimo Artizzu - The tricks of Houdini: a magic wand for the future of CSS -...
Massimo Artizzu - The tricks of Houdini: a magic wand for the future of CSS -...
 
Overview of GraphQL & Clients
Overview of GraphQL & ClientsOverview of GraphQL & Clients
Overview of GraphQL & Clients
 
Socket.IO
Socket.IOSocket.IO
Socket.IO
 
Accelerated Stylesheets
Accelerated StylesheetsAccelerated Stylesheets
Accelerated Stylesheets
 
GraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learnedGraphQL - when REST API is not enough - lessons learned
GraphQL - when REST API is not enough - lessons learned
 
Python Code Camp for Professionals 3/4
Python Code Camp for Professionals 3/4Python Code Camp for Professionals 3/4
Python Code Camp for Professionals 3/4
 
JS.Chi CSS Animations
JS.Chi CSS AnimationsJS.Chi CSS Animations
JS.Chi CSS Animations
 
Tomer Elmalem - GraphQL APIs: REST in Peace - Codemotion Milan 2017
Tomer Elmalem - GraphQL APIs: REST in Peace - Codemotion Milan 2017Tomer Elmalem - GraphQL APIs: REST in Peace - Codemotion Milan 2017
Tomer Elmalem - GraphQL APIs: REST in Peace - Codemotion Milan 2017
 
SDKs, the good the bad the ugly - Japan
SDKs, the good the bad the ugly - JapanSDKs, the good the bad the ugly - Japan
SDKs, the good the bad the ugly - Japan
 
Leveraging the Power of Graph Databases in PHP
Leveraging the Power of Graph Databases in PHPLeveraging the Power of Graph Databases in PHP
Leveraging the Power of Graph Databases in PHP
 
Drupal Mobile
Drupal MobileDrupal Mobile
Drupal Mobile
 

More from Zensations GmbH

2018: Performance zählt
2018: Performance zählt2018: Performance zählt
2018: Performance zählt
Zensations GmbH
 
Beyond accessibility & inclusion
Beyond accessibility & inclusionBeyond accessibility & inclusion
Beyond accessibility & inclusion
Zensations GmbH
 
ZS Drupal meetup - Drupal 8 CHALLENGES AND HANDS ON
ZS Drupal meetup - Drupal 8 CHALLENGES AND HANDS ONZS Drupal meetup - Drupal 8 CHALLENGES AND HANDS ON
ZS Drupal meetup - Drupal 8 CHALLENGES AND HANDS ON
Zensations GmbH
 
Neue smarte Medien für hörbeeinträchtigte Menschen / Workshop v. Jo Spelbrink...
Neue smarte Medien für hörbeeinträchtigte Menschen / Workshop v. Jo Spelbrink...Neue smarte Medien für hörbeeinträchtigte Menschen / Workshop v. Jo Spelbrink...
Neue smarte Medien für hörbeeinträchtigte Menschen / Workshop v. Jo Spelbrink...
Zensations GmbH
 
Markdown vs. WYSIWYG - Stop using the web like a word document
Markdown vs. WYSIWYG - Stop using the web like a word document Markdown vs. WYSIWYG - Stop using the web like a word document
Markdown vs. WYSIWYG - Stop using the web like a word document
Zensations GmbH
 
Drupal roadshow klagenfurt_betterbgood
Drupal roadshow klagenfurt_betterbgoodDrupal roadshow klagenfurt_betterbgood
Drupal roadshow klagenfurt_betterbgood
Zensations GmbH
 

More from Zensations GmbH (6)

2018: Performance zählt
2018: Performance zählt2018: Performance zählt
2018: Performance zählt
 
Beyond accessibility & inclusion
Beyond accessibility & inclusionBeyond accessibility & inclusion
Beyond accessibility & inclusion
 
ZS Drupal meetup - Drupal 8 CHALLENGES AND HANDS ON
ZS Drupal meetup - Drupal 8 CHALLENGES AND HANDS ONZS Drupal meetup - Drupal 8 CHALLENGES AND HANDS ON
ZS Drupal meetup - Drupal 8 CHALLENGES AND HANDS ON
 
Neue smarte Medien für hörbeeinträchtigte Menschen / Workshop v. Jo Spelbrink...
Neue smarte Medien für hörbeeinträchtigte Menschen / Workshop v. Jo Spelbrink...Neue smarte Medien für hörbeeinträchtigte Menschen / Workshop v. Jo Spelbrink...
Neue smarte Medien für hörbeeinträchtigte Menschen / Workshop v. Jo Spelbrink...
 
Markdown vs. WYSIWYG - Stop using the web like a word document
Markdown vs. WYSIWYG - Stop using the web like a word document Markdown vs. WYSIWYG - Stop using the web like a word document
Markdown vs. WYSIWYG - Stop using the web like a word document
 
Drupal roadshow klagenfurt_betterbgood
Drupal roadshow klagenfurt_betterbgoodDrupal roadshow klagenfurt_betterbgood
Drupal roadshow klagenfurt_betterbgood
 

Recently uploaded

Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
Safe Software
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
Pixlogix Infotech
 
Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
Zilliz
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
shyamraj55
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Malak Abu Hammad
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
Kari Kakkonen
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
IndexBug
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
Neo4j
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
Zilliz
 

Recently uploaded (20)

Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
Essentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FMEEssentials of Automations: The Art of Triggers and Actions in FME
Essentials of Automations: The Art of Triggers and Actions in FME
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
 
Infrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI modelsInfrastructure Challenges in Scaling RAG with Custom AI models
Infrastructure Challenges in Scaling RAG with Custom AI models
 
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with SlackLet's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slack
 
HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 
Climate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing DaysClimate Impact of Software Testing at Nordic Testing Days
Climate Impact of Software Testing at Nordic Testing Days
 
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial IntelligenceAI 101: An Introduction to the Basics and Impact of Artificial Intelligence
AI 101: An Introduction to the Basics and Impact of Artificial Intelligence
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
Programming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup SlidesProgramming Foundation Models with DSPy - Meetup Slides
Programming Foundation Models with DSPy - Meetup Slides
 

Zensations Drupal 8 GraphQL Presentation 2015

  • 2.
  • 4. ‣ Requires multiple round trips for fetching complex object graphs ‣ Over fetching — As the model grows, so does the payload ‣ High potential for breaking API changes ‣ Structure of the response dictated by the server ‣ Potentially a huge amount of different endpoints and thus complexity ‣ No formal specification resulting in various other shortcomings PROBLEMS WITH REST
  • 5. DEAR REST, I STILL LOVE YOU !
  • 6. Multiple round trips When fetching complex, relational data structures: In order to descent further into the object graph, multiple round trips to the server are required.
  • 7.
  • 8. Over fetching Unless specifically designed for a given purpose, you often have to deal with needlessly large and bloated responses.
  • 9.
  • 10. Compatibility and versioning By changing your model you are very likely to break your APIs. API versioning can mitigate that potential damage at the cost of exponentially increasing complexity.
  • 11. Endpoints galore Attempting to circumvent the aforementioned problems often leads to a huge amount of bespoke/ ad-hoc endpoints. This, in turn, inevitably increases the complexity of your application.
  • 12. Your API is usually composed of a spectrum of different interpretations of REST
  • 13. No formal specification No prescribed pattern for deprecation. No standardized introspection functionality. …
  • 14. REST IS WHAT YOU MAKE IT
  • 15. „This is not not how we as product developers think about data. Product developers think of data in terms of graphs.“ Nick Schrock
  • 16. Code cartoons by Lin Clark
  • 17.
  • 19. What is GraphQL? GraphQL is a query language designed to build client applications by providing an intuitive and flexible syntax and system for describing their data requirements and interactions.
  • 20. IT IS NOT A QUERY LANGUAGE FOR A GRAPH DATABASE
  • 21. GRAPHQL IS AGNOSTIC TO YOUR STORAGE LAYER
  • 22. {      me  {          name      }   }
  • 23. {      'me':  {          'name':  'Sebastian  Siemssen'      }   } {      me  {          name      }   }
  • 24. {      user(id:  123)  {          name      }   }
  • 25. {      user(id:  123)  {          name      }   } {      'user':  {          'name':  'Sebastian  Siemssen'      }   }
  • 26. {      'me':  {          'name':  'Sebastian  Siemssen',          'company':  {              'name':  'Zensations',              'website':  'http://zensations.at'          }      }   } {      me  {          name,       company  {              name,              website          }      }   }
  • 27. {      'me':  {          'name':  'Sebastian  Siemssen',          'profilePic':  {              'width':  100,              'height':  200,              'url':  'http://...'          }      }   } {      me  {          name,       profilePic(size:  100)  {              width,              height,              url          }      }   }
  • 28. {      'me':  {          'name':  'Sebastian  Siemssen',          'small':  {              'width':  100,              'height':  200,              'url':  'http://...'          },          'large':  {              'width':  300,              'height':  600,              'url':  'http://...'          }      }   } {      me  {          name,       small:profilePic(size:  100)  {              width,              height,              url          },       large:profilePic(size:  300)  {              width,              height,              url          }      }   }
  • 29. {      'me':  {          'name':  'Sebastian  Siemssen',          'articles':  [         {                  'title':  'GraphQL  rocks'              },         {                  'title':  'Ruben  sucks'              },         {                  'title':  '...'              },         {                  'title':  '...'              },          ]      }   } {      me  {          name,       articles  {              title          }      }   }
  • 30. {      'me':  {          'name':  'Sebastian  Siemssen',          'articles':  [              {                  'title':  'GraphQL  rocks',                  'comments':  [                      {                          'author':  {                              'name':  'Ruben  Teijeiro',                              'label':  'This  is  sorcercy!'                          }                      },                      {                          'author':  {                              'name':  'Dries  Buytaert',                              'label':  'We  need  that  in  core!'                          }                      }                  ]              }          ]      }   } {      me  {          name,       articles  {              title,              comments(first:  10)  {                  author  {                      name,                      label                  }              }          }      }   }
  • 31. Code cartoons by Lin Clark
  • 32. Code cartoons by Lin Clark
  • 33. Code cartoons by Lin Clark
  • 34. GRAPHQL CHANGES THE SERVER — CLIENT RELATIONSHIP
  • 35. THE SERVER PUBLISHES ITS POSSIBILITIES THE CLIENT SPECIFIES ITS REQUIREMENTS
  • 36. type  Query  {      me:  User,      user:  (id:  Int!):  User   } {      me  {          name      },      user(id:  123)  {          name      }   }
  • 37. type  User  {      name:  String,      articles:  (first:  Int,  orderBy:  ArticleOrderEnum):  [Article]   } {      me  {          name          articles(first:  10,  orderBy:  CREATION_DATE)      },      user(id:  123)  {          name,          articles(first:  10,  orderBy:  CREATION_DATE)      }   } enum  ArticleOrderEnum  [      CREATION_DATE,      CHANGED_DATE,      IMPORTANCE   ]
  • 39. {      __schema  {          queryType  {              name          },          types  {              name,              fields  {                  name,                  type  {                      kind                      name,                      ofType  {                          name                      }                  }              }          }      }   }
  • 42. type  User  {      name(user)  {          return  user.name;      },      articles(user,  arguments)  {          return  storage-­‐>load(…);      }   }
  • 43. There is even more … Conditionals, Fragments, Mutations, Subscriptions, …
  • 44. DEMO
  • 46. ‣ RFC Working Draft: https://facebook.github.io/graphql/ ‣ Reference implemenetation: https://github.com/graphql/graphql-js ‣ GraphiQL: https://github.com/graphql/graphiql ‣ StarWars API Playground: http://graphql-swapi.parseapp.com/ ‣ GraphQL Relay: https://facebook.github.io/relay/docs/graphql-relay-specification.html ‣ Learn GraphQL: https://learngraphql.com/ ‣ … RESOURCES
  • 47. A Wiedner Hauptstraße 64 
 1040 Wien T 01 89 00 179 M office@zensations.at W www.zensations.at