phapi / middleware-rate-limit
处理速率限制的中间件
Requires
- php: >=5.5.0
- phapi/cache-nullcache: 1.*
- phapi/contract: 1.*
- phapi/exception: 1.*
Requires (Dev)
- codeclimate/php-test-reporter: dev-master
- mockery/mockery: 0.9.*
- phpunit/phpunit: 4.*
This package is not auto-updated.
Last update: 2021-02-05 22:39:57 UTC
README
速率限制中间件处理客户端允许对端点进行请求的次数。可以为不同的端点设置不同的设置,因此客户端可能允许对一个端点的请求次数比另一个端点多。**请注意**,根据配置,此中间件为每个端点和客户端使用不同的计数器。因此,如果客户端在一个端点上达到限制,可能不会阻止客户端向其他端点发送请求。
安装
默认情况下,此中间件不包括在 Phapi 框架 中,但如果您需要安装它,它可以通过 Packagist 和 Composer 安装。
$ php composer.phar require phapi/middleware-rate-limit:1.*
配置
在速率限制中间件工作之前,需要配置一些设置。
速率限制中间件需要一个缓存,例如 Memcache.
中间件构造函数需要四个参数:用作每个客户端标识符的头部名称、速率限制桶、缓存和路由中间件用于存储匹配端点的请求属性名称。
唯一标识符可以是例如 Client-ID
或其他用于标识的东西。这通常是用于身份验证的相同头部。
速率限制桶基本上是端点级别的设置。`\\Phapi\\Middleware\\RateLimit\\Bucket()` 构造函数接受四个参数
- 桶中总令牌数(默认:800),
- 在时间窗口内应添加的新令牌数(默认:400),
- 时间窗口(秒数)(默认:60),
- 是否应连续添加新令牌(true)或在新令牌添加之前需要通过时间窗口(false)(默认:true)。
需要一个默认桶。如果请求的端点没有自己的桶,则此桶将作为后备。示例
<?php // config rate limit middleware resources $rateLimitBuckets = [ 'default' => new \Phapi\Middleware\RateLimit\Bucket(), '\\Phapi\\Endpoint\\Page' => new \Phapi\Middleware\RateLimit\Bucket(600, 60, 10, false), ]; // Add Middleware $pipeline->pipe(new \Phapi\Middleware\RateLimit( 'Client-ID', $rateLimitBuckets, $container['cache'], // Get the configured cache $requestAttribName = 'routeEndpoint' // The name of the attribute that the route middleware used to store the matched endpoint. ));
如果使用 路由中间件 并使用其默认配置,则不需要使用 `$requestAttribName`。
异常
当
- 未配置默认桶时
- 无法找到匹配的端点时(检查 $requestAttribName)
- 未配置缓存时
它还会抛出 `\\Phapi\\Exception\\TooManyRequests`,当计数器达到零且客户端耗尽令牌时。
Phapi
该中间件是一个Phapi软件包,由Phapi框架使用。中间件也遵循PSR-7规范,并实现了Phapi中间件合约。
许可证
速率限制中间件采用MIT许可证 - 详细信息请参阅license.md文件。
贡献
贡献、错误修复等总是受欢迎。