tal7aouy/api-rate-limiter

PHP API速率限制库

v1.0.0 2024-07-30 21:38 UTC

This package is auto-updated.

Last update: 2024-10-01 00:11:37 UTC


README

此库为PHP应用程序提供速率限制功能,使用Redis进行存储。它支持多种速率限制策略,并可以与PSR-15中间件集成。

安装

要使用此库,您需要以下Composer包,这些包已包含在库的composer.json文件中:

  1. predis/predis - Redis客户端库。
  2. laminas/laminas-diactoros - 提供PSR-7(HTTP消息)和PSR-15(HTTP服务器)实现。
  3. psr/http-server-handler - 提供处理HTTP请求的RequestHandlerInterface
  4. psr/http-server-middleware - 提供HTTP中间件的MiddlewareInterface
  5. laminas/laminas-httphandlerrunner - 提供用于发出HTTP响应的SapiEmitter类。

此外,为了开发和测试,库还包括以下内容:

  1. phpstan/phpstan - 用于静态分析。
  2. pestphp/pest - 用于测试。

安装库及其依赖项

运行以下Composer命令以安装所有必需的包

composer require tal7aouy/api-rate-limiter

确保Redis已安装并正在您的系统上运行。

用法

基本设置

  1. 初始化Redis连接

    创建一个用于处理与Redis服务器连接的RedisConnection实例。

    use Tal7aouy\ApiRateLimiter\RedisConnection;
    
    $redisConnection = new RedisConnection();
  2. 初始化Redis速率限制器

    使用Redis连接创建一个RedisRateLimiter实例。

    use Tal7aouy\ApiRateLimiter\RedisRateLimiter;
    
    $redisRateLimiter = new RedisRateLimiter($redisConnection->getClient());
  3. 初始化速率限制器中间件

    创建一个具有所需速率限制和时间窗口的RateLimiterMiddleware实例。

    use Tal7aouy\ApiRateLimiter\RateLimiterMiddleware;
    
    $rateLimiterMiddleware = new RateLimiterMiddleware($redisRateLimiter, 10, 60); // Limit: 10 requests per minute
  4. 创建请求处理器

    实现一个简单的请求处理器以处理传入的请求。

    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;
        }
    }
  5. 创建服务器请求并通过中间件进行处理

    创建服务器请求并通过速率限制器中间件进行处理。

    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许可协议授权。