權威指南翻譯過來爲限流,爲防止濫用,你應該考慮對您的 API 限流。 例如,您能夠限制每一個用戶 10 分鐘內最多調用 API 100 次。 若是在規定的時間內接收了一個用戶大量的請求,將返回響應狀態代碼 429 (這意味着過多的請求)。php
要啓用速率限制,首先須要實現認證類,而關於認證的章節我在 Yii2.0 RESTful API 認證教程 進行了詳細的闡述,本篇就不過多介紹,再次基礎上進行操做laravel
翻閱權威指南,咱們能夠看到要啓用速率限制首先 認證類 須要繼承 yii\filters\RateLimitInterfaceweb
生成兩個關鍵字段api
php yii migrate/create add_allowance_and_allowance_updated_at_to_user
複製代碼
修改 剛纔的遷移文件bash
/**
* {@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();
}
複製代碼
控制器中實現調用ide
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,那麼表示速率限制啓用成功post
以上就是關於 Yii2.0 速率限制的使用,速率限制須要和認證配合着使用,關於認證的,查閱Yii2.0 RESTful API 認證教程 ,這篇文章,推薦您,先看完認證,先作完認證的功能,而後在啓用速率限制
關於 Yii2.0 RESTFul API到此我以爲就結束了,核心功能就是這些,剩下的就是具體的實戰了,多練、多敲,
一共四篇文章,分別爲: