Skip to content

Desarol/drupal-jsonapi-client

Repository files navigation

npm downloads gzip size version

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.

https://netmarketshare.com

We bundle regenerator-runtime and proxy-polyfill so that the library works out of the box in IE11.

Sponsors

Desarol

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published