spatie/guzzle-rate-limiter-middleware

Guzzle 的速率限制器

2.0.1 2020-12-19 18:47 UTC

This package is auto-updated.

Last update: 2024-09-08 18:07:47 UTC


README

Guzzle 的速率限制器中间件

Latest Version on Packagist Build Status Quality Score StyleCI Total Downloads

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)。有关更多信息,请参阅许可文件