首頁 >後端開發 >php教程 >Yii2.0 RESTful API的速度限制是什麼?有什麼用?

Yii2.0 RESTful API的速度限制是什麼?有什麼用?

不言
不言轉載
2019-01-10 11:20:592490瀏覽

這篇文章帶給大家的內容是關於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的速度限制是什麼?有什麼用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除