An isomorphic JavaScript library that acts as an in memory data store for JSON API data. Changes are broadcast using RxJS. Built to work with React.
npm i json-api-store
bower i json-api-store
To use directly in the browser you can grab the store.prod.js file.
At the moment the primary use can for JSON API Store is in the browser:
// Create a new store instance.
var adapter = new Store.AjaxAdapter({ base: "/api/v1" });
var store = new Store(adapter);
// Define the "categories" type.
store.define([ "categories", "category" ], {
title: Store.attr(),
products: Store.hasMany()
});
// Define the "products" type.
store.define([ "products", "product" ], {
title: Store.attr(),
category: Store.hasOne()
});
// Subscribe to events using RxJS.
store.observable.subscribe(function (event) {
console.log(event.name, event.type, event.id, event.resource);
});
// Load all the products.
store.loadAll("products", { include: "category" }).subscribe(function (products) {
products.length; // 1
products[0].id; // "1"
products[0].title; // "Example Book"
products[0].category.id; // "1"
products[0].category.title; // "Books"
products[0] === store.find("products", "1"); // true
products[0].category === store.find("categories", "1"); // true
});
You can also use JSON API Store in a Node.js environment (currently, there aren't any adapters that work in a Node.js):
NOTE: Without an adapter the CLUD methods (create
, load
, update
and
destroy
) cannot be used.
var Store = require("json-api-store");
var store = new Store();
store.define([ "categories", "category" ], {
title: Store.attr(),
products: Store.hasMany()
});
store.define([ "products", "product" ], {
title: Store.attr(),
category: Store.hasOne()
});
store.add({
type: "products",
id: "1",
attributes: {
title: "Example Product"
},
relationships: {
category: {
data: {
type: "categories",
id: "1"
}
}
}
});
store.add({
type: "categories",
id: "1",
attributes: {
title: "Example Category"
}
});
store.find("products", "1").category.title; // "Example Category"
Documentation is available on the website:
http://particlesystem.com/json-api-store/
A changelog is available on the GitHub repo: