SlideShare ist ein Scribd-Unternehmen logo
1 von 52
©2016 Acquia Inc. — Confidential and Proprietary
Decoupled Drupal 8.x
Drupal’s web services
today and tomorrow
Preston So
Development Manager, Acquia Labs
March 29, 2017
©2016 Acquia Inc.
Welcome!
Preston So (@prestonso) has been a web developer and designer since
2001, a creative professional since 2004, and a Drupal developer since
2007. As Development Manager of Acquia Labs, Preston leads new
open-source and research initiatives at Acquia. Preston has presented
keynotes at conferences on three continents in multiple languages and
speaks around the world about diverse topics such as decoupled
Drupal, responsive design, front-end development, and user experience.
– drupal.org/u/prestonso
– preston.so@acquia.com
©2016 Acquia Inc.
Welcome!
©2016 Acquia Inc.
What we’ll cover
– Drupal web services at a glance
– Drupal 8.0: WSCII and foundations
– Drupal 8.2: CORS, configuration entities, and DX
– Drupal 8.3: User registration and DX
– What’s ahead in Drupal 8.5+
– JSON API, GraphQL, and RELAXed Web Services
– Epilogue: The wider web services landscape
©2016 Acquia Inc.
Drupal web services at
a glance
©2016 Acquia Inc.
Why are web services important?
– Web services enable communication between Drupal and other
systems, most commonly decoupled front ends or other back ends.
– Decoupled Drupal, or API-first Drupal, is the process of employing
Drupal as a data service which exposes data for consumption by
other applications.
– A REST API is a common entry point for other applications.
©2016 Acquia Inc.
Why are web services important?
HTTP request
HTTP response (JSON, XML)
Site or repository built in
Drupal
Decoupled
application
Web services
Decoupled
application
Software
development
kit (SDK)
©2016 Acquia Inc.
Drupal web services at a glance
– Drupal’s web services can be split into three categories:
–Core REST (internal storage or HAL normalization)
–Contributed REST (JSON API, RELAXed, Services)
–Non-REST web services (GraphQL)
©2016 Acquia Inc.
Drupal web services at a glance
©2016 Acquia Inc.
Drupal 8.0: WSCII and
foundations
©2016 Acquia Inc.
WSCII
– The Web Services and Context Core Initiative (WSCII), led by Larry
Garfield, enabled RESTful web services in Drupal.
– The original goal was to enable server-to-server communication, but
in recent years actual usage has evolved more toward server-to-
client.
– The default REST API available out of the box in Drupal 8 core is
fully REST-compliant.
©2016 Acquia Inc.
The API-first initiative
– The API-first initiative (WSCII), led by Wim Leers, is the successor to
WSCII and aims to expand Drupal’s web services capabilities.
– The API-first initiative captures use cases that are applicable to both
fully decoupled and progressively decoupled (in-Drupal) issues.
– Meetings are held monthly on the third Monday of every month from
6-7pm GMT, and core conversations often take place at DrupalCon.
©2016 Acquia Inc.
Core REST
– The core REST modules allow for all content entities (nodes, users,
taxonomy terms, comments) to be exposed as JSON+HAL or as
JSON representing Drupal’s internal storage, and Views natively
supports “REST export” as a new display type.
– There are many issues with REST in core; please consider
contributing to RX (REST experience) tagged issues.
©2016 Acquia Inc.
Core REST modules
– Serialization is able to perform serialization by providing normalizers
and encoders. First, it normalizes Drupal data (entities and their
fields) into arrays with a particular structure. Any normalization can
then be sent to an encoder, which transforms those arrays into data
formats such as JSON or XML.
– RESTful Web Services allows for HTTP methods to be performed on
existing resources including but not limited to content entities and
views (the latter facilitated through the “REST export" display in
Views) and custom resources added through REST plugins.
©2016 Acquia Inc.
Core REST modules
– HAL builds on top of the Serialization module and adds the
Hypertext Application Language normalization, a format that
enables you to design an API geared toward clients moving
between distinct resources through hyperlinks.
– Basic Auth allows you to include a username and password with
request headers for operations requiring permissions beyond that of
an anonymous user. It should only be used with HTTPS.
©2016 Acquia Inc.
Setting up RESTful Drupal
$ drush en -y hal basic_auth serialization rest
$ drush dl restui && drush en -y restui
©2016 Acquia Inc.
Fetching an individual node
GET /node/1?_format=json HTTP/1.1
Host: drupal-backend.dd:8083
Accept: application/json
Cache-Control: no-cache
Postman-Token: 6c55fb8b-3587-2f36-1bee-2141179d1c9c
©2016 Acquia Inc.
Creating a new node
POST /entity/node HTTP/1.1
Host: drupal-backend.dd:8083
Accept: application/json
Authorization: Basic YWRtaW46YWRtaW4=
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: 7776d489-e9bb-cad2-d289-24aa76f8f8a6
©2016 Acquia Inc.
Creating a new node
{
"type": [
{"target_id": "article"}
],
"title": [
{"value": "Lorem ipsum dolor sit amet adipiscing"}
],
"body": [
{"value": "This is a totally new article"}
]
}
©2016 Acquia Inc.
Updating an individual node
PATCH /node/23 HTTP/1.1
Host: drupal-backend.dd:8083
Accept: application/json
Authorization: Basic YWRtaW46YWRtaW4=
Content-Type: application/json
Cache-Control: no-cache
Postman-Token: c1e4df7e-b17b-2256-75c8-55629c8329c7
©2016 Acquia Inc.
Updating an individual node
{
"nid": [
{"value": "23"}
],
"type": [
{"target_id": "article"}
],
"title": [
{"value": "UPDATE UPDATE UPDATE UPDATE"}
],
"body": [
{"value": "Awesome update happened here"}
]
}
©2016 Acquia Inc.
Cross-origin resource sharing (CORS)
# Apache 2
Header set Access-Control-Allow-Origin "*"
©2016 Acquia Inc.
Cross-origin resource sharing (CORS)
$ drush dl cors && drush en -y cors
*|http://localhost:3003
$ drush cr
©2016 Acquia Inc.
Waterwheel SDK ecosystem
– Waterwheel is a collection of SDKs which make it easier for
developers to build Drupal-backed applications in various
technologies.
– The Waterwheel module includes resource discovery (content
schema exports to the client side) and generated Swagger API
documentation.
– github.com/acquia/waterwheel.js
– github.com/acquia/waterwheel.swift
– drupal.org/project/waterwheel
©2016 Acquia Inc.
Drupal 8.2: CORS,
configuration entities,
and DX
©2016 Acquia Inc.
Changes in Drupal 8.2
– Configuration entity GET support
– Opt-in CORS support
– RPC endpoints for login, status, logout, and password reset
– REST configuration converted to configuration entities
– Comments can be updated via REST
– Various developer experience benefits
©2016 Acquia Inc.
Configuration entity GET support
– Configuration entities can now be retrieved via GET, meaning you
can now view labels of configuration entities like Vocabularies and
Content Types, which is particularly helpful for client-side visibility.
curl --user admin:admin --request GET
"http://drupal.d8/entity/taxonomy_vocabulary/tags?_format=json"
curl --user admin:admin --request GET
"http://drupal.d8/contact/feedback?_format=json"
©2016 Acquia Inc.
Opt-in CORS support
– Fully decoupled applications on domains distinct from the Drupal
back end are blocked from issuing asynchronous requests to Drupal
due to the same-origin policy unless cross-origin resource sharing is
enabled.
– In the past, this was done either via Apache 2 configuration or via
the CORS module, but there is now core support.
– This is not enabled by default due to security consequences of
allowing other domains to access Drupal.
©2016 Acquia Inc.
Opt-in CORS support: default.services.yml
cors.config:
enabled: false
# Specify allowed headers, like 'x-allowed-header'.
allowedHeaders: []
# Specify allowed request methods, specify ['*'] to allow all possible ones.
allowedMethods: []
# Configure requests allowed from specific origins.
allowedOrigins: ['*']
# Sets the Access-Control-Expose-Headers header.
exposedHeaders: false
# Sets the Access-Control-Max-Age header.
maxAge: false
# Sets the Access-Control-Allow-Credentials header.
supportsCredentials: false
©2016 Acquia Inc.
RPC endpoints for user operations
– You can now log into Drupal, check a user’s status, log out, and
reset a password entirely through RPC endpoints.
©2016 Acquia Inc.
RPC endpoints for login, status, logout, and reset
curl --header "Content-type: application/json" --request POST 
--data '{"name":"admin", "pass":"admin"}' 
http://drupal.d8/user/login?_format=json
curl --header "Content-type: application/json" --request GET 
http://drupal.d8/user/login_status?_format=json
curl --header "Content-type: application/json" --request POST 
http://drupal.d8/user/logout?_format=json
©2016 Acquia Inc.
REST configuration before: rest.settings
resources:
entity:node:
GET:
supported_formats:
- hal_json
supported_auth:
- basic_auth
POST:
supported_formats:
- hal_json
supported_auth:
- basic_auth
PATCH:
supported_formats:
- hal_json
supported_auth:
- basic_auth
DELETE:
supported_formats:
- hal_json
supported_auth:
- basic_auth
©2016 Acquia Inc.
REST configuration after: rest.resource.entity.node
id: entity.node
plugin_id: 'entity:node'
granularity: method
configuration:
GET:
supported_formats:
- hal_json
supported_auth:
- basic_auth
POST:
supported_formats:
- hal_json
supported_auth:
- basic_auth
PATCH:
supported_formats:
- hal_json
supported_auth:
- basic_auth
DELETE:
supported_formats:
- hal_json
supported_auth:
- basic_auth
dependencies:
module:
- basic_auth
- hal
- node
©2016 Acquia Inc.
Various developer experience benefits
– Entity creation via REST now returns the created entity in the
response
– Entity update via REST now returns the updated entity in the
response
©2016 Acquia Inc.
Drupal 8.3: User registration and DX
– User registration is now possible through REST
– Various developer experience advancements (changes in module
scope and REST plugin writing process)
©2016 Acquia Inc.
What’s ahead in Drupal
8.5+
©2016 Acquia Inc.
Prospective improvements in Drupal 8.5+
– Translation support
– File upload support
– Configuration entity POST, PATCH, DELETE support?
– Others?
©2016 Acquia Inc.
JSON API, GraphQL,
and RELAXed Web
Services
©2016 Acquia Inc.
RELAXed Web Services
– RELAXed Web Services extends features available in core’s REST modules
by including support for translations, parent revisions (through the
Multiversion module), file attachments, and cross-environment UUID
references.
– It uses the CouchDB API specification, which means that CouchDB
integration with client-side libraries such as PouchDB and Hood.ie makes
possible offline-enabled Drupal.
©2016 Acquia Inc.
JSON API
– JSON API is a specification for REST APIs in JSON popular among
JavaScript developers and adopted by the Ember and Rails
communities.
– JSON API provides a standard way to query single entities, but it
also provides all relationships contained therein and query
operations via query string parameters.
– JSON API allows you to fetch lists of content entities (filter, sort,
pagination) — which is currently only possible via multiple requests
or Views REST exports.
©2016 Acquia Inc.
JSON API
– JSON API is likely slated for incorporation into Drupal 8.5 core,
though this is prospective. The module is very close to entering beta
for stability in contrib.
– See also: JSON API by Mateu Aguiló Bosch
(drupal.org/project/jsonapi)
©2016 Acquia Inc.
OAuth2
– Currently Basic Auth is the only way to authenticate into Drupal’s
REST API, and it is less secure than other available options such as
OAuth2.
– OAuth2 is more secure for authenticating requests, and it is a widely
used standard among REST APIs in the wider landscape.
– See also: Simple OAuth by Mateu Aguiló Bosch
(drupal.org/project/simple_oauth)
©2016 Acquia Inc.
GraphQL
– GraphQL, originally created by Facebook to power its data fetching,
is a query language that enables fewer queries and limits response
bloat.
– Rather than tightly coupling responses with a predefined schema,
GraphQL overturns this common practice by allowing for the client's
request to explicitly tailor a response so that the client only receives
what it needs.
– GraphQL shifts responsibility from the server to the client: the server
publishes its possibilities, and the client publishes its requirements
instead of receiving a response dictated solely by the server.
©2016 Acquia Inc.
GraphQL
– Typical REST APIs tend to be static (or versioned, in many cases, e.g. /api/v1)
in order to facilitate backwards compatibility for applications. However, in
Drupal's case, when the underlying content model is inevitably augmented
or otherwise changed, schema compatibility is no longer guaranteed.
– With GraphQL's native schema introspection and client-specified queries,
the API is much less opaque from the client's perspective in that the client is
aware of what response will result according to its own requirements.
– See also: GraphQL by Sebastian Siemssen (drupal.org/project/graphql)
©2016 Acquia Inc.
Summary: Current core REST
©2016 Acquia Inc.
Summary: JSON API
©2016 Acquia Inc.
Summary: GraphQL
©2016 Acquia Inc.
Epilogue: The wider
web services
landscape
©2016 Acquia Inc.
The GraphQL ecosystem
– GraphQL
– React/Relay
– Apollo Data
©2016 Acquia Inc.
Content as a service
– Contentful
– Prismic
– Built.io Contentstack
– CloudCMS
– Kentico Cloud
©2016 Acquia Inc.
The future of the CMS
– Inversion of control
– Editorial experience
– Developer experience
– User experience
©2016 Acquia Inc.
Thank you!
Preston So (@prestonso)
drupal.org/u/prestonso
preston.so@acquia.com
Learn more about Acquia Labs:
acquia.com/resources/acquia-labs

Weitere ähnliche Inhalte

Was ist angesagt?

Drupal 8 and 9, Backwards Compatibility, and Drupal 8.5 update
Drupal 8 and 9, Backwards Compatibility, and Drupal 8.5 updateDrupal 8 and 9, Backwards Compatibility, and Drupal 8.5 update
Drupal 8 and 9, Backwards Compatibility, and Drupal 8.5 updateAngela Byron
 
Questions To Ask Before a Drupal Project Kickoff
Questions To Ask Before a Drupal Project KickoffQuestions To Ask Before a Drupal Project Kickoff
Questions To Ask Before a Drupal Project KickoffAcquia
 
MySQL Shell: The DevOps Tool for MySQL
MySQL Shell: The DevOps Tool for MySQLMySQL Shell: The DevOps Tool for MySQL
MySQL Shell: The DevOps Tool for MySQLMiguel Araújo
 
Java Web Apps and Services on Oracle Java Cloud Service
Java Web Apps and Services on Oracle Java Cloud ServiceJava Web Apps and Services on Oracle Java Cloud Service
Java Web Apps and Services on Oracle Java Cloud ServiceAndreas Koop
 
Manchester geek night pcf 101
Manchester geek night   pcf 101Manchester geek night   pcf 101
Manchester geek night pcf 101Sufyaan Kazi
 
NoSQL & SQL - Best of both worlds - BarCamp Berkshire 2013
NoSQL & SQL - Best of both worlds - BarCamp Berkshire 2013NoSQL & SQL - Best of both worlds - BarCamp Berkshire 2013
NoSQL & SQL - Best of both worlds - BarCamp Berkshire 2013Andrew Morgan
 
How to Architect and Develop Cloud Native Applications
How to Architect and Develop Cloud Native ApplicationsHow to Architect and Develop Cloud Native Applications
How to Architect and Develop Cloud Native ApplicationsSufyaan Kazi
 
Pivotal microservices spring_pcf_skillsmatter.pptx
Pivotal microservices spring_pcf_skillsmatter.pptxPivotal microservices spring_pcf_skillsmatter.pptx
Pivotal microservices spring_pcf_skillsmatter.pptxSufyaan Kazi
 
MySQL 8 High Availability with InnoDB Clusters
MySQL 8 High Availability with InnoDB ClustersMySQL 8 High Availability with InnoDB Clusters
MySQL 8 High Availability with InnoDB ClustersMiguel Araújo
 
MySQL Intro JSON NoSQL
MySQL Intro JSON NoSQLMySQL Intro JSON NoSQL
MySQL Intro JSON NoSQLMark Swarbrick
 
PaaS and OpenStack
PaaS and OpenStackPaaS and OpenStack
PaaS and OpenStackSeth Fox
 
St.Louis OpenStack February meetup
St.Louis OpenStack February meetupSt.Louis OpenStack February meetup
St.Louis OpenStack February meetupopenstackstl
 
