drya
v1.0.6
Published
Library for integrating back-end to front-end by describing how your api works.
Downloads
3
Maintainers
Readme
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