ebook img

Decoupled Drupal in Practice: Architect and Implement Decoupled Drupal Architectures Across the Stack PDF

505 Pages·2018·13.07 MB·English
Save to my drive
Quick download
Download
Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.

Preview Decoupled Drupal in Practice: Architect and Implement Decoupled Drupal Architectures Across the Stack

Decoupled Drupal in Practice Architect and Implement Decoupled Drupal Architectures Across the Stack — Preston So Foreword by Dries Buytaert Decoupled Drupal in Practice Architect and Implement Decoupled Drupal Architectures Across the Stack Preston So Foreword by Dries Buytaert Decoupled Drupal in Practice: Architect and Implement Decoupled Drupal Architectures Across the Stack Preston So Ridgewood, NY, USA ISBN-13 (pbk): 978-1-4842-4071-7 ISBN-13 (electronic): 978-1-4842-4072-4 https://doi.org/10.1007/978-1-4842-4072-4 Library of Congress Control Number: 2018964944 Copyright © 2018 by Preston So This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation, broadcasting, reproduction on microfilms or in any other physical way, and transmission or information storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now known or hereafter developed. Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark. The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to proprietary rights. While the advice and information in this book are believed to be true and accurate at the date of publication, neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or omissions that may be made. The publisher makes no warranty, express or implied, with respect to the material contained herein. Managing Director, Apress Media LLC: Welmoed Spahr Acquisitions Editor: Louise Corrigan Development Editor: James Markham Coordinating Editor: Nancy Chen Cover designed by eStudioCalamar Cover image designed by Freepik (www.freepik.com) Distributed to the book trade worldwide by Springer Science+Business Media New York, 233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail orders-ny@springer- sbm.com, or visit www.springeronline.com. Apress Media, LLC is a California LLC and the sole member (owner) is Springer Science + Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a Delaware corporation. For information on translations, please e-mail [email protected], or visit http://www.apress.com/ rights-permissions. Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales web page at http://www.apress.com/bulk-sales. Any source code or other supplementary material referenced by the author in this book is available to readers on GitHub via the book’s product page, located at www.apress.com/9781484240717. For more detailed information, please visit http://www.apress.com/source-code. Printed on acid-free paper To my mother, with love. Table of Contents About the Author ���������������������������������������������������������������������������������������������������xvii About the Technical Reviewer ��������������������������������������������������������������������������������xix Foreword ����������������������������������������������������������������������������������������������������������������xxi Acknowledgments ������������������������������������������������������������������������������������������������xxiii Introduction �����������������������������������������������������������������������������������������������������������xxv Part I: Decoupled Drupal Fundamentals ���������������������������������������������������������1 Chapter 1: The Changing Web �����������������������������������������������������������������������������������3 Web Sites Are Now Just the Starting Point �����������������������������������������������������������������������������������3 From Web Sites to Web Applications ���������������������������������������������������������������������������������������������4 Responsive Web Design ����������������������������������������������������������������������������������������������������������������5 Native Desktop and Mobile Applications ���������������������������������������������������������������������������������������5 Zero User Interfaces ����������������������������������������������������������������������������������������������������������������������6 Conversational Content �����������������������������������������������������������������������������������������������������������������7 Content in Augmented and Virtual Reality �������������������������������������������������������������������������������������7 Situational Content ������������������������������������������������������������������������������������������������������������������������8 Other Channels �����������������������������������������������������������������������������������������������������������������������������9 Conclusion ����������������������������������������������������������������������������������������������������������������������������������10 Chapter 2: The Server Side: From Monolithic to Decoupled CMS ���������������������������11 Monolithic Content Management ������������������������������������������������������������������������������������������������12 Decoupled Content Management ������������������������������������������������������������������������������������������������12 Web Services ������������������������������������������������������������������������������������������������������������������������������15 REST and RESTful APIs ���������������������������������������������������������������������������������������������������������������16 v Table of ConTenTs RESTful and API-First Drupal�������������������������������������������������������������������������������������������������������17 Content as a Service �������������������������������������������������������������������������������������������������������������������19 Conclusion ����������������������������������������������������������������������������������������������������������������������������������19 Chapter 3: The Client Side: From Static to Dynamic Pages ������������������������������������21 From Web 1�0 to Web 2�x ������������������������������������������������������������������������������������������������������������21 The JavaScript Renaissance �������������������������������������������������������������������������������������������������������23 Universal (Isomorphic) JavaScript ����������������������������������������������������������������������������������������������24 JavaScript-to-Native Applications �����������������������������������������������������������������������������������������������27 Conclusion ����������������������������������������������������������������������������������������������������������������������������������28 Chapter 4: Decoupled Drupal ����������������������������������������������������������������������������������29 Fully Decoupled Drupal ���������������������������������������������������������������������������������������������������������������31 Pseudo-Decoupled Drupal ����������������������������������������������������������������������������������������������������������32 Progressively Decoupled Drupal �������������������������������������������������������������������������������������������������34 Drupal as a Site and Repository ��������������������������������������������������������������������������������������������������38 Use Cases for Decoupled Drupal �������������������������������������������������������������������������������������������������40 Conclusion ����������������������������������������������������������������������������������������������������������������������������������44 Chapter 5: Advantages of Decoupled Drupal ����������������������������������������������������������45 Content Syndication ��������������������������������������������������������������������������������������������������������������������45 Separation of Concerns ���������������������������������������������������������������������������������������������������������������46 User-Centered User Experiences ������������������������������������������������������������������������������������������������46 Front-End Developer Experience ������������������������������������������������������������������������������������������������47 Pipelined Development ���������������������������������������������������������������������������������������������������������������48 Conclusion ����������������������������������������������������������������������������������������������������������������������������������48 Chapter 6: Disadvantages of Decoupled Drupal �����������������������������������������������������49 Additional Point of Failure �����������������������������������������������������������������������������������������������������������49 Security and Input Sanitization ���������������������������������������������������������������������������������������������������50 Contextualized Editing and Administration ���������������������������������������������������������������������������������50 Layout and Display Management ������������������������������������������������������������������������������������������������51 vi Table of ConTenTs Previewable Content Workflows �������������������������������������������������������������������������������������������������51 System Notifications �������������������������������������������������������������������������������������������������������������������51 Monolithic Performance Benefits ������������������������������������������������������������������������������������������������52 Accessibility and User Experience ����������������������������������������������������������������������������������������������52 Conclusion ����������������������������������������������������������������������������������������������������������������������������������53 Part II: Decoupling Drupal ����������������������������������������������������������������������������55 Chapter 7: Decoupling Drupal 8 Core ���������������������������������������������������������������������57 The Web Services and Context Core Initiative �����������������������������������������������������������������������������57 The Serialization Module�������������������������������������������������������������������������������������������������������������59 How Serialization Works ��������������������������������������������������������������������������������������������������������60 Adding a New Encoding���������������������������������������������������������������������������������������������������������62 The Serialization API �������������������������������������������������������������������������������������������������������������������63 Serializing and Deserializing �������������������������������������������������������������������������������������������������63 Encoding and Decoding Serialization Formats ����������������������������������������������������������������������63 Normalizing and Denormalizing ��������������������������������������������������������������������������������������������64 Using Entity Resolvers �����������������������������������������������������������������������������������������������������������64 The RESTful Web Services Module ���������������������������������������������������������������������������������������������65 The RESTful Web Services API ����������������������������������������������������������������������������������������������������65 Configuring REST Resources �������������������������������������������������������������������������������������������������66 Using the RESTful Web Services Module ������������������������������������������������������������������������������������66 Exposing Resources with Entity Access ��������������������������������������������������������������������������������66 Customizing a REST Resource’s Format and Authentication Method ������������������������������������67 Hypertext Application Language �������������������������������������������������������������������������������������������������68 Setting Up Drupal 8 as a Web Service Provider ��������������������������������������������������������������������������69 Installing Composer ���������������������������������������������������������������������������������������������������������������69 Downloading Drupal and Drupal Dependencies with Composer �������������������������������������������70 Provisioning a Drupal Site �����������������������������������������������������������������������������������������������������72 Generating Content and Enabling Core REST Modules ����������������������������������������������������������73 vii Table of ConTenTs Configuring Core REST ����������������������������������������������������������������������������������������������������������������74 Configuring CORS ������������������������������������������������������������������������������������������������������������������������77 Conclusion ����������������������������������������������������������������������������������������������������������������������������������79 Chapter 8: Decoupling Drupal 8 with Contributed Modules �����������������������������������81 The Drupal Web Services Ecosystem ������������������������������������������������������������������������������������������81 JSON API �������������������������������������������������������������������������������������������������������������������������������������83 The JSON API Specification ���������������������������������������������������������������������������������������������������84 The JSON API Module ������������������������������������������������������������������������������������������������������������88 The JSON API Module API ������������������������������������������������������������������������������������������������������88 RELAXed Web Services ���������������������������������������������������������������������������������������������������������������91 The Drupal Deploy Ecosystem �����������������������������������������������������������������������������������������������91 The CouchDB Replication Protocol ����������������������������������������������������������������������������������������92 The RELAXed Web Services Module ��������������������������������������������������������������������������������������94 The RELAXed Web Services REST API �����������������������������������������������������������������������������������96 PouchDB and Hoodie �������������������������������������������������������������������������������������������������������������97 GraphQL ��������������������������������������������������������������������������������������������������������������������������������������98 Motivating GraphQL ���������������������������������������������������������������������������������������������������������������98 The GraphQL Specification ��������������������������������������������������������������������������������������������������100 The GraphQL Module �����������������������������������������������������������������������������������������������������������107 REST UI �������������������������������������������������������������������������������������������������������������������������������������108 Conclusion ��������������������������������������������������������������������������������������������������������������������������������110 Chapter 9: Authenticating Requests in Drupal 8 �������������������������������������������������� 113 Basic Authentication �����������������������������������������������������������������������������������������������������������������113 HTTP Basic Authentication ��������������������������������������������������������������������������������������������������114 The Authorization Header ����������������������������������������������������������������������������������������������������115 Cookie-Based Authentication ����������������������������������������������������������������������������������������������������116 Retrieving Cookies in Fully Decoupled Consumers �������������������������������������������������������������117 Authenticating Using Cookies ����������������������������������������������������������������������������������������������119 viii Table of ConTenTs OAuth 2�0 Bearer Token Authentication�������������������������������������������������������������������������������������120 OAuth 2�0 Grants �����������������������������������������������������������������������������������������������������������������121 Installing Simple OAuth and Generating Keys ���������������������������������������������������������������������122 OAuth 2�0 Scopes and Drupal Roles ������������������������������������������������������������������������������������123 Creating and Verifying Access Tokens ���������������������������������������������������������������������������������125 Issuing OAuth 2�0-Authenticated Requests �������������������������������������������������������������������������127 Handling Expired Tokens �����������������������������������������������������������������������������������������������������128 JSON Web Tokens ���������������������������������������������������������������������������������������������������������������������130 The JSON Web Tokens Standard ������������������������������������������������������������������������������������������130 How JSON Web Tokens Work �����������������������������������������������������������������������������������������������133 Installing JSON Web Tokens ������������������������������������������������������������������������������������������������134 Creating JWT HMAC and JWT RSA Keys������������������������������������������������������������������������������135 Issuing and Validating JWTs ������������������������������������������������������������������������������������������������138 Issuing JWT-Authenticated Requests ����������������������������������������������������������������������������������139 Conclusion ��������������������������������������������������������������������������������������������������������������������������������140 Part III: Consuming and Manipulating Drupal 8 �����������������������������������������141 Chapter 10: Core REST ������������������������������������������������������������������������������������������143 Issuing REST Requests Against Drupal Core �����������������������������������������������������������������������������143 Safe and Unsafe Methods ���������������������������������������������������������������������������������������������������144 The X-CSRF-Token Header ��������������������������������������������������������������������������������������������������145 Specifying Serialization Formats �����������������������������������������������������������������������������������������145 Retrieving Content with Core REST �������������������������������������������������������������������������������������������146 Creating Content with Core REST ����������������������������������������������������������������������������������������������147 Updating Content with Core REST ���������������������������������������������������������������������������������������������153 Deleting Content with Core REST ����������������������������������������������������������������������������������������������158 Conclusion ��������������������������������������������������������������������������������������������������������������������������������160 ix Table of ConTenTs Chapter 11: Using Views with Core REST �������������������������������������������������������������161 Using Views for Content Listings ����������������������������������������������������������������������������������������������161 Creating Views for REST Export Displays ����������������������������������������������������������������������������������162 Custom Content Types with Views REST Exports ����������������������������������������������������������������������168 Retrieving Views REST Exports with Core REST������������������������������������������������������������������������178 Conclusion ��������������������������������������������������������������������������������������������������������������������������������180 Chapter 12: JSON API in Drupal ����������������������������������������������������������������������������183 Retrieving Resources with JSON API ����������������������������������������������������������������������������������������184 Retrieving Single Resources ������������������������������������������������������������������������������������������������184 Retrieving Resource Collections ������������������������������������������������������������������������������������������185 Retrieving Limited Subsets of Fields �����������������������������������������������������������������������������������195 Retrieving Entity References �����������������������������������������������������������������������������������������������195 Creating Resources with JSON API �������������������������������������������������������������������������������������������195 Updating Resources with JSON API ������������������������������������������������������������������������������������������198 Deleting Resources with JSON API �������������������������������������������������������������������������������������������200 Conclusion ��������������������������������������������������������������������������������������������������������������������������������201 Chapter 13: RELAXed Web Services����������������������������������������������������������������������203 Retrieving Resources with RELAXed Web Services ������������������������������������������������������������������206 Retrieving Workspaces and Workspace Collections ������������������������������������������������������������207 Retrieving Documents and Document Collections ��������������������������������������������������������������210 Retrieving File Attachments�������������������������������������������������������������������������������������������������213 Creating and Updating Resources with RELAXed Web Services �����������������������������������������������217 Creating Workspaces �����������������������������������������������������������������������������������������������������������217 Creating Documents ������������������������������������������������������������������������������������������������������������220 Updating Documents �����������������������������������������������������������������������������������������������������������226 Creating and Updating Documents in Bulk ��������������������������������������������������������������������������229 x

Description:
Gain a clear understanding of the most important concepts in the decoupled CMS landscape. You will learn how to architect and implement decoupled Drupal architectures across the stack—from building the back end and designing APIs to integrating with front-end technologies. You'll also review prese
See more

The list of books you might like

Most books are stored in the elastic cloud where traffic is expensive. For this reason, we have a limit on daily download.