tal7aouy / api-rate-limiter
PHP API速率限制库
v1.0.0
2024-07-30 21:38 UTC
Requires
- php: ^8.0
- laminas/laminas-diactoros: ^3.3
- laminas/laminas-httphandlerrunner: ^2.10
- predis/predis: ^2.2
- psr/http-server-handler: ^1.0
- psr/http-server-middleware: ^1.0
Requires (Dev)
- pestphp/pest: ^1.23
- phpstan/phpstan: ^1.11
- rector/rector: ^1.2
README
此库为PHP应用程序提供速率限制功能,使用Redis进行存储。它支持多种速率限制策略,并可以与PSR-15中间件集成。
安装
要使用此库,您需要以下Composer包,这些包已包含在库的composer.json文件中:
predis/predis- Redis客户端库。laminas/laminas-diactoros- 提供PSR-7(HTTP消息)和PSR-15(HTTP服务器)实现。psr/http-server-handler- 提供处理HTTP请求的RequestHandlerInterface。psr/http-server-middleware- 提供HTTP中间件的MiddlewareInterface。laminas/laminas-httphandlerrunner- 提供用于发出HTTP响应的SapiEmitter类。
此外,为了开发和测试,库还包括以下内容:
phpstan/phpstan- 用于静态分析。pestphp/pest- 用于测试。
安装库及其依赖项
运行以下Composer命令以安装所有必需的包
composer require tal7aouy/api-rate-limiter
确保Redis已安装并正在您的系统上运行。
用法
基本设置
-
初始化Redis连接
创建一个用于处理与Redis服务器连接的
RedisConnection实例。use Tal7aouy\ApiRateLimiter\RedisConnection; $redisConnection = new RedisConnection();
-
初始化Redis速率限制器
使用Redis连接创建一个
RedisRateLimiter实例。use Tal7aouy\ApiRateLimiter\RedisRateLimiter; $redisRateLimiter = new RedisRateLimiter($redisConnection->getClient());
-
初始化速率限制器中间件
创建一个具有所需速率限制和时间窗口的
RateLimiterMiddleware实例。use Tal7aouy\ApiRateLimiter\RateLimiterMiddleware; $rateLimiterMiddleware = new RateLimiterMiddleware($redisRateLimiter, 10, 60); // Limit: 10 requests per minute
-
创建请求处理器
实现一个简单的请求处理器以处理传入的请求。
use Laminas\Diactoros\Response; use Psr\Http\Server\RequestHandlerInterface; use Psr\Http\Message\ServerRequestInterface; use Psr\Http\Message\ResponseInterface; class SimpleHandler implements RequestHandlerInterface { public function handle(ServerRequestInterface $request): ResponseInterface { $response = new Response(); $response->getBody()->write('Hello, World!'); return $response; } }
-
创建服务器请求并通过中间件进行处理
创建服务器请求并通过速率限制器中间件进行处理。
use Laminas\Diactoros\ServerRequestFactory; $serverParams = ['REMOTE_ADDR' => '127.0.0.1']; $request = ServerRequestFactory::fromGlobals($serverParams, [], [], [], []); $response = $rateLimiterMiddleware->process($request, new SimpleHandler()); // Emit Response use Laminas\HttpHandlerRunner\Emitter\SapiEmitter; $emitter = new SapiEmitter(); $emitter->emit($response);
高级配置
自定义Redis配置
您可以通过向RedisConnection类传递自定义配置数组来配置Redis连接。
$redisConnection = new RedisConnection([ 'scheme' => 'tcp', 'host' => 'localhost', 'port' => 6379, ]);
自定义速率限制策略
库支持多种速率限制策略。您可以通过扩展RateLimiter接口来实现自己的策略。
use Tal7aouy\ApiRateLimiter\RateLimiter; class CustomRateLimiter implements RateLimiter { public function isAllowed(string $identifier, int $limit, int $window): bool { // Custom rate limiting logic } }
然后使用自定义速率限制器与中间件一起使用。
$customRateLimiter = new CustomRateLimiter(); $rateLimiterMiddleware = new RateLimiterMiddleware($customRateLimiter, 10, 60);
测试
为每种速率限制策略和Redis集成提供了单元测试。要运行测试,请使用PestPHP。
composer test
文档
有关详细文档和示例,请参阅库中的源代码和注释。
在examples/index.php文件中,您可以查看如何使用此库的完整示例。
贡献
欢迎贡献!请分支存储库并提交拉取请求。
许可
本软件根据MIT许可协议授权。