Giter VIP home page Giter VIP logo

jsonapi's Introduction

jsonapi

jsonapi provides the url composition, serialize and deserialize functionality that implements the JSON:API schema.

Read more about JSON:API schema

installing

Using npm:

$ npm install @workablehr/jsonapi

Basic usage

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.

import {serialize} from '@workablehr/jsonapi';

serialize("job", jobAttrs)
  .include("account", accountId)
  .meta(metaAttrs)
  .value();

Deserialize

A helper for deserializing JSON:API schema objects.

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

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.

import request from "@workablehr/request";
import withJsonapi from "@workablehr/jsonapi";

const jsonapiRequest = withJsonapi(request);

jsonapiRequest("resource.com").then(response => {
  console.log(response);
});

jsonapi's People

Contributors

novykh avatar apostolidhs avatar

Watchers

James Cloos avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.