速率限制
為防止濫用,你應該考慮增加速率限制到您的API。 例如,您可以限制每個使用者的API的使用是在10分鐘内最多100次的API調用。 如果一個使用者同一個時間段内太多的請求被接收, 将傳回響應狀态代碼 429 (這意味着過多的請求)。
要啟用速率限制, [[yii\web\User::identityClass|user identity class]] 應該實作 [[yii\filters\RateLimitInterface]]. 這個接口需要實作以下三個方法:
-
: 傳回允許的請求的最大數目及時間,例如,getRateLimit()
表示在600秒内最多100次的API調用。[100, 600]
-
: 傳回剩餘的允許的請求和相應的UNIX時間戳數 當最後一次速率限制檢查時。loadAllowance()
-
: 儲存允許剩餘的請求數和目前的UNIX時間戳。saveAllowance()
你可以在user表中使用兩列來記錄容差和時間戳資訊。
loadAllowance()
和
saveAllowance()
可以通過實作對符合目前身份驗證的使用者 的這兩列值的讀和儲存。為了提高性能,你也可以 考慮使用緩存或NoSQL存儲這些資訊。
一旦 identity 實作所需的接口, Yii 會自動使用 [[yii\filters\RateLimiter]] 為 [[yii\rest\Controller]] 配置一個行為過濾器來執行速率限制檢查。 如果速度超出限制 該速率限制器将抛出一個 [[yii\web\TooManyRequestsHttpException]]。 你可以在你的 REST 控制器類裡配置速率限制,
public function behaviors()
{
$behaviors = parent::behaviors();
$behaviors['rateLimiter']['enableRateLimitHeaders'] = false;
return $behaviors;
}
-
: 同一個時間段所允許的請求的最大數目;X-Rate-Limit-Limit
-
: 在目前時間段内剩餘的請求的數量;X-Rate-Limit-Remaining
-
: 為了得到最大請求數所等待的秒數。X-Rate-Limit-Reset