MySQL InnoDB Cluster: Management and Troubleshooting with MySQL Shell
MySQL InnoDB Cluster: Management and Troubleshooting with MySQL ShellMySQL InnoDB Cluster: Management and Troubleshooting with MySQL Shell
MySQL InnoDB Cluster: Management and Troubleshooting with MySQL ShellMiguel Araújo
 
PHP, The X DevAPI, and the MySQL Document Store -- Benelux PHP Confernece 2019
PHP, The X DevAPI, and the MySQL Document Store -- Benelux PHP Confernece 2019PHP, The X DevAPI, and the MySQL Document Store -- Benelux PHP Confernece 2019
PHP, The X DevAPI, and the MySQL Document Store -- Benelux PHP Confernece 2019Dave Stokes
 
MySQL Shell : the best DBA tool ?
MySQL Shell : the best DBA tool ?MySQL Shell : the best DBA tool ?
MySQL Shell : the best DBA tool ?Frederic Descamps
 
MySQL Shell - A DevOps-engineer day with MySQL’s development and administrati...
MySQL Shell - A DevOps-engineer day with MySQL’s development and administrati...MySQL Shell - A DevOps-engineer day with MySQL’s development and administrati...
MySQL Shell - A DevOps-engineer day with MySQL’s development and administrati...Miguel Araújo
 
Running your Spring Apps in the Cloud Javaone 2014
Running your Spring Apps in the Cloud Javaone 2014Running your Spring Apps in the Cloud Javaone 2014
Running your Spring Apps in the Cloud Javaone 2014cornelia davis
 
Product Release Webinar- WSO2 Developer Studio 3.5
Product Release Webinar- WSO2 Developer Studio 3.5Product Release Webinar- WSO2 Developer Studio 3.5
Product Release Webinar- WSO2 Developer Studio 3.5WSO2
 
Real World Example of Orchestrating Docker, Node JS, NFV on OpenStack
Real World Example of Orchestrating Docker, Node JS, NFV on OpenStackReal World Example of Orchestrating Docker, Node JS, NFV on OpenStack
Real World Example of Orchestrating Docker, Node JS, NFV on OpenStackNati Shalom
 

Was ist angesagt? (20)

Drupal 8 and 9, Backwards Compatibility, and Drupal 8.5 update
Drupal 8 and 9, Backwards Compatibility, and Drupal 8.5 updateDrupal 8 and 9, Backwards Compatibility, and Drupal 8.5 update
Drupal 8 and 9, Backwards Compatibility, and Drupal 8.5 update
 
Questions To Ask Before a Drupal Project Kickoff
Questions To Ask Before a Drupal Project KickoffQuestions To Ask Before a Drupal Project Kickoff
Questions To Ask Before a Drupal Project Kickoff
 
MySQL Shell: The DevOps Tool for MySQL
MySQL Shell: The DevOps Tool for MySQLMySQL Shell: The DevOps Tool for MySQL
MySQL Shell: The DevOps Tool for MySQL
 
Java Web Apps and Services on Oracle Java Cloud Service
Java Web Apps and Services on Oracle Java Cloud ServiceJava Web Apps and Services on Oracle Java Cloud Service
Java Web Apps and Services on Oracle Java Cloud Service
 
Manchester geek night pcf 101
Manchester geek night   pcf 101Manchester geek night   pcf 101
Manchester geek night pcf 101
 
NoSQL & SQL - Best of both worlds - BarCamp Berkshire 2013
NoSQL & SQL - Best of both worlds - BarCamp Berkshire 2013NoSQL & SQL - Best of both worlds - BarCamp Berkshire 2013
NoSQL & SQL - Best of both worlds - BarCamp Berkshire 2013
 
How to Architect and Develop Cloud Native Applications
How to Architect and Develop Cloud Native ApplicationsHow to Architect and Develop Cloud Native Applications
How to Architect and Develop Cloud Native Applications
 
Pivotal microservices spring_pcf_skillsmatter.pptx
Pivotal microservices spring_pcf_skillsmatter.pptxPivotal microservices spring_pcf_skillsmatter.pptx
Pivotal microservices spring_pcf_skillsmatter.pptx
 
MySQL 8 High Availability with InnoDB Clusters
MySQL 8 High Availability with InnoDB ClustersMySQL 8 High Availability with InnoDB Clusters
MySQL 8 High Availability with InnoDB Clusters
 
MySQL Intro JSON NoSQL
MySQL Intro JSON NoSQLMySQL Intro JSON NoSQL
MySQL Intro JSON NoSQL
 
PaaS and OpenStack
PaaS and OpenStackPaaS and OpenStack
PaaS and OpenStack
 
St.Louis OpenStack February meetup
St.Louis OpenStack February meetupSt.Louis OpenStack February meetup
St.Louis OpenStack February meetup
 
MySQL InnoDB Cluster: Management and Troubleshooting with MySQL Shell
MySQL InnoDB Cluster: Management and Troubleshooting with MySQL ShellMySQL InnoDB Cluster: Management and Troubleshooting with MySQL Shell
MySQL InnoDB Cluster: Management and Troubleshooting with MySQL Shell
 
PHP, The X DevAPI, and the MySQL Document Store -- Benelux PHP Confernece 2019
PHP, The X DevAPI, and the MySQL Document Store -- Benelux PHP Confernece 2019PHP, The X DevAPI, and the MySQL Document Store -- Benelux PHP Confernece 2019
PHP, The X DevAPI, and the MySQL Document Store -- Benelux PHP Confernece 2019
 
MySQL Shell : the best DBA tool ?
MySQL Shell : the best DBA tool ?MySQL Shell : the best DBA tool ?
MySQL Shell : the best DBA tool ?
 
MySQL Shell - A DevOps-engineer day with MySQL’s development and administrati...
MySQL Shell - A DevOps-engineer day with MySQL’s development and administrati...MySQL Shell - A DevOps-engineer day with MySQL’s development and administrati...
MySQL Shell - A DevOps-engineer day with MySQL’s development and administrati...
 
PaaS Manager GEi
PaaS Manager GEiPaaS Manager GEi
PaaS Manager GEi
 
Running your Spring Apps in the Cloud Javaone 2014
Running your Spring Apps in the Cloud Javaone 2014Running your Spring Apps in the Cloud Javaone 2014
Running your Spring Apps in the Cloud Javaone 2014
 
Product Release Webinar- WSO2 Developer Studio 3.5
Product Release Webinar- WSO2 Developer Studio 3.5Product Release Webinar- WSO2 Developer Studio 3.5
Product Release Webinar- WSO2 Developer Studio 3.5
 
Real World Example of Orchestrating Docker, Node JS, NFV on OpenStack
Real World Example of Orchestrating Docker, Node JS, NFV on OpenStackReal World Example of Orchestrating Docker, Node JS, NFV on OpenStack
Real World Example of Orchestrating Docker, Node JS, NFV on OpenStack
 

Andere mochten auch

Speedrun: Build a Website with Panels, Media, and More in 45 Minutes
Speedrun: Build a Website with Panels, Media, and More in 45 MinutesSpeedrun: Build a Website with Panels, Media, and More in 45 Minutes
Speedrun: Build a Website with Panels, Media, and More in 45 MinutesAcquia
 
Drupal 8 Development at the Speed of Lightning (& BLT)
Drupal 8 Development at the Speed of Lightning (& BLT)Drupal 8 Development at the Speed of Lightning (& BLT)
Drupal 8 Development at the Speed of Lightning (& BLT)Acquia
 
Drupal Essentials: Comment Management in Drupal 7
Drupal Essentials: Comment Management in Drupal 7Drupal Essentials: Comment Management in Drupal 7
Drupal Essentials: Comment Management in Drupal 7Acquia
 
Ask Us Anything: Dries Buytaert and Team Tell All on Drupal 8
Ask Us Anything: Dries Buytaert and Team Tell All on Drupal 8Ask Us Anything: Dries Buytaert and Team Tell All on Drupal 8
Ask Us Anything: Dries Buytaert and Team Tell All on Drupal 8Acquia
 
Advantages of using drupal 8
Advantages of using drupal 8Advantages of using drupal 8
Advantages of using drupal 8NeilWilson2015
 
The Big Reverse of the Web
The Big Reverse of the WebThe Big Reverse of the Web
The Big Reverse of the WebAcquia
 
