UNPKG

drupal-jsonapi-client

Version:

Making working with Drupal 8's JSON:API easier, faster and cleaner.

100 lines (71 loc) 2.99 kB
[![npm downloads](https://img.shields.io/npm/dt/drupal-jsonapi-client.svg?maxAge=2592000)](http://npmjs.com/package/drupal-jsonapi-client) [![gzip size](https://img.badgesize.io/https://unpkg.com/drupal-jsonapi-client@3.0.5/lib/Browser.min.js)]() [![version](https://img.shields.io/npm/v/drupal-jsonapi-client.svg)]() # 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 ```js import { GlobalClient, Entity ... } from 'drupal-jsonapi-client' ``` UMD ```html <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: ```js 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](https://github.com/Desarol/drupal-jsonapi-client/tree/3.x/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](https://user-images.githubusercontent.com/1893118/59728701-c6887e00-9200-11e9-9128-2589d87dca87.png)](https://www.desarol.com)