https://github.com/workable/jsonapi
https://github.com/workable/jsonapi
Last synced: about 2 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/workable/jsonapi
- Owner: Workable
- License: mit
- Created: 2020-02-13T10:45:03.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2024-04-15T14:55:27.000Z (almost 2 years ago)
- Last Synced: 2025-01-20T15:22:22.534Z (about 1 year ago)
- Language: JavaScript
- Size: 1.61 MB
- Stars: 1
- Watchers: 14
- Forks: 1
- Open Issues: 16
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
# jsonapi
jsonapi provides the url composition, serialize and deserialize functionality that implements the JSON:API schema.
Read more about [JSON:API schema](https://jsonapi.org/)
## installing
Using npm:
```
$ npm install @workablehr/jsonapi
```
## Basic usage
```javascript
import {serialize} from '@workablehr/jsonapi';
const payload = serialize("sourceName", {
attr1: "value1",
attr2: "value2"
}).value();
const url = makeUrl("sourceName")
.include("source2")
.filter("fieldName", ["fieldValue"]);
request(url, { body: payload })
.then(deserialize)
.catch(error => {
throw deserialize(error);
});
```
## Serialize
A helper for generating JSON:API schema objects.
```javascript
import {serialize} from '@workablehr/jsonapi';
serialize("job", jobAttrs)
.include("account", accountId)
.meta(metaAttrs)
.value();
```
## Deserialize
A helper for deserializing JSON:API schema objects.
```javascript
import {deserialize} from '@workablehr/jsonapi';
deserialize({
data: [
{
id: 1,
type: "type1",
attributes: { attr1: "value1" },
relationships: { type2: { data: { id: 2, type: "type2" } } }
}
],
included: [{ type: "type2", id: 2, attributes: { attr2: "value2" } }]
});
// {
// type1: [{ id: 1, attr1: "value1", type: "type1", type2Id: 2 }],
// type2: { id: 2, attr2: "value2", type: "type2" }
// }
```
## makeUrl
A helper for generating search queries according to JSON:API schema
```javascript
import {makeUrl} from '@workablehr/jsonapi';
makeUrl("resource.com")
.include(["account"])
.filter("staffing", true)
.only("job", ["title", "description"])
.only("account", "name")
.page(3)
.limit(15)
.sort(["title", "-description"])
.search("some term")
.value();
// resource.com?include=account&filter[staffing]=true&fields[job]=title,description&fields[account]=name&page[number]=3&page[size]=15&sort=title,-description
```
## Recommended usage
The jsonapi matches perfectly with the `@workablehr/request` middlewares.
You can easily compose a json api request that returns a deserialized response.
```javascript
import request from "@workablehr/request";
import withJsonapi from "@workablehr/jsonapi";
const jsonapiRequest = withJsonapi(request);
jsonapiRequest("resource.com").then(response => {
console.log(response);
});
```