Yii2.0 RESTful API 之速率限制

Yii2.0 RESTful API 之速率限制

什麼是速率限制?

權威指南翻譯過來爲限流,爲防止濫用,你應該考慮對您的 API 限流。 例如,您可以限制每個用戶 10 分鐘內最多調用 API 100 次。 如果在規定的時間內接收了一個用戶大量的請求,將返回響應狀態代碼 429 (這意味着過多的請求)。

要啓用速率限制,首先需要實現認證類,而關於認證的章節我在 Yii2.0 RESTful API 認證教程 進行了詳細的闡述,本篇就不過多介紹,再次基礎上進行操作

啓用速率限制

翻閱權威指南,我們可以看到要啓用速率限制首先 認證類 需要繼承 yiifiltersRateLimitInterface

生成兩個關鍵字段

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;
}

ok,請求下你的 action,多次請求如果出現 429,那麼表示速率限制啓用成功

以上就是關於 Yii2.0 速率限制的使用,速率限制需要和認證配合着使用,關於認證的,查閱Yii2.0 RESTful API 認證教程 ,這篇文章,推薦您,先看完認證,先做完認證的功能,然後在啓用速率限制

關於 Yii2.0 RESTFul API到此我覺得就結束了,核心功能就是這些,剩下的就是具體的實戰了,多練、多敲,

一共四篇文章,分別爲:

Yii2.0 RESTful API 基礎配置教程

Yii2.0 RESTful API 認證教程

Yii2.0 RESTful API 之版本控制

Yii2.0 RESTful API 之速率限制

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章