Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core
-
Upload
acquia -
Category
Technology
-
view
1.392 -
download
0
Transcript of Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core
![Page 1: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/1.jpg)
Web APIs in Drupal 8
Larry Garfield, Senior Architect, Palantir.netKyle Browning, Technical Consultant, Acquia
![Page 2: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/2.jpg)
Larry GarfieldSenior Architect, Palantir.netDrupal Web Services Lead
Who are we?
![Page 3: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/3.jpg)
Kyle BrowningTechnical Consultant, AcquiaServices, and Drupal iOS SDK maintainer
Who are we?
![Page 4: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/4.jpg)
What are Web Services(tm)?
![Page 5: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/5.jpg)
The Internet (TCP/IP)
The Web (HTTP)
Web Services (non-HTML)
REST (REpresentational State Transfer)
![Page 6: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/6.jpg)
Collection of ResourcesResource identified by URIResource represented in a formatManipulate through Verbs/MethodsKnown hyperlinks to other Resources
REST (Hypermedia)
![Page 7: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/7.jpg)
So what's wrong with Drupal 7?
![Page 8: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/8.jpg)
Drupal 7function example_menu() { $items['my/page'] = array( 'title' => 'My page', 'page callback' => 'my_page_function', 'access arguments' => array('access content'), ); return $items;}
Only map on path
Very basic access control
![Page 9: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/9.jpg)
Drupal 7function example_page_delivery_callback_alter(&$delivery_callback) { if (...) { $delivery_callback = 'example_deliver_page'; }}
Happens after the page callback, so mostly useless.
![Page 10: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/10.jpg)
Drupal 7→And oh yeah, globals
▪$_GET▪drupal_add_http_header()▪print
![Page 11: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/11.jpg)
Drupal 7
Everything other than a full HTML page is an after-thought.
![Page 12: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/12.jpg)
So what's better in Drupal 8?
![Page 13: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/13.jpg)
Drupal 8example.route: path: /my/page defaults: _controller: '\Drupal\example\Controller\ExampleController::page' _title: 'Example page' requirements: _permission: 'access_examples' _day: 'Tuesday' _method: 'GET'
Multiple access checks
Map on path, method, domain, etc.
![Page 14: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/14.jpg)
Drupal 8
Arbitrary custom logic goes here
![Page 15: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/15.jpg)
Drupal 8Theming and page layout happen here
![Page 16: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/16.jpg)
Drupal 8
Everything's an HTTP Response. Sometimes that's a page.
![Page 17: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/17.jpg)
Drupal 8→You can serve any type of response to a request→Wire directly to the routing system.→No duplicating routing anymore!
![Page 18: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/18.jpg)
Drupal 8 - Serialization module→Standard serialization/deserialization pipeline→Built on Symfony Serializer component
$json = $this->serializer->serialize($entity, 'json');
$xml = $this->serializer->serialize($entity, 'xml');
$entity = $this->serializer->deserialize($json, 'Node' 'json');
Standard universal serialized format (for internal structure)!
![Page 19: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/19.jpg)
Drupal 8 - REST module→Core module for common pattern of REST usage→~RestWS→Uses Serialization
→Define "Resource" Plugins▪GET/get(), PUT/put(), DELETE/delete()▪Return ResourceResponse▪Drupal will serialize()/deserialize() for you
![Page 20: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/20.jpg)
Drupal 8 - REST resourcesclass DBLogResource extends ResourceBase { public function get($id = NULL) { if ($id) { $record = db_query("SELECT * FROM {watchdog} WHERE wid = :wid", [':wid' => $id]) ->fetchAssoc(); if (!empty($record)) { return new ResourceResponse($record); } throw new NotFoundHttpException(t('Log entry with ID @id was not found', ['@id' => $id])); } throw new HttpException(t('No log entry ID was provided')); }}
![Page 21: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/21.jpg)
Drupal 8 - REST resourcesAll Content Entities are supported out-of-the-box
● Uses same URL as HTML page● All supported formats, automatically● Opt-in configuration
Easily add your own resources, too→ Teach serializer about it (Normalizer)→ Create new Resource plugin→ Profit!!1!
![Page 22: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/22.jpg)
Drupal 8 - Content NegotiationReverse proxies suck
+Browsers suck even more
=Accept-based negotiation is broken 90% of the time :-(
![Page 23: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/23.jpg)
Drupal 8 - Content Negotiationhttp://example.com/node/5?&_format=hal_json
http://example.com/node/5?&_format=xml
http://example.com/node/5?&_format=html (default)
![Page 24: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/24.jpg)
Drupal 8REST UI
![Page 25: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/25.jpg)
Drupal 8REST UI
![Page 26: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/26.jpg)
Drupal 8 - Hypermedia LinksComing soon!
(8.1? As soon as someone works on it.)
https://www.drupal.org/node/2113345
![Page 27: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/27.jpg)
What does Services module do?
![Page 28: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/28.jpg)
Drupal 8 - Services→Provide endpoint capabilities to put your API behind a
centralized URL→Standardize on an approach to building non-REST APIs→Accept Header content negotiation→Gives us regular json response instead of hal_json→Config entities too!
![Page 29: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/29.jpg)
Drupal 8 - ServicesDefinition→ Defines the ‘resource’→ Protein of Services in
D8→ Route Access→ Request method
![Page 30: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/30.jpg)
Drupal 8 - ServicesDefinition
![Page 31: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/31.jpg)
Still respects core
![Page 32: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/32.jpg)
Config Entities!
![Page 33: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/33.jpg)
Lets grab a block
![Page 34: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/34.jpg)
Create a block
![Page 35: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/35.jpg)
Update a block
![Page 36: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/36.jpg)
And since everything is an entity.
![Page 37: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/37.jpg)
Drupal 8 - Views
![Page 38: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/38.jpg)
Respects Permissions
![Page 39: Drupal 8 Deep Dive: What It Means for Developers Now that REST Is in Core](https://reader036.fdocuments.net/reader036/viewer/2022062822/588347a91a28abbe6b8b62d5/html5/thumbnails/39.jpg)
Thank You