gnikolovski / cb-rate-limiter
使用 Couchbase 存储数据的 API 速率限制器
Requires
- php: >=5.3.0
This package is auto-updated.
Last update: 2024-09-05 00:54:05 UTC
README
Couchbase API 速率限制器是一个超级简单的 PHP 包,用于限制对您的公共 API 的访问。它最初是为我的一个项目创建的,我在 Slimframework 中使用它,但它可以用于您的任何项目。
我选择使用 Couchbase,因为我的应用程序的其他部分正在使用这个数据库来存储数据。Couchbase 是一个超级快的 NoSQL 数据库,所以它非常适合这类任务。
如何安装?
安装 CB Rate Limiter 最简单、最推荐的方法是使用 composer
composer require gnikolovski/cb-rate-limiter
如何使用它?
使用此包的最佳方式是将它作为路由上的中间件。将其放在最前面 - 在任何其他中间件之前,如果用户达到您设定的限制,您应该返回 http 状态码 429(请求过多)并带有适当的头信息。
这是如何将此包与 Slimframework 一起作为中间件使用的示例
$app = new \Slim\App; $app->add(function ($request, $response, $next) { $limiter = new CbRateLimiter($hostname, $bucket, $password); $limiter->whitelist($your_ip_address); $exceeded = $limiter->isExceeded($ip_address, $max_requests, $in_minutes); if (!$exceeded) { $resp = $next($request, $response) ->withHeader('X-RateLimit-Limit', 10) ->withHeader('X-RateLimit-Remaining', $limiter->getRemaining()); } else { $resp = $response->withStatus(429) ->withHeader('X-RateLimit-Limit', 10) ->withHeader('X-RateLimit-Remaining', 0); } return $resp; }); $app->get('/', function ($request, $response, $args) { $response->getBody()->write('Hello world'); return $response; }); $app->run();
类在构造函数中使用以下三个变量实例化
$hostname - Couchbase 服务器的 IP 地址
$bucket - 存储数据的 bucket 名称
$password - 数据库密码
创建 $limiter 对象后,您必须调用 isExceeded() 方法并提供以下数据
$ip_address - 尝试访问 API 路由的用户的 IP 地址
$max_requests - 单位时间内愿意接受的最大请求数
$in_minutes - 单位时间
可以使用全局 PHP 变量提供用户的 IP 地址
$_SERVER['REMOTE_ADDR']
或者使用一些包,如 akrabat/rka-ip-address-middleware。
变量 $max_requests 和 $in_minutes 应该是整数。如果您想在一个小时内接受来自一个 IP 地址的 100 个请求,您将编写
$limiter->isExceeded($_SERVER['REMOTE_ADDR'], 100, 60);
要求
要在 PHP 中使用 Couchbase,您必须安装 PHP SDK。了解更多信息请访问:(http://developer.couchbase.com/documentation/server/4.0/sdks/php-2.0/download-links.html)
作者
Goran Nikolovski - https://gorannikolovski.com