0.0.7 • Published 3 years ago

@codemonkeys-island/nest-http-queue v0.0.7

Weekly downloads
9
License
MIT
Repository
github
Last release
3 years ago

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

License

0.0.7

3 years ago

0.0.6

3 years ago

0.0.5

3 years ago

0.0.4

3 years ago

0.0.2

3 years ago

0.0.1

3 years ago