spatie / guzzle-rate-limiter-middleware
Guzzle 的速率限制器
2.0.1
2020-12-19 18:47 UTC
Requires
- php: ^7.1|^8.0
- guzzlehttp/guzzle: ^6.3|^7.0
Requires (Dev)
- larapack/dd: ^1.0
- phpunit/phpunit: ^9.3.3
README
Guzzle 的速率限制器中间件
Guzzle 的速率限制器中间件。以下是需要了解的内容
- 指定每分钟或每秒的最大请求数量
- 当达到限制时,进程将
sleep
直到可以发出请求 - 实现自己的驱动来持久化速率限制器的请求存储。如果速率限制器需要在不同的进程间工作,该包附带了一个
InMemoryStore
。
支持我们
我们投入了大量资源来创建一流的开放源代码包。您可以通过购买我们的付费产品之一来支持我们。
我们非常感谢您从您的家乡寄给我们一张明信片,说明您正在使用我们哪些包。您可以在我们的联系页面上找到我们的地址。我们将所有收到的明信片发布在我们的虚拟明信片墙上。
安装
您可以通过 composer 安装此包
composer require spatie/guzzle-rate-limiter-middleware
用法
创建一个Guzzle 中间件堆栈并在客户端上注册它。
use GuzzleHttp\Client; use GuzzleHttp\HandlerStack; use Spatie\GuzzleRateLimiterMiddleware\RateLimiterMiddleware; $stack = HandlerStack::create(); $stack->push(RateLimiterMiddleware::perSecond(3)); $client = new Client([ 'handler' => $stack, ]);
您可以创建一个速率限制器来限制每秒或每分钟的请求数量。
RateLimiterMiddleware::perSecond(3); // Max. 3 requests per second RateLimiterMiddleware::perMinute(5); // Max. 5 requests per minute
自定义存储
默认情况下,速率限制器在内存中工作。这意味着如果您有一个第二个 PHP 进程(或 Guzzle 客户端)正在消耗相同的 API,您仍然可能会遇到速率限制。为了解决这个问题,速率限制器的状态应该持久化到缓存中。使用您自己的缓存实现 Store
接口,并将存储传递给速率限制器。
use MyApp\RateLimiterStore; use Spatie\GuzzleRateLimiterMiddleware\RateLimit; RateLimiterMiddleware::perSecond(3, new RateLimiterStore());
自定义 Store
的 Laravel 示例
<?php namespace MyApp; use Spatie\GuzzleRateLimiterMiddleware\Store; use Illuminate\Support\Facades\Cache; class RateLimiterStore implements Store { public function get(): array { return Cache::get('rate-limiter', []); } public function push(int $timestamp, int $limit) { Cache::put('rate-limiter', array_merge($this->get(), [$timestamp])); } }
测试
composer test
更新日志
有关最近更改的更多信息,请参阅更新日志。
贡献
有关详细信息,请参阅贡献。
安全
如果您发现了关于安全性的错误,请通过security@spatie.be发送邮件,而不是使用问题跟踪器。
明信片软件
您可以使用此包,但如果它进入您的生产环境,我们非常希望您从您的家乡寄给我们一张明信片,说明您正在使用我们哪些包。
我们的地址是:Spatie, Kruikstraat 22, 2018 Antwerp, Belgium。
我们将所有收到的明信片发布在我们的公司网站上。
致谢
许可
MIT 许可证(MIT)。有关更多信息,请参阅许可文件。