phapi/middleware-rate-limit

此包已被废弃,不再维护。未建议替代包。

处理速率限制的中间件

1.0.0 2015-07-15 14:22 UTC

This package is not auto-updated.

Last update: 2021-02-05 22:39:57 UTC


README

Build status Code Climate Test Coverage

速率限制中间件处理客户端允许对端点进行请求的次数。可以为不同的端点设置不同的设置,因此客户端可能允许对一个端点的请求次数比另一个端点多。**请注意**,根据配置,此中间件为每个端点和客户端使用不同的计数器。因此,如果客户端在一个端点上达到限制,可能不会阻止客户端向其他端点发送请求。

安装

默认情况下,此中间件不包括在 Phapi 框架 中,但如果您需要安装它,它可以通过 PackagistComposer 安装。

$ 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文件。

贡献

贡献、错误修复等总是受欢迎