SlideShare ist ein Scribd-Unternehmen logo
1 von 47
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

Getting Started with GraphQL && PHP
Getting Started with GraphQL && PHPGetting Started with GraphQL && PHP
Getting Started with GraphQL && PHPAndrew Rota
 
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 PHPAndrew Rota
 
Serverless Orchestration with AWS Step Functions
Serverless Orchestration with AWS Step FunctionsServerless Orchestration with AWS Step Functions
Serverless Orchestration with AWS Step FunctionsAmazon 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 2019Ludmila Nesvitiy
 
Building a GraphQL API in PHP
Building a GraphQL API in PHPBuilding a GraphQL API in PHP
Building a GraphQL API in PHPAndrew Rota
 
Persistence Smoothie
Persistence SmoothiePersistence Smoothie
Persistence SmoothieFlip Sasser
 
Agile data presentation 3 - cambridge
Agile data   presentation 3 - cambridgeAgile data   presentation 3 - cambridge
Agile data presentation 3 - cambridgeRomans Malinovskis
 
.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 WirexNETFest
 
From ActiveRecord to EventSourcing
From ActiveRecord to EventSourcingFrom ActiveRecord to EventSourcing
From ActiveRecord to EventSourcingEmanuele 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 FunctionsYan 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 RailsDeclan 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 EdgeAkamai Developers & Admins
 
iOS Reactive Cocoa Pipeline
iOS Reactive Cocoa PipelineiOS Reactive Cocoa Pipeline
iOS Reactive Cocoa PipelineIvan Trifonov
 

Was ist angesagt? (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
 

Andere mochten auch

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 v2UIResearchPark
 
GraphQL IndyJS April 2016
GraphQL IndyJS April 2016GraphQL IndyJS April 2016
GraphQL IndyJS April 2016Brad Pillow
 
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 IntroductionChen-Tsu Lin
 
Work with V8 memory leaks
Work with V8 memory leaksWork with V8 memory leaks
Work with V8 memory leaksRoman Krivtsov
 
Introduction to GraphQL at API days
Introduction to GraphQL at API daysIntroduction to GraphQL at API days
Introduction to GraphQL at API daysyann_s
 
Migration microservices to GraphQL
Migration microservices to GraphQLMigration microservices to GraphQL
Migration microservices to GraphQLRoman Krivtsov
 
GraphQL vs REST
GraphQL vs RESTGraphQL vs REST
GraphQL vs RESTGreeceJS
 
UX als digitales Wellenreiten
UX als digitales Wellenreiten UX als digitales Wellenreiten
UX als digitales Wellenreiten Zensations GmbH
 
Design und Accessibility
Design und AccessibilityDesign und Accessibility
Design und AccessibilityZensations GmbH
 
GraphQL Story: Intro To GraphQL
GraphQL Story: Intro To GraphQLGraphQL Story: Intro To GraphQL
GraphQL Story: Intro To GraphQLRiza 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 CharyparReact 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
 

Andere mochten auch (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)
 

Ähnlich wie 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 JasminePaulo 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 CloudNikolas 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 VijayawadaLuciano Mammino
 
Data models in Angular 1 & 2
Data models in Angular 1 & 2Data models in Angular 1 & 2
Data models in Angular 1 & 2Adam 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, SaltoDevOpsDays Tel Aviv
 
前端MVC 豆瓣说
前端MVC 豆瓣说前端MVC 豆瓣说
前端MVC 豆瓣说Ting Lv
 
RESTful APIs: Promises & lies
RESTful APIs: Promises & liesRESTful APIs: Promises & lies
RESTful APIs: Promises & liesTareque 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 & ClientsPokai Chang
 
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 learnedMarcinStachniuk
 
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/4DEVCON
 
JS.Chi CSS Animations
JS.Chi CSS AnimationsJS.Chi CSS Animations
JS.Chi CSS AnimationsJustin 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 2017Codemotion
 
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 - Japantristansokol
 
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 PHPJeremy Kendall
 

Ähnlich wie 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
 

Mehr von Zensations GmbH

2018: Performance zählt
2018: Performance zählt2018: Performance zählt
2018: Performance zähltZensations GmbH
 
Beyond accessibility & inclusion
Beyond accessibility & inclusionBeyond accessibility & inclusion
Beyond accessibility & inclusionZensations 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 ONZensations 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_betterbgoodZensations GmbH
 

Mehr von 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
 

Kürzlich hochgeladen

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobeapidays
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...apidays
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamUiPathCommunity
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Zilliz
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 

Kürzlich hochgeladen (20)

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 

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