Drupal JSON:API Client
This package makes manipulating Drupal entities and resources easier via the JSON:API module which is now in Drupal core (8.7.x).
Installation
npm i --save drupal-jsonapi-client
yarn add drupal-jsonapi-client
Usage
ES6 module
import { GlobalClient, Entity ... } from 'drupal-jsonapi-client'
UMD
<script src="https://unpkg.com/drupal-jsonapi-client@3.0.5/lib/Browser.min.js"></script>
<script>
const Entity = window.DrupalJsonApi.Entity
Entity
.Load('node', 'article', 'uuid')
.then(entity => {
console.log(entity)
})
</script>
Key features
- Lightweight - HTTP library agnostic, defaults to
axios
(3kb) - Cross platform - works in node.js and the browser
- Drupal specific - abstracts away the nuances of working with Drupal's JSON:API implementation
- Object oriented - leverages ES6 classes to neatly package JSON:API objects
- Familiar - takes inspiration from Drupal's Entity API syntax
It's still in an early stage and contributions are welcome. The general idea is to maintain a base Entity
class which can be extended to provide more context specific uses ie. Article extends Entity
.
Here's some syntax sugar to sink your teeth into that illustrates the vision:
import { GlobalClient, Entity } from 'drupal-jsonapi-client'
GlobalClient.baseUrl = 'https://www.example.com'
GlobalClient.sendCookies = true // use this when running code on the same origin as Drupal
const doRequest = async () => {
// Update an existing entity
const entity = await Entity.Load('node', 'article', 'uuid')
entity.title = 'Drupal JSON:API rocks!'
// PATCH the existing entity
await entity.save()
// Create a new entity
const newEntity = new Entity('node', 'article')
// .setAttribute must be used here as Entity
// doesn't know whether title should be
// an attribute or a relationship
newEntity.setAttribute('title', 'A brand new article!')
// Future references to "title" can use .title
newEntity.title = 'We changed the title'
// POST the new entity
await newEntity.save()
}
doRequest()
Examples
For more detailed usage, see the examples.
Environment support
Node.js
node.js >= 6.0.0
Browsers
The library works in all modern browsers.
We bundle regenerator-runtime
and proxy-polyfill
so that the library works out of the box in IE11.