国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

速率限制(Rate Limiting)

2020-09-15 17:31 更新

速率限制

為防止濫用,你應(yīng)該考慮對您的 API 限流。 例如,您可以限制每個用戶 10 分鐘內(nèi)最多調(diào)用 API 100 次。 如果在規(guī)定的時間內(nèi)接收了一個用戶大量的請求,將返回響應(yīng)狀態(tài)代碼 429 (這意味著過多的請求)。

要啟用限流, ?user identity class? 應(yīng)該實現(xiàn) ?yii\filters\RateLimitInterface?。 這個接口需要實現(xiàn)以下三個方法:

  • ?getRateLimit()?:返回允許的請求的最大數(shù)目及時間,例如,?[100, 600]? 表示在 600 秒內(nèi)最多 100 次的 API 調(diào)用。
  • ?loadAllowance()?:返回剩余的允許的請求和最后一次速率限制檢查時 相應(yīng)的 UNIX 時間戳數(shù)。
  • ?saveAllowance()?:保存剩余的允許請求數(shù)和當(dāng)前的 UNIX 時間戳。

你可以在 user 表中使用兩列來記錄容差和時間戳信息。 loadAllowance() 和 saveAllowance() 可以通過實現(xiàn)對符合當(dāng)前身份驗證的用戶的這兩列值的讀和保存。 為了提高性能,你也可以考慮使用緩存或 NoSQL 存儲這些信息。

用戶模型中的實現(xiàn)如下所示:

public function getRateLimit($request, $action)
{
    return [$this->rateLimit, 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();
}

一旦 identity 實現(xiàn)所需的接口,Yii 會自動使用 ?yii\filters\RateLimiter ?為 ?yii\rest\Controller ?配置一個行為過濾器來執(zhí)行速率限制檢查。如果速度超出限制, 該速率限制器將拋出一個 ?yii\web\TooManyRequestsHttpException?。

你可以參考以下代碼 在你的 REST 控制器類里配置速率限制:

public function behaviors()
{
    $behaviors = parent::behaviors();
    $behaviors['rateLimiter']['enableRateLimitHeaders'] = false;
    return $behaviors;
}

當(dāng)速率限制被激活,默認(rèn)情況下每個響應(yīng)將包含以下 HTTP 頭發(fā)送目前的速率限制信息:

  • ?X-Rate-Limit-Limit?:同一個時間段所允許的請求的最大數(shù)目;
  • ?X-Rate-Limit-Remaining?:在當(dāng)前時間段內(nèi)剩余的請求的數(shù)量;
  • ?X-Rate-Limit-Reset?:為了得到最大請求數(shù)所等待的秒數(shù)。

你可以禁用這些頭信息通過配置 ?yii\filters\RateLimiter::$enableRateLimitHeaders? 為 false, 就像在上面的代碼示例所示。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號