@codemonkeys-island/nest-http-queue
v0.0.7
Published
Nest.JS module for handling rate-limited http calls
Downloads
7
Maintainers
Readme
Nest Http Queue
Description
This is a Nest module for limit http calls per timespan.
Sometimes a server you want to access has a rate limit. In this case you have to limit your requests against this server.
This Module provides an easy-to-use service with the same API like the HttpService of Nest.JS
Installation
$ npm i --save @codemonkeys-island/nest-http-queue
Usage
Import the HttpQueueModule in your app.module.ts (or feature module)
import { Module } from '@nestjs/common';
import { HttpQueueModule } from '@codemonkeys-island/nest-http-queue';
@Module({
imports: [
HttpQueueModule.forRoot(),
]
})
export class AppModule {
}
Inject the Queue Service and use it like the HttpService.
import { Injectable } from '@nestjs/common';
import { HttpQueueService } from '@codemonkeys-island/nest-http-queue';
import { Observable } from "rxjs";
import { AxiosResponse } from "axios";
@Injectable()
export class RequestService {
constructor(private httpQueueService: HttpQueueService) {
}
/**
* Queued Request
**/
requestExternalData(): Observable<AxiosResponse<any>> {
return this.httpQueueService.get<any>('https://api.url.com');
}
}
Supported http requests:
GET, POST, PUT, PATCH, HEAD, REQUEST, DELETE
this.httpQueueService.get<any>('https://api.url.com');
this.httpQueueService.post<any>('https://api.url.com', {});
this.httpQueueService.put<any>('https://api.url.com', {});
this.httpQueueService.patch<any>('https://api.url.com', {});
this.httpQueueService.head<any>('https://api.url.com');
this.httpQueueService.request<any>({url: 'https://api.url.com'});
Initialize Module with configuration
Default configruation for rate limit queue is 10 requests per 10000ms and a shared queue ist disabled.
If a project needs a shared queue (if the request resources are limited for example) please enable it via sharedQueue: true
.
{
default: {
sharedQueue: false,
maxRequests: 10,
timespan: 10000,
}
}
For specific hosts you could define specific rules.
{
rules: {
"api.test.com": {
maxRequests: 10,
timespan: 10000,
}
},
}
To inject a custom configuration just initialize the module with a configuration.
import { Module } from '@nestjs/common';
import { HttpQueueModule } from '@codemonkeys-island/nest-http-queue';
@Module({
imports: [
HttpQueueModule.forRoot({
default: {
maxRequests: 5,
timespan: 1000
}
}),
]
})
export class AppModule {
}
Use Custom Rules
Beside of host based queues or a shared queue there is one other queue: custom rule
Define Custom Rule
{
rules: {
"custom-rule": {
maxRequests: 100,
timespan: 100,
}
},
}
Usage of Custom Rule
return this.httpQueueService.get<any>('https://api.url.com', {}, 'custom-rule');
Stay in touch
- Author - mrbacony
License
- Nest Http Queue is MIT licensed.