Yii2.0 RESTFul API 之速率限制

什么是速率限制?

权威指南翻译过来为限流,为防止滥用,你应该考虑对您的 API 限流。 例如,您可以限制每个用户 10 分钟内最多调用 API 100 次。 如果在规定的时间内接收了一个用户大量的请求,将返回响应状态代码 429 (这意味着过多的请求)。

说明:要启用速率限制,首先需要实现认证类

启用速率限制

翻阅权威指南,我们可以看到要启用速率限制首先 认证类 需要继承 yii\filters\RateLimitInterface

生成两个关键字段

php yii migrate/create add_allowance_and_allowance_updated_at_to_user

  

修改 刚才的迁移文件

/**
* {@inheritdoc}
*/
public function safeUp()
{
$this->addColumn('user', 'allowance', $this->integer());
$this->addColumn('user', 'allowance_updated_at', $this->integer());
} /**
* {@inheritdoc}
*/
public function safeDown()
{
$this->dropColumn('user', 'allowance');
$this->dropColumn('user', 'allowance_updated_at');
}

  

执行迁移

php yii migrate

  

编写认证类,并继承 RateLimitInterface

namespace api\models;

use Yii;
use yii\base\NotSupportedException;
use yii\behaviors\TimestampBehavior;
use yii\db\ActiveRecord;
use yii\filters\RateLimitInterface;
use yii\web\IdentityInterface; class User extends ActiveRecord implements IdentityInterface,RateLimitInterface
{
.
.
.
}

  

实现 RateLimitInterface 所需要的方法

public function getRateLimit($request, $action)
{
return [1, 1]; // $rateLimit requests per second
} public function loadAllowance($request, $action)
{
return [$this->allowance, $this->allowance_updated_at];
} public function saveAllowance($request, $action, $allowance, $timestamp)
{
$this->allowance = $allowance;
$this->allowance_updated_at = $timestamp;
$this->save();
}

  

控制器中实现调用

use yii\filters\auth\CompositeAuth;
use yii\filters\auth\HttpBearerAuth;
use yii\filters\auth\QueryParamAuth;
use yii\filters\RateLimiter; public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['rateLimiter'] = [
'class' => RateLimiter::className(),
'enableRateLimitHeaders' => true,
];
$behaviors['authenticator'] = [
'class' => CompositeAuth::className(),
'authMethods' => [
//Http::className(),
HttpBearerAuth::className(),
QueryParamAuth::className(),
],
];
//$behaviors['rateLimiter']['enableRateLimitHeaders'] = true;
return $behaviors;
}

  

最新文章

  1. Linux 执行partprobe命令时遇到Unable to open /dev/sr0 read-write (Read-only file system)
  2. MySQL中MAX函数与Group By一起使用的注意事项(转)
  3. c 语言结构体的三种定义方式
  4. SQL Server书籍整理
  5. 安卓开发_浅谈SubMenu(子菜单)
  6. poj 2063 Investment
  7. OpenSSH 密钥管理:RSA/DSA 认证(转载)
  8. Linux学习笔记19——信号2
  9. Hql 执行CRUD
  10. JAVA二维数组的复制
  11. visio移动形状 上下左右键 移动滚动条
  12. 菜鸟玩云计算之廿二: saltstack 配置
  13. mysql物理备份基本操作
  14. USB鼠标键盘数据格式以及按键键值
  15. loadrunner-关联
  16. idea中pom文件需要添加的依赖
  17. ASP.NET Core CMS管理后台
  18. DevExpress v17.2新版亮点—WPF篇(七)
  19. Microsoft Dynamics CRM 2013 安装 报表服务出现“ SQL Server Reporting Services 帐户是本地用户且不受支持 ”错误的解决方法
  20. Java-Web 用html写一个简单的用户注册界面

热门文章

  1. Dp优化之决策单调栈优化
  2. elasticsearch alias
  3. Vue插槽详解
  4. arcgis python 获得打印机
  5. STM32F4 LTDC
  6. 使用Docker快速搭建Tensorflow开发环境
  7. zip格式压缩文件辅助类(ZipHelper)
  8. myeclipse启动的过程中没提示就自动退出,闪退的有效解决方法
  9. unique_ptr智能指针
  10. python 中 staticmethod 和 classmethod有什么区别