Intro to Commons, Part 1: How to Manage Your Online Community
Intro to Commons, Part 1: How to Manage Your Online CommunityIntro to Commons, Part 1: How to Manage Your Online Community
Intro to Commons, Part 1: How to Manage Your Online CommunityAcquia
 
Site building using Drupal 8
Site building using Drupal 8Site building using Drupal 8
Site building using Drupal 8UniMitySolution
 
10 Reasons to Choose Drupal
10 Reasons to Choose Drupal10 Reasons to Choose Drupal
10 Reasons to Choose DrupalAcquia
 
Introduction to Drupal
Introduction to DrupalIntroduction to Drupal
Introduction to DrupalTom Deryckere
 
Can we save the open web?
Can we save the open web?Can we save the open web?
Can we save the open web?Acquia
 
Introduction to drupal
Introduction to drupalIntroduction to drupal
Introduction to drupalmayank.grd
 
Going Beyond The Click: The Importance of Web Personalization
Going Beyond The Click: The Importance of Web PersonalizationGoing Beyond The Click: The Importance of Web Personalization
Going Beyond The Click: The Importance of Web PersonalizationAcquia
 
Best Practice Checklist for Building a Drupal Website
Best Practice Checklist for Building a Drupal WebsiteBest Practice Checklist for Building a Drupal Website
Best Practice Checklist for Building a Drupal WebsiteAcquia
 

Andere mochten auch (20)

Speedrun: Build a Website with Panels, Media, and More in 45 Minutes
Speedrun: Build a Website with Panels, Media, and More in 45 MinutesSpeedrun: Build a Website with Panels, Media, and More in 45 Minutes
Speedrun: Build a Website with Panels, Media, and More in 45 Minutes
 
Drupal 8 Development at the Speed of Lightning (& BLT)
Drupal 8 Development at the Speed of Lightning (& BLT)Drupal 8 Development at the Speed of Lightning (& BLT)
Drupal 8 Development at the Speed of Lightning (& BLT)
 
Drupal Essentials: Comment Management in Drupal 7
Drupal Essentials: Comment Management in Drupal 7Drupal Essentials: Comment Management in Drupal 7
Drupal Essentials: Comment Management in Drupal 7
 
Drupal an introduction
Drupal an introductionDrupal an introduction
Drupal an introduction
 
Drupal Introduction
Drupal IntroductionDrupal Introduction
Drupal Introduction
 
Ask Us Anything: Dries Buytaert and Team Tell All on Drupal 8
Ask Us Anything: Dries Buytaert and Team Tell All on Drupal 8Ask Us Anything: Dries Buytaert and Team Tell All on Drupal 8
Ask Us Anything: Dries Buytaert and Team Tell All on Drupal 8
 
Advantages of using drupal 8
Advantages of using drupal 8Advantages of using drupal 8
Advantages of using drupal 8
 
The Big Reverse of the Web
The Big Reverse of the WebThe Big Reverse of the Web
The Big Reverse of the Web
 
Intro to Commons, Part 1: How to Manage Your Online Community
Intro to Commons, Part 1: How to Manage Your Online CommunityIntro to Commons, Part 1: How to Manage Your Online Community
Intro to Commons, Part 1: How to Manage Your Online Community
 
Site building using Drupal 8
Site building using Drupal 8Site building using Drupal 8
Site building using Drupal 8
 
10 Reasons to Choose Drupal
10 Reasons to Choose Drupal10 Reasons to Choose Drupal
10 Reasons to Choose Drupal
 
Drupal & You
Drupal & YouDrupal & You
Drupal & You
 
Introduction to Drupal
Introduction to DrupalIntroduction to Drupal
Introduction to Drupal
 
Can we save the open web?
Can we save the open web?Can we save the open web?
Can we save the open web?
 
Drupal
DrupalDrupal
Drupal
 
Why a CMS? Why Drupal?
Why a CMS? Why Drupal?Why a CMS? Why Drupal?
Why a CMS? Why Drupal?
 
Introduction to drupal
Introduction to drupalIntroduction to drupal
Introduction to drupal
 
Going Beyond The Click: The Importance of Web Personalization
Going Beyond The Click: The Importance of Web PersonalizationGoing Beyond The Click: The Importance of Web Personalization
Going Beyond The Click: The Importance of Web Personalization
 
Best Practice Checklist for Building a Drupal Website
Best Practice Checklist for Building a Drupal WebsiteBest Practice Checklist for Building a Drupal Website
Best Practice Checklist for Building a Drupal Website
 
Why I Hate Drupal
Why I Hate DrupalWhy I Hate Drupal
Why I Hate Drupal
 

Ähnlich wie Decoupling Drupal 8.x: Drupal’s Web Services Today and Tomorrow

[Srijan Wednesday Webinar] Decoupled Demystified: The Present & Future of Dr...
 [Srijan Wednesday Webinar] Decoupled Demystified: The Present & Future of Dr... [Srijan Wednesday Webinar] Decoupled Demystified: The Present & Future of Dr...
[Srijan Wednesday Webinar] Decoupled Demystified: The Present & Future of Dr...Srijan Technologies
 
RestFul Web Services In Drupal 8
RestFul Web Services In Drupal 8RestFul Web Services In Drupal 8
RestFul Web Services In Drupal 8Gajendra Sharma
 
2.28.17 Introducing DSpace 7 Webinar Slides
2.28.17 Introducing DSpace 7 Webinar Slides2.28.17 Introducing DSpace 7 Webinar Slides
2.28.17 Introducing DSpace 7 Webinar SlidesDuraSpace
 
Drupal Integration with Solr for Fabulous CMS Search
Drupal Integration with Solr for  Fabulous CMS SearchDrupal Integration with Solr for  Fabulous CMS Search
Drupal Integration with Solr for Fabulous CMS SearchAcquia
 
Demystifying Decoupled Drupal for Developers & Content Authors
Demystifying Decoupled Drupal for Developers & Content AuthorsDemystifying Decoupled Drupal for Developers & Content Authors
Demystifying Decoupled Drupal for Developers & Content AuthorsRachel Wandishin
 
Across the spectrum different approaches to progressively decoupled drupal (...
Across the spectrum  different approaches to progressively decoupled drupal (...Across the spectrum  different approaches to progressively decoupled drupal (...
Across the spectrum different approaches to progressively decoupled drupal (...Acquia
 
OpenStack Identity - Keystone (kilo) by Lorenzo Carnevale and Silvio Tavilla
OpenStack Identity - Keystone (kilo) by Lorenzo Carnevale and Silvio TavillaOpenStack Identity - Keystone (kilo) by Lorenzo Carnevale and Silvio Tavilla
OpenStack Identity - Keystone (kilo) by Lorenzo Carnevale and Silvio TavillaLorenzo Carnevale
 
Drupal & AngularJS - DrupalCamp Spain 2014
Drupal & AngularJS - DrupalCamp Spain 2014Drupal & AngularJS - DrupalCamp Spain 2014
Drupal & AngularJS - DrupalCamp Spain 2014Juampy NR
 
OCCIware presentation at EclipseDay in Lyon, November 2017, by Marc Dutoo, Smile
OCCIware presentation at EclipseDay in Lyon, November 2017, by Marc Dutoo, SmileOCCIware presentation at EclipseDay in Lyon, November 2017, by Marc Dutoo, Smile
OCCIware presentation at EclipseDay in Lyon, November 2017, by Marc Dutoo, SmileOCCIware
 
Model and pilot all cloud layers with OCCIware - Eclipse Day Lyon 2017
Model and pilot all cloud layers with OCCIware - Eclipse Day Lyon 2017Model and pilot all cloud layers with OCCIware - Eclipse Day Lyon 2017
Model and pilot all cloud layers with OCCIware - Eclipse Day Lyon 2017Marc Dutoo
 
OpenStack Identity - Keystone (liberty) by Lorenzo Carnevale and Silvio Tavilla
OpenStack Identity - Keystone (liberty) by Lorenzo Carnevale and Silvio TavillaOpenStack Identity - Keystone (liberty) by Lorenzo Carnevale and Silvio Tavilla
OpenStack Identity - Keystone (liberty) by Lorenzo Carnevale and Silvio TavillaLorenzo Carnevale
 
Connector/J Beyond JDBC: the X DevAPI for Java and MySQL as a Document Store
Connector/J Beyond JDBC: the X DevAPI for Java and MySQL as a Document StoreConnector/J Beyond JDBC: the X DevAPI for Java and MySQL as a Document Store
Connector/J Beyond JDBC: the X DevAPI for Java and MySQL as a Document StoreFilipe Silva
 
Restful Integration with WSO2 ESB
Restful Integration with WSO2 ESB Restful Integration with WSO2 ESB
Restful Integration with WSO2 ESB WSO2
 
AWS Las Vegas meetup 5-31-16 building &scaling web apps - slide deck & labs
AWS Las Vegas meetup 5-31-16 building &scaling web apps - slide deck & labsAWS Las Vegas meetup 5-31-16 building &scaling web apps - slide deck & labs
AWS Las Vegas meetup 5-31-16 building &scaling web apps - slide deck & labsHATech LLC
 
Building RESTful services using SCA and JAX-RS
Building RESTful services using SCA and JAX-RSBuilding RESTful services using SCA and JAX-RS
Building RESTful services using SCA and JAX-RSLuciano Resende
 
Getting Started with Drupal and Acuqia
Getting Started with Drupal and AcuqiaGetting Started with Drupal and Acuqia
Getting Started with Drupal and AcuqiaAcquia
 
Chef and OpenStack Workshop from ChefConf 2013
Chef and OpenStack Workshop from ChefConf 2013Chef and OpenStack Workshop from ChefConf 2013
Chef and OpenStack Workshop from ChefConf 2013Matt Ray
 
Apache Solr Changes the Way You Build Sites
Apache Solr Changes the Way You Build SitesApache Solr Changes the Way You Build Sites
Apache Solr Changes the Way You Build SitesPeter
 
APIdays 2016 - The State of Web API Languages
APIdays 2016  - The State of Web API LanguagesAPIdays 2016  - The State of Web API Languages
APIdays 2016 - The State of Web API LanguagesRestlet
 

Ähnlich wie Decoupling Drupal 8.x: Drupal’s Web Services Today and Tomorrow (20)

[Srijan Wednesday Webinar] Decoupled Demystified: The Present & Future of Dr...
 [Srijan Wednesday Webinar] Decoupled Demystified: The Present & Future of Dr... [Srijan Wednesday Webinar] Decoupled Demystified: The Present & Future of Dr...
[Srijan Wednesday Webinar] Decoupled Demystified: The Present & Future of Dr...
 
RestFul Web Services In Drupal 8
RestFul Web Services In Drupal 8RestFul Web Services In Drupal 8
RestFul Web Services In Drupal 8
 
2.28.17 Introducing DSpace 7 Webinar Slides
2.28.17 Introducing DSpace 7 Webinar Slides2.28.17 Introducing DSpace 7 Webinar Slides
2.28.17 Introducing DSpace 7 Webinar Slides
 
Drupal Integration with Solr for Fabulous CMS Search
Drupal Integration with Solr for  Fabulous CMS SearchDrupal Integration with Solr for  Fabulous CMS Search
Drupal Integration with Solr for Fabulous CMS Search
 
Demystifying Decoupled Drupal for Developers & Content Authors
Demystifying Decoupled Drupal for Developers & Content AuthorsDemystifying Decoupled Drupal for Developers & Content Authors
Demystifying Decoupled Drupal for Developers & Content Authors
 
Across the spectrum different approaches to progressively decoupled drupal (...
Across the spectrum  different approaches to progressively decoupled drupal (...Across the spectrum  different approaches to progressively decoupled drupal (...
Across the spectrum different approaches to progressively decoupled drupal (...
 
OpenStack Identity - Keystone (kilo) by Lorenzo Carnevale and Silvio Tavilla
OpenStack Identity - Keystone (kilo) by Lorenzo Carnevale and Silvio TavillaOpenStack Identity - Keystone (kilo) by Lorenzo Carnevale and Silvio Tavilla
OpenStack Identity - Keystone (kilo) by Lorenzo Carnevale and Silvio Tavilla
 
Drupal & AngularJS - DrupalCamp Spain 2014
Drupal & AngularJS - DrupalCamp Spain 2014Drupal & AngularJS - DrupalCamp Spain 2014
Drupal & AngularJS - DrupalCamp Spain 2014
 
OCCIware presentation at EclipseDay in Lyon, November 2017, by Marc Dutoo, Smile
OCCIware presentation at EclipseDay in Lyon, November 2017, by Marc Dutoo, SmileOCCIware presentation at EclipseDay in Lyon, November 2017, by Marc Dutoo, Smile
OCCIware presentation at EclipseDay in Lyon, November 2017, by Marc Dutoo, Smile
 
Model and pilot all cloud layers with OCCIware - Eclipse Day Lyon 2017
Model and pilot all cloud layers with OCCIware - Eclipse Day Lyon 2017Model and pilot all cloud layers with OCCIware - Eclipse Day Lyon 2017
Model and pilot all cloud layers with OCCIware - Eclipse Day Lyon 2017
 
OpenStack Identity - Keystone (liberty) by Lorenzo Carnevale and Silvio Tavilla
OpenStack Identity - Keystone (liberty) by Lorenzo Carnevale and Silvio TavillaOpenStack Identity - Keystone (liberty) by Lorenzo Carnevale and Silvio Tavilla
OpenStack Identity - Keystone (liberty) by Lorenzo Carnevale and Silvio Tavilla
 
Connector/J Beyond JDBC: the X DevAPI for Java and MySQL as a Document Store
Connector/J Beyond JDBC: the X DevAPI for Java and MySQL as a Document StoreConnector/J Beyond JDBC: the X DevAPI for Java and MySQL as a Document Store
Connector/J Beyond JDBC: the X DevAPI for Java and MySQL as a Document Store
 
Restful Integration with WSO2 ESB
Restful Integration with WSO2 ESB Restful Integration with WSO2 ESB
Restful Integration with WSO2 ESB
 
AWS Las Vegas meetup 5-31-16 building &scaling web apps - slide deck & labs
AWS Las Vegas meetup 5-31-16 building &scaling web apps - slide deck & labsAWS Las Vegas meetup 5-31-16 building &scaling web apps - slide deck & labs
AWS Las Vegas meetup 5-31-16 building &scaling web apps - slide deck & labs
 
Databasecentricapisonthecloudusingplsqlandnodejscon3153oow2016 160922021655
Databasecentricapisonthecloudusingplsqlandnodejscon3153oow2016 160922021655Databasecentricapisonthecloudusingplsqlandnodejscon3153oow2016 160922021655
Databasecentricapisonthecloudusingplsqlandnodejscon3153oow2016 160922021655
 
Building RESTful services using SCA and JAX-RS
Building RESTful services using SCA and JAX-RSBuilding RESTful services using SCA and JAX-RS
Building RESTful services using SCA and JAX-RS
 
Getting Started with Drupal and Acuqia
Getting Started with Drupal and AcuqiaGetting Started with Drupal and Acuqia
Getting Started with Drupal and Acuqia
 
Chef and OpenStack Workshop from ChefConf 2013
Chef and OpenStack Workshop from ChefConf 2013Chef and OpenStack Workshop from ChefConf 2013
Chef and OpenStack Workshop from ChefConf 2013
 
Apache Solr Changes the Way You Build Sites
Apache Solr Changes the Way You Build SitesApache Solr Changes the Way You Build Sites
Apache Solr Changes the Way You Build Sites
 
APIdays 2016 - The State of Web API Languages
APIdays 2016  - The State of Web API LanguagesAPIdays 2016  - The State of Web API Languages
APIdays 2016 - The State of Web API Languages
 

Mehr von Acquia

Acquia_Adcetera Webinar_Marketing Automation.pdf
Acquia_Adcetera Webinar_Marketing Automation.pdfAcquia_Adcetera Webinar_Marketing Automation.pdf
Acquia_Adcetera Webinar_Marketing Automation.pdfAcquia
 
Acquia Webinar Deck - 9_13 .pdf
Acquia Webinar Deck - 9_13 .pdfAcquia Webinar Deck - 9_13 .pdf
Acquia Webinar Deck - 9_13 .pdfAcquia
 
Taking Your Multi-Site Management at Scale to the Next Level
Taking Your Multi-Site Management at Scale to the Next LevelTaking Your Multi-Site Management at Scale to the Next Level
Taking Your Multi-Site Management at Scale to the Next LevelAcquia
 
CDP for Retail Webinar with Appnovation - Q2 2022.pdf
CDP for Retail Webinar with Appnovation - Q2 2022.pdfCDP for Retail Webinar with Appnovation - Q2 2022.pdf
CDP for Retail Webinar with Appnovation - Q2 2022.pdfAcquia
 
May Partner Bootcamp 2022
May Partner Bootcamp 2022May Partner Bootcamp 2022
May Partner Bootcamp 2022Acquia
 
April Partner Bootcamp 2022
April Partner Bootcamp 2022April Partner Bootcamp 2022
April Partner Bootcamp 2022Acquia
 
How to Unify Brand Experience: A Hootsuite Story
How to Unify Brand Experience: A Hootsuite Story How to Unify Brand Experience: A Hootsuite Story
How to Unify Brand Experience: A Hootsuite Story Acquia
 
Using Personas to Guide DAM Results: How Life Time Pumped Up Their UX and CX
Using Personas to Guide DAM Results: How Life Time Pumped Up Their UX and CXUsing Personas to Guide DAM Results: How Life Time Pumped Up Their UX and CX
Using Personas to Guide DAM Results: How Life Time Pumped Up Their UX and CXAcquia
 
Improve Code Quality and Time to Market: 100% Cloud-Based Development Workflow
Improve Code Quality and Time to Market: 100% Cloud-Based Development WorkflowImprove Code Quality and Time to Market: 100% Cloud-Based Development Workflow
Improve Code Quality and Time to Market: 100% Cloud-Based Development WorkflowAcquia
 
September Partner Bootcamp
September Partner BootcampSeptember Partner Bootcamp
September Partner BootcampAcquia
 
August partner bootcamp
August partner bootcampAugust partner bootcamp
August partner bootcampAcquia
 
July 2021 Partner Bootcamp
July  2021 Partner BootcampJuly  2021 Partner Bootcamp
July 2021 Partner BootcampAcquia
 
May Partner Bootcamp
May Partner BootcampMay Partner Bootcamp
May Partner BootcampAcquia
 
DRUPAL 7 END OF LIFE IS NEAR - MIGRATE TO DRUPAL 9 FAST AND EASY
DRUPAL 7 END OF LIFE IS NEAR - MIGRATE TO DRUPAL 9 FAST AND EASYDRUPAL 7 END OF LIFE IS NEAR - MIGRATE TO DRUPAL 9 FAST AND EASY
DRUPAL 7 END OF LIFE IS NEAR - MIGRATE TO DRUPAL 9 FAST AND EASYAcquia
 
Work While You Sleep: The CMO’s Guide to a 24/7/365 Lead Machine
Work While You Sleep: The CMO’s Guide to a 24/7/365 Lead MachineWork While You Sleep: The CMO’s Guide to a 24/7/365 Lead Machine
Work While You Sleep: The CMO’s Guide to a 24/7/365 Lead MachineAcquia
 
Acquia webinar: Leveraging Drupal to Bury Your Sales Team In B2B Leads
Acquia webinar: Leveraging Drupal to Bury Your Sales Team In B2B LeadsAcquia webinar: Leveraging Drupal to Bury Your Sales Team In B2B Leads
Acquia webinar: Leveraging Drupal to Bury Your Sales Team In B2B LeadsAcquia
 
April partner bootcamp deck cookieless future
April partner bootcamp deck  cookieless futureApril partner bootcamp deck  cookieless future
April partner bootcamp deck cookieless futureAcquia
 
How to enhance cx through personalised, automated solutions
How to enhance cx through personalised, automated solutionsHow to enhance cx through personalised, automated solutions
How to enhance cx through personalised, automated solutionsAcquia
 
DRUPAL MIGRATIONS AND DRUPAL 9 INNOVATION: HOW PAC-12 DELIVERED DIGITALLY FOR...
DRUPAL MIGRATIONS AND DRUPAL 9 INNOVATION: HOW PAC-12 DELIVERED DIGITALLY FOR...DRUPAL MIGRATIONS AND DRUPAL 9 INNOVATION: HOW PAC-12 DELIVERED DIGITALLY FOR...
DRUPAL MIGRATIONS AND DRUPAL 9 INNOVATION: HOW PAC-12 DELIVERED DIGITALLY FOR...Acquia
 
Customer Experience (CX): 3 Key Factors Shaping CX Redesign in 2021
Customer Experience (CX): 3 Key Factors Shaping CX Redesign in 2021Customer Experience (CX): 3 Key Factors Shaping CX Redesign in 2021
Customer Experience (CX): 3 Key Factors Shaping CX Redesign in 2021Acquia
 

Mehr von Acquia (20)

Acquia_Adcetera Webinar_Marketing Automation.pdf
Acquia_Adcetera Webinar_Marketing Automation.pdfAcquia_Adcetera Webinar_Marketing Automation.pdf
Acquia_Adcetera Webinar_Marketing Automation.pdf
 
Acquia Webinar Deck - 9_13 .pdf
Acquia Webinar Deck - 9_13 .pdfAcquia Webinar Deck - 9_13 .pdf
Acquia Webinar Deck - 9_13 .pdf
 
Taking Your Multi-Site Management at Scale to the Next Level
Taking Your Multi-Site Management at Scale to the Next LevelTaking Your Multi-Site Management at Scale to the Next Level
Taking Your Multi-Site Management at Scale to the Next Level
 
CDP for Retail Webinar with Appnovation - Q2 2022.pdf
CDP for Retail Webinar with Appnovation - Q2 2022.pdfCDP for Retail Webinar with Appnovation - Q2 2022.pdf
CDP for Retail Webinar with Appnovation - Q2 2022.pdf
 
May Partner Bootcamp 2022
May Partner Bootcamp 2022May Partner Bootcamp 2022
May Partner Bootcamp 2022
 
April Partner Bootcamp 2022
April Partner Bootcamp 2022April Partner Bootcamp 2022
April Partner Bootcamp 2022
 
How to Unify Brand Experience: A Hootsuite Story
How to Unify Brand Experience: A Hootsuite Story How to Unify Brand Experience: A Hootsuite Story
How to Unify Brand Experience: A Hootsuite Story
 
Using Personas to Guide DAM Results: How Life Time Pumped Up Their UX and CX
Using Personas to Guide DAM Results: How Life Time Pumped Up Their UX and CXUsing Personas to Guide DAM Results: How Life Time Pumped Up Their UX and CX
Using Personas to Guide DAM Results: How Life Time Pumped Up Their UX and CX
 
Improve Code Quality and Time to Market: 100% Cloud-Based Development Workflow
Improve Code Quality and Time to Market: 100% Cloud-Based Development WorkflowImprove Code Quality and Time to Market: 100% Cloud-Based Development Workflow
Improve Code Quality and Time to Market: 100% Cloud-Based Development Workflow
 
September Partner Bootcamp
September Partner BootcampSeptember Partner Bootcamp
September Partner Bootcamp
 
August partner bootcamp
August partner bootcampAugust partner bootcamp
August partner bootcamp
 
July 2021 Partner Bootcamp
July  2021 Partner BootcampJuly  2021 Partner Bootcamp
July 2021 Partner Bootcamp
 
May Partner Bootcamp
May Partner BootcampMay Partner Bootcamp
May Partner Bootcamp
 
DRUPAL 7 END OF LIFE IS NEAR - MIGRATE TO DRUPAL 9 FAST AND EASY
DRUPAL 7 END OF LIFE IS NEAR - MIGRATE TO DRUPAL 9 FAST AND EASYDRUPAL 7 END OF LIFE IS NEAR - MIGRATE TO DRUPAL 9 FAST AND EASY
DRUPAL 7 END OF LIFE IS NEAR - MIGRATE TO DRUPAL 9 FAST AND EASY
 
Work While You Sleep: The CMO’s Guide to a 24/7/365 Lead Machine
Work While You Sleep: The CMO’s Guide to a 24/7/365 Lead MachineWork While You Sleep: The CMO’s Guide to a 24/7/365 Lead Machine
Work While You Sleep: The CMO’s Guide to a 24/7/365 Lead Machine
 
Acquia webinar: Leveraging Drupal to Bury Your Sales Team In B2B Leads
Acquia webinar: Leveraging Drupal to Bury Your Sales Team In B2B LeadsAcquia webinar: Leveraging Drupal to Bury Your Sales Team In B2B Leads
Acquia webinar: Leveraging Drupal to Bury Your Sales Team In B2B Leads
 
April partner bootcamp deck cookieless future
April partner bootcamp deck  cookieless futureApril partner bootcamp deck  cookieless future
April partner bootcamp deck cookieless future
 
How to enhance cx through personalised, automated solutions
How to enhance cx through personalised, automated solutionsHow to enhance cx through personalised, automated solutions
How to enhance cx through personalised, automated solutions
 
DRUPAL MIGRATIONS AND DRUPAL 9 INNOVATION: HOW PAC-12 DELIVERED DIGITALLY FOR...
DRUPAL MIGRATIONS AND DRUPAL 9 INNOVATION: HOW PAC-12 DELIVERED DIGITALLY FOR...DRUPAL MIGRATIONS AND DRUPAL 9 INNOVATION: HOW PAC-12 DELIVERED DIGITALLY FOR...
DRUPAL MIGRATIONS AND DRUPAL 9 INNOVATION: HOW PAC-12 DELIVERED DIGITALLY FOR...
 
Customer Experience (CX): 3 Key Factors Shaping CX Redesign in 2021
Customer Experience (CX): 3 Key Factors Shaping CX Redesign in 2021Customer Experience (CX): 3 Key Factors Shaping CX Redesign in 2021
Customer Experience (CX): 3 Key Factors Shaping CX Redesign in 2021
 

Kürzlich hochgeladen

call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️Delhi Call girls
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionSolGuruz
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfkalichargn70th171
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...OnePlan Solutions
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceanilsa9823
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Steffen Staab
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVshikhaohhpro
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxComplianceQuest1
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxbodapatigopi8531
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerThousandEyes
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdfWave PLM
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfkalichargn70th171
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsAlberto González Trastoy
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...kellynguyen01
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providermohitmore19
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsAndolasoft Inc
 

Kürzlich hochgeladen (20)

Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
Tech Tuesday-Harness the Power of Effective Resource Planning with OnePlan’s ...
 
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female serviceCALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
CALL ON ➥8923113531 🔝Call Girls Badshah Nagar Lucknow best Female service
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Hand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptxHand gesture recognition PROJECT PPT.pptx
Hand gesture recognition PROJECT PPT.pptx
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected WorkerHow To Troubleshoot Collaboration Apps for the Modern Connected Worker
How To Troubleshoot Collaboration Apps for the Modern Connected Worker
 
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS LiveVip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
Vip Call Girls Noida ➡️ Delhi ➡️ 9999965857 No Advance 24HRS Live
 
5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf5 Signs You Need a Fashion PLM Software.pdf
5 Signs You Need a Fashion PLM Software.pdf
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time ApplicationsUnveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
Unveiling the Tech Salsa of LAMs with Janus in Real-Time Applications
 
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
Short Story: Unveiling the Reasoning Abilities of Large Language Models by Ke...
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
How To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.jsHow To Use Server-Side Rendering with Nuxt.js
How To Use Server-Side Rendering with Nuxt.js
 

Decoupling Drupal 8.x: Drupal’s Web Services Today and Tomorrow

  • 1. ©2016 Acquia Inc. — Confidential and Proprietary Decoupled Drupal 8.x Drupal’s web services today and tomorrow Preston So Development Manager, Acquia Labs March 29, 2017
  • 2. ©2016 Acquia Inc. Welcome! Preston So (@prestonso) has been a web developer and designer since 2001, a creative professional since 2004, and a Drupal developer since 2007. As Development Manager of Acquia Labs, Preston leads new open-source and research initiatives at Acquia. Preston has presented keynotes at conferences on three continents in multiple languages and speaks around the world about diverse topics such as decoupled Drupal, responsive design, front-end development, and user experience. – drupal.org/u/prestonso – preston.so@acquia.com
  • 4. ©2016 Acquia Inc. What we’ll cover – Drupal web services at a glance – Drupal 8.0: WSCII and foundations – Drupal 8.2: CORS, configuration entities, and DX – Drupal 8.3: User registration and DX – What’s ahead in Drupal 8.5+ – JSON API, GraphQL, and RELAXed Web Services – Epilogue: The wider web services landscape
  • 5. ©2016 Acquia Inc. Drupal web services at a glance
  • 6. ©2016 Acquia Inc. Why are web services important? – Web services enable communication between Drupal and other systems, most commonly decoupled front ends or other back ends. – Decoupled Drupal, or API-first Drupal, is the process of employing Drupal as a data service which exposes data for consumption by other applications. – A REST API is a common entry point for other applications.
  • 7. ©2016 Acquia Inc. Why are web services important? HTTP request HTTP response (JSON, XML) Site or repository built in Drupal Decoupled application Web services Decoupled application Software development kit (SDK)
  • 8. ©2016 Acquia Inc. Drupal web services at a glance – Drupal’s web services can be split into three categories: –Core REST (internal storage or HAL normalization) –Contributed REST (JSON API, RELAXed, Services) –Non-REST web services (GraphQL)
  • 9. ©2016 Acquia Inc. Drupal web services at a glance
  • 10. ©2016 Acquia Inc. Drupal 8.0: WSCII and foundations
  • 11. ©2016 Acquia Inc. WSCII – The Web Services and Context Core Initiative (WSCII), led by Larry Garfield, enabled RESTful web services in Drupal. – The original goal was to enable server-to-server communication, but in recent years actual usage has evolved more toward server-to- client. – The default REST API available out of the box in Drupal 8 core is fully REST-compliant.
  • 12. ©2016 Acquia Inc. The API-first initiative – The API-first initiative (WSCII), led by Wim Leers, is the successor to WSCII and aims to expand Drupal’s web services capabilities. – The API-first initiative captures use cases that are applicable to both fully decoupled and progressively decoupled (in-Drupal) issues. – Meetings are held monthly on the third Monday of every month from 6-7pm GMT, and core conversations often take place at DrupalCon.
  • 13. ©2016 Acquia Inc. Core REST – The core REST modules allow for all content entities (nodes, users, taxonomy terms, comments) to be exposed as JSON+HAL or as JSON representing Drupal’s internal storage, and Views natively supports “REST export” as a new display type. – There are many issues with REST in core; please consider contributing to RX (REST experience) tagged issues.
  • 14. ©2016 Acquia Inc. Core REST modules – Serialization is able to perform serialization by providing normalizers and encoders. First, it normalizes Drupal data (entities and their fields) into arrays with a particular structure. Any normalization can then be sent to an encoder, which transforms those arrays into data formats such as JSON or XML. – RESTful Web Services allows for HTTP methods to be performed on existing resources including but not limited to content entities and views (the latter facilitated through the “REST export" display in Views) and custom resources added through REST plugins.
  • 15. ©2016 Acquia Inc. Core REST modules – HAL builds on top of the Serialization module and adds the Hypertext Application Language normalization, a format that enables you to design an API geared toward clients moving between distinct resources through hyperlinks. – Basic Auth allows you to include a username and password with request headers for operations requiring permissions beyond that of an anonymous user. It should only be used with HTTPS.
  • 16. ©2016 Acquia Inc. Setting up RESTful Drupal $ drush en -y hal basic_auth serialization rest $ drush dl restui && drush en -y restui
  • 17. ©2016 Acquia Inc. Fetching an individual node GET /node/1?_format=json HTTP/1.1 Host: drupal-backend.dd:8083 Accept: application/json Cache-Control: no-cache Postman-Token: 6c55fb8b-3587-2f36-1bee-2141179d1c9c
  • 18. ©2016 Acquia Inc. Creating a new node POST /entity/node HTTP/1.1 Host: drupal-backend.dd:8083 Accept: application/json Authorization: Basic YWRtaW46YWRtaW4= Content-Type: application/json Cache-Control: no-cache Postman-Token: 7776d489-e9bb-cad2-d289-24aa76f8f8a6
  • 19. ©2016 Acquia Inc. Creating a new node { "type": [ {"target_id": "article"} ], "title": [ {"value": "Lorem ipsum dolor sit amet adipiscing"} ], "body": [ {"value": "This is a totally new article"} ] }
  • 20. ©2016 Acquia Inc. Updating an individual node PATCH /node/23 HTTP/1.1 Host: drupal-backend.dd:8083 Accept: application/json Authorization: Basic YWRtaW46YWRtaW4= Content-Type: application/json Cache-Control: no-cache Postman-Token: c1e4df7e-b17b-2256-75c8-55629c8329c7
  • 21. ©2016 Acquia Inc. Updating an individual node { "nid": [ {"value": "23"} ], "type": [ {"target_id": "article"} ], "title": [ {"value": "UPDATE UPDATE UPDATE UPDATE"} ], "body": [ {"value": "Awesome update happened here"} ] }
  • 22. ©2016 Acquia Inc. Cross-origin resource sharing (CORS) # Apache 2 Header set Access-Control-Allow-Origin "*"
  • 23. ©2016 Acquia Inc. Cross-origin resource sharing (CORS) $ drush dl cors && drush en -y cors *|http://localhost:3003 $ drush cr
  • 24. ©2016 Acquia Inc. Waterwheel SDK ecosystem – Waterwheel is a collection of SDKs which make it easier for developers to build Drupal-backed applications in various technologies. – The Waterwheel module includes resource discovery (content schema exports to the client side) and generated Swagger API documentation. – github.com/acquia/waterwheel.js – github.com/acquia/waterwheel.swift – drupal.org/project/waterwheel
  • 25. ©2016 Acquia Inc. Drupal 8.2: CORS, configuration entities, and DX
  • 26. ©2016 Acquia Inc. Changes in Drupal 8.2 – Configuration entity GET support – Opt-in CORS support – RPC endpoints for login, status, logout, and password reset – REST configuration converted to configuration entities – Comments can be updated via REST – Various developer experience benefits
  • 27. ©2016 Acquia Inc. Configuration entity GET support – Configuration entities can now be retrieved via GET, meaning you can now view labels of configuration entities like Vocabularies and Content Types, which is particularly helpful for client-side visibility. curl --user admin:admin --request GET "http://drupal.d8/entity/taxonomy_vocabulary/tags?_format=json" curl --user admin:admin --request GET "http://drupal.d8/contact/feedback?_format=json"
  • 28. ©2016 Acquia Inc. Opt-in CORS support – Fully decoupled applications on domains distinct from the Drupal back end are blocked from issuing asynchronous requests to Drupal due to the same-origin policy unless cross-origin resource sharing is enabled. – In the past, this was done either via Apache 2 configuration or via the CORS module, but there is now core support. – This is not enabled by default due to security consequences of allowing other domains to access Drupal.
  • 29. ©2016 Acquia Inc. Opt-in CORS support: default.services.yml cors.config: enabled: false # Specify allowed headers, like 'x-allowed-header'. allowedHeaders: [] # Specify allowed request methods, specify ['*'] to allow all possible ones. allowedMethods: [] # Configure requests allowed from specific origins. allowedOrigins: ['*'] # Sets the Access-Control-Expose-Headers header. exposedHeaders: false # Sets the Access-Control-Max-Age header. maxAge: false # Sets the Access-Control-Allow-Credentials header. supportsCredentials: false
  • 30. ©2016 Acquia Inc. RPC endpoints for user operations – You can now log into Drupal, check a user’s status, log out, and reset a password entirely through RPC endpoints.
  • 31. ©2016 Acquia Inc. RPC endpoints for login, status, logout, and reset curl --header "Content-type: application/json" --request POST --data '{"name":"admin", "pass":"admin"}' http://drupal.d8/user/login?_format=json curl --header "Content-type: application/json" --request GET http://drupal.d8/user/login_status?_format=json curl --header "Content-type: application/json" --request POST http://drupal.d8/user/logout?_format=json
  • 32. ©2016 Acquia Inc. REST configuration before: rest.settings resources: entity:node: GET: supported_formats: - hal_json supported_auth: - basic_auth POST: supported_formats: - hal_json supported_auth: - basic_auth PATCH: supported_formats: - hal_json supported_auth: - basic_auth DELETE: supported_formats: - hal_json supported_auth: - basic_auth
  • 33. ©2016 Acquia Inc. REST configuration after: rest.resource.entity.node id: entity.node plugin_id: 'entity:node' granularity: method configuration: GET: supported_formats: - hal_json supported_auth: - basic_auth POST: supported_formats: - hal_json supported_auth: - basic_auth PATCH: supported_formats: - hal_json supported_auth: - basic_auth DELETE: supported_formats: - hal_json supported_auth: - basic_auth dependencies: module: - basic_auth - hal - node
  • 34. ©2016 Acquia Inc. Various developer experience benefits – Entity creation via REST now returns the created entity in the response – Entity update via REST now returns the updated entity in the response
  • 35. ©2016 Acquia Inc. Drupal 8.3: User registration and DX – User registration is now possible through REST – Various developer experience advancements (changes in module scope and REST plugin writing process)
  • 36. ©2016 Acquia Inc. What’s ahead in Drupal 8.5+
  • 37. ©2016 Acquia Inc. Prospective improvements in Drupal 8.5+ – Translation support – File upload support – Configuration entity POST, PATCH, DELETE support? – Others?
  • 38. ©2016 Acquia Inc. JSON API, GraphQL, and RELAXed Web Services
  • 39. ©2016 Acquia Inc. RELAXed Web Services – RELAXed Web Services extends features available in core’s REST modules by including support for translations, parent revisions (through the Multiversion module), file attachments, and cross-environment UUID references. – It uses the CouchDB API specification, which means that CouchDB integration with client-side libraries such as PouchDB and Hood.ie makes possible offline-enabled Drupal.
  • 40. ©2016 Acquia Inc. JSON API – JSON API is a specification for REST APIs in JSON popular among JavaScript developers and adopted by the Ember and Rails communities. – JSON API provides a standard way to query single entities, but it also provides all relationships contained therein and query operations via query string parameters. – JSON API allows you to fetch lists of content entities (filter, sort, pagination) — which is currently only possible via multiple requests or Views REST exports.
  • 41. ©2016 Acquia Inc. JSON API – JSON API is likely slated for incorporation into Drupal 8.5 core, though this is prospective. The module is very close to entering beta for stability in contrib. – See also: JSON API by Mateu Aguiló Bosch (drupal.org/project/jsonapi)
  • 42. ©2016 Acquia Inc. OAuth2 – Currently Basic Auth is the only way to authenticate into Drupal’s REST API, and it is less secure than other available options such as OAuth2. – OAuth2 is more secure for authenticating requests, and it is a widely used standard among REST APIs in the wider landscape. – See also: Simple OAuth by Mateu Aguiló Bosch (drupal.org/project/simple_oauth)
  • 43. ©2016 Acquia Inc. GraphQL – GraphQL, originally created by Facebook to power its data fetching, is a query language that enables fewer queries and limits response bloat. – Rather than tightly coupling responses with a predefined schema, GraphQL overturns this common practice by allowing for the client's request to explicitly tailor a response so that the client only receives what it needs. – GraphQL shifts responsibility from the server to the client: the server publishes its possibilities, and the client publishes its requirements instead of receiving a response dictated solely by the server.
  • 44. ©2016 Acquia Inc. GraphQL – Typical REST APIs tend to be static (or versioned, in many cases, e.g. /api/v1) in order to facilitate backwards compatibility for applications. However, in Drupal's case, when the underlying content model is inevitably augmented or otherwise changed, schema compatibility is no longer guaranteed. – With GraphQL's native schema introspection and client-specified queries, the API is much less opaque from the client's perspective in that the client is aware of what response will result according to its own requirements. – See also: GraphQL by Sebastian Siemssen (drupal.org/project/graphql)
  • 45. ©2016 Acquia Inc. Summary: Current core REST
  • 48. ©2016 Acquia Inc. Epilogue: The wider web services landscape
  • 49. ©2016 Acquia Inc. The GraphQL ecosystem – GraphQL – React/Relay – Apollo Data
  • 50. ©2016 Acquia Inc. Content as a service – Contentful – Prismic – Built.io Contentstack – CloudCMS – Kentico Cloud
  • 51. ©2016 Acquia Inc. The future of the CMS – Inversion of control – Editorial experience – Developer experience – User experience
  • 52. ©2016 Acquia Inc. Thank you! Preston So (@prestonso) drupal.org/u/prestonso preston.so@acquia.com Learn more about Acquia Labs: acquia.com/resources/acquia-labs