权威指南翻译过来为限流,为防止滥用,你应该考虑对您的 API 限流。 例如,您能够限制每一个用户 10 分钟内最多调用 API 100 次。 若是在规定的时间内接收了一个用户大量的请求,将返回响应状态代码 429 (这意味着过多的请求)。php
要启用速率限制,首先须要实现认证类,而关于认证的章节我在 Yii2.0 RESTful API 认证教程 进行了详细的阐述,本篇就不过多介绍,再次基础上进行操做
翻阅权威指南,咱们能够看到要启用速率限制首先 认证类 须要继承 yiifiltersRateLimitInterfacelaravel
生成两个关键字段web
php yii migrate/create add_allowance_and_allowance_updated_at_to_user
修改 刚才的迁移文件api
/** * {@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'); }
执行迁移restful
php yii migrate
编写认证类,并继承 RateLimitInterface
yii2
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
所须要的方法yii
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(); }
控制器中实现调用post
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; }
ok,请求下你的 action,屡次请求若是出现 429,那么表示速率限制启用成功this
以上就是关于 Yii2.0 速率限制的使用,速率限制须要和认证配合着使用,关于认证的,查阅Yii2.0 RESTful API 认证教程 ,这篇文章,推荐您,先看完认证,先作完认证的功能,而后在启用速率限制 spa
关于 Yii2.0 RESTFul API到此我以为就结束了,核心功能就是这些,剩下的就是具体的实战了,多练、多敲,
一共四篇文章,分别为: