1.0.6 • Published 3 years ago

drya v1.0.6

Weekly downloads
-
License
MIT
Repository
-
Last release
3 years ago

Drya

Dont Repeat Your API (Integration)

Under Development

Drya is a library that aims to aid front-end to back-end integration by offering functions to describe how your API works instead of programming each endpoint.

Installing

Using npm

npm install drya

Using yarn

yarn add drya

Example

Common JS

Basic configuration (ideally in some api.js)

const { Drya } = require("drya");

export const mainAPI = Drya.createAPI("https://jsonplaceholder.typicode.com");

export const postsEndpoint = mainAPI.createEndpoint("/posts");

Listing resources from an api.

const { postsEndpoint } = require("./api.js")

const postsResponse = await postsEndpoint.list();
// or postsEndpoint.list().then({data} =>{
})

Retrieving a single resource from an api.

const { postsEndpoint } = require("./api.js");

const postResponse = await postsEndpoint.retrieve("/", 3);
const post = postResponse.data;

Updating a resource.

const { postsEndpoint } = require("./api.js");

await postsEndpoint.update("/", 3, { title: "Updating from function" });

// or

const postResponse = await postsEndpoint.retrieve("/", 3);
const post = postResponse.data;

post.title = "Updating from retrieve";
await post.update();

// or

const posts = await postsEndpoint.list();
posts.data[0].title = "Updating from list";
await posts.data[0].update();

Creating a resource

const { postsEndpoint } = require("./api.js");

await postsEndpoint.create("/", { title: "fooTest", body: "bar", userId: 1 });

Pagination

  • BasePagination - For extending using your own defaults
  • LimitOffsetPagination - Uses limit and offset params.
  • PageNumberPagination - Uses page param.

Drya pagination expects an listing result like:\

{
    "count": 10,
    "results":[
        ...
    ]
}

OBS: This behaviour can be changed by extending the desired Pagination class that shown later below.

Paginating response from listing.

import { Drya } from "drya";
import { LimitOffsetPagination } from "drya/pagination";

const mainAPI = Drya.createAPI("https://jsonplaceholder.typicode.com");

const postsEndpoint = mainAPI
  .createEndpoint("/posts")
  .paginate(LimitOffsetPagination, {
    pageSize: 10,
    initialPage: 1,
    limitParamName: "_limit", // (Optional) - Defaults to "limit"
    offsetParamName: "_offset", // (Optional) - Defaults to "offset"
  }); // This will only affect listing

const posts = await postsEndpoint.list();
const secondPagePosts = await posts.next(); // Loads more

Custom Pagination

Drya provides an abstract BasePagination class that can be extended. But if you only need a minor alteration like removing count or fetching the results directly from data, you can extend the desired Pagination class.

import { Drya } from "drya";
import { LimitOffsetPagination } from "drya/pagination";

class JSONPlaceholderPagination extends LimitOffsetPagination {
  pageSize: 10,
  initialPage: 1,
  limitParamName: "_limit", // (Optional) - Defaults to "limit"
  offsetParamName: "_offset", // (Optional) - Defaults to "offset"

  getResults(response) {
    return response.data;
  }
}

const mainAPI = Drya.createAPI("https://jsonplaceholder.typicode.com");

const postsEndpoint = mainAPI
  .createEndpoint("/posts")
  .paginate(JSONPlaceholderPagination); // This will only affect listing

const posts = await postsEndpoint.list();
const secondPagePosts = await posts.next(); // Loads more
1.0.6

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago