gnikolovski/cb-rate-limiter

使用 Couchbase 存储数据的 API 速率限制器

1.0.3 2020-06-04 15:34 UTC

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