Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/doesdev/get-scrud
Client for SCRUD style rest APIs
https://github.com/doesdev/get-scrud
Last synced: about 20 hours ago
JSON representation
Client for SCRUD style rest APIs
- Host: GitHub
- URL: https://github.com/doesdev/get-scrud
- Owner: doesdev
- License: mit
- Created: 2017-07-26T00:51:47.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2023-10-16T20:05:36.000Z (about 1 year ago)
- Last Synced: 2024-09-17T18:34:21.303Z (2 months ago)
- Language: JavaScript
- Size: 1.22 MB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# get-scrud [![NPM version](https://badge.fury.io/js/get-scrud.svg)](https://npmjs.org/package/get-scrud) [![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](https://github.com/feross/standard) [![Dependency Status](https://dependencyci.com/github/doesdev/get-scrud/badge)](https://dependencyci.com/github/doesdev/get-scrud)
> Client for [SCRUD](https://en.wikipedia.org/wiki/Create,_read,_update_and_delete) style rest APIs
## Install
```sh
$ npm install --save get-scrud
```## 2.0.0
This is a very breaking change, switching to ES Modules and eliminating babel.
If you are targeting older browsers you will need to include this module in any
babel-ification you're doing.## API
#### Module ships single function which accepts options and returns main function
#### `const apiCall = require('get-scrud')(*opts)`
- **opts** *[object - required]*
- **host** *[string - required]* (ex. `'jsonplaceholder.typicode.com'`)
- **port** *[integer - optional - default: 443]* (ex. `80`)
- **protocol** *[string - optional - default is based on port]* (ex. `http`)
- **basePath** *[string - optional - default: null]* (ex. `'api'` or `'/api'`)
- **timeout** *[string | integer - optional - default: '1m' | 60000]* (ex. `'3m'`)
- **jwt** *[string - optional - default: null]* (ex. `'abc123'`)
- **cache** *[boolean - optional - default: false]* use cached instance instead of a fresh one on each invocation of top-level exported function
- **throttle** *[boolean | object - optional - default: false]* throttle API
calls, in object form uses the below options, if `true` the defaults are applied
- **interval** *[string | integer - default: '45s' | 45000]* reset call
counter every X ms
- **threshold** *[integer - default: 45]* max calls per interval
- **exclude** *[array - default: null]* calls that are ignored by throttle
- Array can contain objects, arrays, or strings
- The following are all equivalent
- `[{ api: 'user', action: 'read' }]`
- `[['user', 'read']]`
- `['user:read']`#### Main function returns `Promise` that resolves with JSON parsed response data
#### `apiCall(*resource, *action, [*id, *body, *jwt])`
- **resource** *[string - required]* (ex. `'posts'`)
- **action** *[string - required]* (ex. `'search'`)
- **id** *[integer - optional - default: null]* (ex. `1`)
- **body** *[object - optional - default: null]* (ex. `{userId: 5}`)
- **jwt** *[string - optional - default: null]* (ex. `'abc123'`)#### Alternatively address each action with `apiCall[action](...)`
#### `apiCall.[search, create, read, update, delete](*resource, [*id, *body, *jwt])`
- **resource** *[string - required]* (ex. `'posts'`)
- **id** *[integer - optional - default: null]* (ex. `1`)
- **body** *[object - optional - default: null]* (ex. `{userId: 5}`)
- **jwt** *[string - optional - default: null]* (ex. `'abc123'`)#### Change options on an instance
If you need to change any options on an existing instance, you can call the main
function with a single argument, which is the new options you want to
merge (Object.assign) with the original. That call will be synchronous.#### `apiCall(*opts)`
- **opts** *[object - required]* (same as above)
## Usage
```js
const opts = {
host: 'jsonplaceholder.typicode.com',
port: 443,
timeout: '3m', // or '180s' or 180000
jwt: `abc123`
}
const apiCall = require('get-scrud')(opts)
const body = {userId: 1, title: `get scrud yo`, body: `you're scrud`}
const jwt = `def456`async function callApis () {
/* no jwt passed, uses jwt set in init if one was set */
// SEARCH
let search = await apiCall('posts', 'search', {userId: 1})
// CREATE
let create = await apiCall('posts', 'create', body)
// READ
let read = await apiCall('posts', 'read', 1)
// UPDATE
let update = await apiCall('posts', 'update', 1, {userId: 5})
// DELETE
let deleted = !!(await apiCall('posts', 'delete', 2))/* passing in jwt to call, overrides jwt set in init if one was set */
// SEARCH
let search = await apiCall('posts', 'search', {userId: 1}, jwt)
// CREATE
let create = await apiCall('posts', 'create', body, jwt)
// READ
let read = await apiCall('posts', 'read', 1, jwt)
// UPDATE
let update = await apiCall('posts', 'update', 1, {userId: 5}, jwt)
// DELETE
let deleted = !!(await apiCall('posts', 'delete', 2, jwt))}
```## Related
[scrud](https://github.com/doesdev/scrud) - Super opinionated, minimalistic, PG centric API fabric
## License
MIT © [Andrew Carpenter](https://github.com/doesdev)