Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/peopledoc/rate-limit-scheduler
Consume APIs with respect to their rate limits
https://github.com/peopledoc/rate-limit-scheduler
approved-public ghec-mig-migrated
Last synced: 17 days ago
JSON representation
Consume APIs with respect to their rate limits
- Host: GitHub
- URL: https://github.com/peopledoc/rate-limit-scheduler
- Owner: peopledoc
- License: mit
- Created: 2019-05-03T11:20:57.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2023-07-10T23:03:52.000Z (over 1 year ago)
- Last Synced: 2024-12-08T18:42:18.635Z (25 days ago)
- Topics: approved-public, ghec-mig-migrated
- Language: TypeScript
- Homepage:
- Size: 426 KB
- Stars: 2
- Watchers: 4
- Forks: 0
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE.md
Awesome Lists containing this project
README
# Rate-limit Scheduler
> This library helps you respect the rate-limits that services apply to their APIs.
Consuming APIs of 3rd party services often requires to deal with rate limits
(such as that of [Github](https://developer.github.com/v3/rate_limit/)).
Properly managing these constraints is not an obvious task and if done improperly, your service will
most likely be forbidden access to said service.This library provides your code with a scheduler that will hold requests in respect to the rate-limits
that the services you are consuming apply.## Installation
```sh
$ npm install --dev rate-limit-scheduler
```## Usage
In order to use the scheduler, you will need to write 2 functions:
* an action: typically, a function performing the API call
* an updater: a function that uses the return of the action to update the rate limits (typically, using headers or metadata)You will find a demo of the scheduler with the Github API in the file `demos/github.js`.
Generally speaking, you will do:
```js
let RateLimitScheduler = require('rate-limit-scheduler')
let scheduler = new RateLimitScheduler()let result = await scheduler.schedule(actionFn, rateUpdaterFn)
```### The action function `actionFn`
This function is your actual call to your rate-limited service.
Async functions are supported.```js
async function actionFn() {
return await fetch('https://api.a-service.com/me?token=ABCDEFGH')
}
```### The update function `rateUpdaterFn`
This function will update the limits that the scheduler will adhere to.
```js
function rateUpdaterFn(res) {
return {
limit: res.headers['x-ratelimit-limit'],
reset: res.headers['x-ratelimit-reset'] * 1000,
remaining: res.headers['x-ratelimit-remaining']
}
}
```The following properties are expected:
* `limit`: (optional) The maximum number of requests per timeframe.
* `reset`: An [UNIX Epoch time](https://en.wikipedia.org/wiki/Unix_time) indicating when the counter of allowed requests will be reset to `limit`.
* `remaining`: The number of remaining requests before being refused to access the API.## License
Licensed under the MIT License.
See [LICENSE.md](LICENSE.md)
© 2019 PeopleDoc SAS and the contributors