DRUPAL GRAPHQL
Sebastian Siemssen (@thefubhy)
♥
http://swapi.co
GET api/people/1
{
"name": "Luke Skywalker",
"height": "1.72 m",
"mass": "77 Kg",
"hair_color": "Blond",
"skin_color": "Caucasian",
"eye_color": "Blue",
"birth_year": "19 BBY",
"gender": "Male",
"homeworld": "http://swapi.co/api/planets/1/",
"films": [
"http://swapi.co/api/films/1/",
"http://swapi.co/api/films/2/",
"http://swapi.co/api/films/3/"
],
"species": [
"http://swapi.co/api/species/1/"
],
"vehicles": [
"http://swapi.co/api/vehicles/14/",
"http://swapi.co/api/vehicles/30/"
],
"starships": [
"http://swapi.co/api/starships/12/",
"http://swapi.co/api/starships/22/"
],
"created": "2014-12-09T13:50:51.644000Z",
"edited": "2014-12-10T13:52:43.172000Z",
"url": "http://swapi.co/api/people/1/"
}
{
"title": "A New Hope",
"episode_id": 4,
"opening_crawl": "It is a period of civil war.\r\nRebel spaceships, striking\r\nfrom a hidden base, have won\r\ntheir first victory against\r\nthe evil Galactic Empire.\r\n\r\nDuring the battle, Rebel\r\nspies managed to steal secret\r\nplans to the Empire's\r\nultimate weapon, the DEATH\r\nSTAR, an armored space\r\nstation with enough power\r\nto destroy an entire planet.\r\n\r\nPursued by the Empire's\r\nsinister agents, Princess\r\nLeia races home aboard her\r\nstarship, custodian of the\r\nstolen plans that can save her\r\npeople and restore\r\nfreedom to the galaxy....",
"director": "George Lucas",
"producer": "Gary Kurtz, Rick McCallum",
"release_date": "1977-05-25",
"characters": [
"https://swapi.co/api/people/1/",
"https://swapi.co/api/people/2/",
"https://swapi.co/api/people/3/",
"https://swapi.co/api/people/4/",
"https://swapi.co/api/people/5/",
"https://swapi.co/api/people/6/",
"https://swapi.co/api/people/7/",
"https://swapi.co/api/people/8/",
"https://swapi.co/api/people/9/",
"https://swapi.co/api/people/10/",
"https://swapi.co/api/people/12/",
"https://swapi.co/api/people/13/",
"https://swapi.co/api/people/14/",
"https://swapi.co/api/people/15/",
"https://swapi.co/api/people/16/",
"https://swapi.co/api/people/18/",
"https://swapi.co/api/people/19/",
"https://swapi.co/api/people/81/"
],
"planets": [
"https://swapi.co/api/planets/2/",
"https://swapi.co/api/planets/3/",
"https://swapi.co/api/planets/1/"
],
"starships": [
"https://swapi.co/api/starships/2/",
"https://swapi.co/api/starships/3/",
"https://swapi.co/api/starships/5/",
"https://swapi.co/api/starships/9/",
"https://swapi.co/api/starships/10/",
"https://swapi.co/api/starships/11/",
"https://swapi.co/api/starships/12/",
"https://swapi.co/api/starships/13/"
],
"vehicles": [
"https://swapi.co/api/vehicles/4/",
"https://swapi.co/api/vehicles/6/",
"https://swapi.co/api/vehicles/7/",
"https://swapi.co/api/vehicles/8/"
],
"species": [
"https://swapi.co/api/species/5/",
"https://swapi.co/api/species/3/",
"https://swapi.co/api/species/2/",
"https://swapi.co/api/species/1/",
"https://swapi.co/api/species/4/"
],
"created": "2014-12-10T14:23:31.880000Z",
"edited": "2015-04-11T09:46:52.774897Z",
"url": "https://swapi.co/api/films/1/"
}
{
"title": "The Empire Strikes Back",
"episode_id": 5,
"opening_crawl": "It is a dark time for the\r\nRebellion. Although the Death\r\nStar has been destroyed,\r\nImperial troops have driven the\r\nRebel forces from their hidden\r\nbase and pursued them across\r\nthe galaxy.\r\n\r\nEvading the dreaded Imperial\r\nStarfleet, a group of freedom\r\nfighters led by Luke Skywalker\r\nhas established a new secret\r\nbase on the remote ice world\r\nof Hoth.\r\n\r\nThe evil lord Darth Vader,\r\nobsessed with finding young\r\nSkywalker, has dispatched\r\nthousands of remote probes into\r\nthe far reaches of space....",
"director": "Irvin Kershner",
"producer": "Gary Kurtz, Rick McCallum",
"release_date": "1980-05-17",
"characters": [
"https://swapi.co/api/people/1/",
"https://swapi.co/api/people/2/",
"https://swapi.co/api/people/3/",
"https://swapi.co/api/people/4/",
"https://swapi.co/api/people/5/",
"https://swapi.co/api/people/10/",
"https://swapi.co/api/people/13/",
"https://swapi.co/api/people/14/",
"https://swapi.co/api/people/18/",
"https://swapi.co/api/people/20/",
"https://swapi.co/api/people/21/",
"https://swapi.co/api/people/22/",
"https://swapi.co/api/people/23/",
"https://swapi.co/api/people/24/",
"https://swapi.co/api/people/25/",
"https://swapi.co/api/people/26/"
],
"planets": [
"https://swapi.co/api/planets/4/",
"https://swapi.co/api/planets/5/",
"https://swapi.co/api/planets/6/",
"https://swapi.co/api/planets/27/"
],
"starships": [
"https://swapi.co/api/starships/15/",
"https://swapi.co/api/starships/10/",
"https://swapi.co/api/starships/11/",
"https://swapi.co/api/starships/12/",
"https://swapi.co/api/starships/21/",
"https://swapi.co/api/starships/22/",
"https://swapi.co/api/starships/23/",
"https://swapi.co/api/starships/3/",
"https://swapi.co/api/starships/17/"
],
"vehicles": [
"https://swapi.co/api/vehicles/8/",
"https://swapi.co/api/vehicles/14/",
"https://swapi.co/api/vehicles/16/",
"https://swapi.co/api/vehicles/18/",
"https://swapi.co/api/vehicles/19/",
"https://swapi.co/api/vehicles/20/"
],
"species": [
"https://swapi.co/api/species/6/",
"https://swapi.co/api/species/7/",
"https://swapi.co/api/species/3/",
"https://swapi.co/api/species/2/",
"https://swapi.co/api/species/1/"
],
"created": "2014-12-12T11:26:24.656000Z",
"edited": "2017-04-19T10:57:29.544256Z",
"url": "https://swapi.co/api/films/2/"
}
{
"title": "Return of the Jedi",
"episode_id": 6,
"opening_crawl": "Luke Skywalker has returned to\r\nhis home planet of Tatooine in\r\nan attempt to rescue his\r\nfriend Han Solo from the\r\nclutches of the vile gangster\r\nJabba the Hutt.\r\n\r\nLittle does Luke know that the\r\nGALACTIC EMPIRE has secretly\r\nbegun construction on a new\r\narmored space station even\r\nmore powerful than the first\r\ndreaded Death Star.\r\n\r\nWhen completed, this ultimate\r\nweapon will spell certain doom\r\nfor the small band of rebels\r\nstruggling to restore freedom\r\nto the galaxy...",
"director": "Richard Marquand",
"producer": "Howard G. Kazanjian, George Lucas, Rick McCallum",
"release_date": "1983-05-25",
"characters": [
"https://swapi.co/api/people/1/",
"https://swapi.co/api/people/2/",
"https://swapi.co/api/people/3/",
"https://swapi.co/api/people/4/",
"https://swapi.co/api/people/5/",
"https://swapi.co/api/people/10/",
"https://swapi.co/api/people/13/",
"https://swapi.co/api/people/14/",
"https://swapi.co/api/people/16/",
"https://swapi.co/api/people/18/",
"https://swapi.co/api/people/20/",
"https://swapi.co/api/people/21/",
"https://swapi.co/api/people/22/",
"https://swapi.co/api/people/25/",
"https://swapi.co/api/people/27/",
"https://swapi.co/api/people/28/",
"https://swapi.co/api/people/29/",
"https://swapi.co/api/people/30/",
"https://swapi.co/api/people/31/",
"https://swapi.co/api/people/45/"
],
"planets": [
"https://swapi.co/api/planets/5/",
"https://swapi.co/api/planets/7/",
"https://swapi.co/api/planets/8/",
"https://swapi.co/api/planets/9/",
"https://swapi.co/api/planets/1/"
],
"starships": [
"https://swapi.co/api/starships/15/",
"https://swapi.co/api/starships/10/",
"https://swapi.co/api/starships/11/",
"https://swapi.co/api/starships/12/",
"https://swapi.co/api/starships/22/",
"https://swapi.co/api/starships/23/",
"https://swapi.co/api/starships/27/",
"https://swapi.co/api/starships/28/",
"https://swapi.co/api/starships/29/",
"https://swapi.co/api/starships/3/",
"https://swapi.co/api/starships/17/",
"https://swapi.co/api/starships/2/"
],
"vehicles": [
"https://swapi.co/api/vehicles/8/",
"https://swapi.co/api/vehicles/16/",
"https://swapi.co/api/vehicles/18/",
"https://swapi.co/api/vehicles/19/",
"https://swapi.co/api/vehicles/24/",
"https://swapi.co/api/vehicles/25/",
"https://swapi.co/api/vehicles/26/",
"https://swapi.co/api/vehicles/30/"
],
"species": [
"https://swapi.co/api/species/1/",
"https://swapi.co/api/species/2/",
"https://swapi.co/api/species/3/",
"https://swapi.co/api/species/5/",
"https://swapi.co/api/species/6/",
"https://swapi.co/api/species/8/",
"https://swapi.co/api/species/9/",
"https://swapi.co/api/species/10/",
"https://swapi.co/api/species/15/"
],
"created": "2014-12-18T10:39:33.255000Z",
"edited": "2015-04-11T09:46:05.220365Z",
"url": "https://swapi.co/api/films/3/"
}
{
"title": "The Phantom Menace",
"episode_id": 1,
"opening_crawl": "Turmoil has engulfed the\r\nGalactic Republic. The taxation\r\nof trade routes to outlying star\r\nsystems is in dispute.\r\n\r\nHoping to resolve the matter\r\nwith a blockade of deadly\r\nbattleships, the greedy Trade\r\nFederation has stopped all\r\nshipping to the small planet\r\nof Naboo.\r\n\r\nWhile the Congress of the\r\nRepublic endlessly debates\r\nthis alarming chain of events,\r\nthe Supreme Chancellor has\r\nsecretly dispatched two Jedi\r\nKnights, the guardians of\r\npeace and justice in the\r\ngalaxy, to settle the conflict....",
"director": "George Lucas",
"producer": "Rick McCallum",
"release_date": "1999-05-19",
"characters": [
"https://swapi.co/api/people/2/",
"https://swapi.co/api/people/3/",
"https://swapi.co/api/people/10/",
"https://swapi.co/api/people/11/",
"https://swapi.co/api/people/16/",
"https://swapi.co/api/people/20/",
"https://swapi.co/api/people/21/",
"https://swapi.co/api/people/32/",
"https://swapi.co/api/people/33/",
"https://swapi.co/api/people/34/",
"https://swapi.co/api/people/36/",
"https://swapi.co/api/people/37/",
"https://swapi.co/api/people/38/",
"https://swapi.co/api/people/39/",
"https://swapi.co/api/people/40/",
"https://swapi.co/api/people/41/",
"https://swapi.co/api/people/42/",
"https://swapi.co/api/people/43/",
"https://swapi.co/api/people/44/",
"https://swapi.co/api/people/46/",
"https://swapi.co/api/people/48/",
"https://swapi.co/api/people/49/",
"https://swapi.co/api/people/50/",
"https://swapi.co/api/people/51/",
"https://swapi.co/api/people/52/",
"https://swapi.co/api/people/53/",
"https://swapi.co/api/people/54/",
"https://swapi.co/api/people/55/",
"https://swapi.co/api/people/56/",
"https://swapi.co/api/people/57/",
"https://swapi.co/api/people/58/",
"https://swapi.co/api/people/59/",
"https://swapi.co/api/people/47/",
"https://swapi.co/api/people/35/"
],
"planets": [
"https://swapi.co/api/planets/8/",
"https://swapi.co/api/planets/9/",
"https://swapi.co/api/planets/1/"
],
"starships": [
"https://swapi.co/api/starships/40/",
"https://swapi.co/api/starships/41/",
"https://swapi.co/api/starships/31/",
"https://swapi.co/api/starships/32/",
"https://swapi.co/api/starships/39/"
],
"vehicles": [
"https://swapi.co/api/vehicles/33/",
"https://swapi.co/api/vehicles/34/",
"https://swapi.co/api/vehicles/35/",
"https://swapi.co/api/vehicles/36/",
"https://swapi.co/api/vehicles/37/",
"https://swapi.co/api/vehicles/38/",
"https://swapi.co/api/vehicles/42/"
],
"species": [
"https://swapi.co/api/species/1/",
"https://swapi.co/api/species/2/",
"https://swapi.co/api/species/6/",
"https://swapi.co/api/species/11/",
"https://swapi.co/api/species/12/",
"https://swapi.co/api/species/13/",
"https://swapi.co/api/species/14/",
"https://swapi.co/api/species/15/",
"https://swapi.co/api/species/16/",
"https://swapi.co/api/species/17/",
"https://swapi.co/api/species/18/",
"https://swapi.co/api/species/19/",
"https://swapi.co/api/species/20/",
"https://swapi.co/api/species/21/",
"https://swapi.co/api/species/22/",
"https://swapi.co/api/species/23/",
"https://swapi.co/api/species/24/",
"https://swapi.co/api/species/25/",
"https://swapi.co/api/species/26/",
"https://swapi.co/api/species/27/"
],
"created": "2014-12-19T16:52:55.740000Z",
"edited": "2015-04-11T09:45:18.689301Z",
"url": "https://swapi.co/api/films/4/"
}
GET api/films/1
GET api/films/2
GET api/films/3
GET api/persons-with-films/1
GET api/persons/1?include-films
GET api/persons/1?include=films,...
App #1
App #2
App #3
App #4
http://graphql.org/swapi-graphql
https://www.amazeelabs.com/en/blog/graphql-introduction
APPLICATION LAYER
DATA QUERYING LANGUAGE
BACKED BY A
SCHEMA
BASED ON A
TYPE SYSTEM
STRONGLY TYPED
THEREFORE INTROSPECTIVE
ARBITRARY CODE
THEREFORE AGNOSTIC
GRAPHQL PARSER
APPLICATION CODE
DABATASE
INTERNAL API
REMOTE API
SCHEMA DEFINITION
?!
Evolving the server–client relationship
Server publishes possibilities
Client specifies concrete data requirements
https://facebook.github.io/graphql
https://github.com/graphql/graphql-js
https://github.com/drupal-graphql
PLUGGABLE ARCHITECTURE THROUGHOUT
DEMO TIME
templates/node.html.twig
QUESTIONS
CACHING
SECURITY
PERFORMANCE
PERFORMANCE
CUSTOMIZATION
The wonders of GraphQL and Drupal #2
By Sebastian Siemssen
The wonders of GraphQL and Drupal #2
- 2,386