leonardohipolito/laravel-http-client-rate-limiter-middleware

这是我创建的包:laravel-http-client-rate-limiter-middleware

0.0.3 2023-09-05 16:55 UTC

README

Latest Version on Packagist GitHub Tests Action Status GitHub Code Style Action Status Total Downloads

这是一个用于Laravel Http Client的速率限制器中间件。以下是你需要了解的内容:

  • 指定每分钟或每秒的最大请求数量
  • 当达到限制时,进程将sleep直到可以发出请求
  • 实现自己的驱动程序以持久化速率限制器的请求存储。如果速率限制器需要在不同的进程之间工作,该包自带一个InMemoryStore

安装

您可以通过composer安装此包

composer require leonardohipolito/laravel-http-client-rate-limiter-middleware

使用方法

Laravel 9

use GuzzleHttp\Middleware;
use \LeonardoHipolito\LaravelHttpClientRateLimiterMiddleware\RateLimiterMiddleware;
use \LeonardoHipolito\LaravelHttpClientRateLimiterMiddleware\CacheStore;
Http::macro(
    'jsonPlaceholder',
    fn () => Http::baseUrl('https://jsonplaceholder.typicode.com')
        ->withMiddleware(Middleware::mapRequest(RateLimiterMiddleware::perMinute(60, new CacheStore('jsonplaceholder-rate-limit'))))
        ->acceptJson()
        ->asJson()
);

Laravel 10

use \LeonardoHipolito\LaravelHttpClientRateLimiterMiddleware\RateLimiterMiddleware;
use \LeonardoHipolito\LaravelHttpClientRateLimiterMiddleware\CacheStore;
Http::macro(
    'jsonPlaceholder',
    fn () => Http::baseUrl('https://jsonplaceholder.typicode.com')
        ->withRequestMiddleware(RateLimiterMiddleware::perMinute(60, new CacheStore('jsonplaceholder-rate-limit')
        ->acceptJson()
        ->asJson()
);

您可以为每秒或每分钟创建一个速率限制器。

use \LeonardoHipolito\LaravelHttpClientRateLimiterMiddleware\RateLimiterMiddleware;

RateLimiterMiddleware::perSecond(5);
RateLimiterMiddleware::perMinute(60);

自定义存储

默认情况下,速率限制器在Cache中工作。这意味着如果您有第二个PHP进程,但您可以创建自己的存储。

use \LeonardoHipolito\LaravelHttpClientRateLimiterMiddleware\RateLimiterMiddleware;
use MyApp\RateLimiterStore;
use \LeonardoHipolito\LaravelHttpClientRateLimiterMiddleware\RateLimit;

RateLimiterMiddleware::perSecond(3, new RateLimiterStore());

测试

composer test

更新日志

有关最近更改的更多信息,请参阅更新日志

贡献

有关详细信息,请参阅贡献指南

安全漏洞

请查看我们的安全策略,了解如何报告安全漏洞。

致谢

许可证

MIT许可证(MIT)。有关更多信息,请参阅许可证文件