摘要:之速率限制什么是速率限制權(quán)威指南翻譯過來為限流,為防止濫用,你應(yīng)該考慮對您的限流。如果在規(guī)定的時(shí)間內(nèi)接收了一個(gè)用戶大量的請求,將返回響應(yīng)狀態(tài)代碼這意味著過多的請求。
Yii2.0 RESTful API 之速率限制 什么是速率限制?
權(quán)威指南翻譯過來為限流,為防止濫用,你應(yīng)該考慮對您的 API 限流。 例如,您可以限制每個(gè)用戶 10 分鐘內(nèi)最多調(diào)用 API 100 次。 如果在規(guī)定的時(shí)間內(nèi)接收了一個(gè)用戶大量的請求,將返回響應(yīng)狀態(tài)代碼 429 (這意味著過多的請求)。
要啟用速率限制,首先需要實(shí)現(xiàn)認(rèn)證類,而關(guān)于認(rèn)證的章節(jié)我在 Yii2.0 RESTful API 認(rèn)證教程 進(jìn)行了詳細(xì)的闡述,本篇就不過多介紹,再次基礎(chǔ)上進(jìn)行操作啟用速率限制
翻閱權(quán)威指南,我們可以看到要啟用速率限制首先 認(rèn)證類 需要繼承 yiifiltersRateLimitInterface
生成兩個(gè)關(guān)鍵字段
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"); }
執(zhí)行遷移
php yii migrate
編寫認(rèn)證類,并繼承 RateLimitInterface
namespace apimodels; use Yii; use yiiaseNotSupportedException; use yiiehaviorsTimestampBehavior; use yiidbActiveRecord; use yiifiltersRateLimitInterface; use yiiwebIdentityInterface; class User extends ActiveRecord implements IdentityInterface,RateLimitInterface { . . . }
實(shí)現(xiàn) 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(); }
控制器中實(shí)現(xiàn)調(diào)用
use yiifiltersauthCompositeAuth; use yiifiltersauthHttpBearerAuth; use yiifiltersauthQueryParamAuth; use yiifiltersRateLimiter; 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,多次請求如果出現(xiàn) 429,那么表示速率限制啟用成功
以上就是關(guān)于 Yii2.0 速率限制的使用,速率限制需要和認(rèn)證配合著使用,關(guān)于認(rèn)證的,查閱Yii2.0 RESTful API 認(rèn)證教程 ,這篇文章,推薦您,先看完認(rèn)證,先做完認(rèn)證的功能,然后在啟用速率限制
關(guān)于 Yii2.0 RESTFul API到此我覺得就結(jié)束了,核心功能就是這些,剩下的就是具體的實(shí)戰(zhàn)了,多練、多敲,
一共四篇文章,分別為:
Yii2.0 RESTful API 基礎(chǔ)配置教程
Yii2.0 RESTful API 認(rèn)證教程
Yii2.0 RESTful API 之版本控制
Yii2.0 RESTful API 之速率限制
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/29916.html
摘要:之版本控制之前我寫過兩篇關(guān)于如何搭建,以及認(rèn)證等處理,但是沒有涉及到版本管理,今天就來談?wù)劙姹竟芾砣绾螌?shí)現(xiàn)。如果你還沒有安裝,你可以按照這里的說明進(jìn)行安裝。 Yii2.0 RESTful API 之版本控制 之前我寫過兩篇關(guān)于 Yii2.0 RESTful API 如何搭建,以及 認(rèn)證 等處理,但是沒有涉及到版本管理,今天就來談?wù)劙姹竟芾砣绾螌?shí)現(xiàn)。 索性就從頭開始一步一步搭建吧,但是關(guān)...
摘要:最近在做功能,找了好久的資料,才找到這類的教程,感謝該作者,以下內(nèi)容根據(jù)我的項(xiàng)目實(shí)際情況做了一定的修改。 最近在做Yii2.0 RESTful API功能,找了好久的資料,才找到這類的教程,感謝該作者,以下內(nèi)容根據(jù)我的項(xiàng)目實(shí)際情況做了一定的修改。 安裝yii2.0 安裝 Composer 后,您可以通過在 Web 可訪問的文件夾下運(yùn)行以下命令來 安裝Yii應(yīng)用程序模板: compose...
這篇說下yii2.0開發(fā) API 吧,使用 RESTful API模式 安裝Yii2.0 通過 Composer 安裝 這是安裝Yii2.0的首選方法。如果你還沒有安裝 Composer,你可以按照這里的說明進(jìn)行安裝。 安裝完 Composer,運(yùn)行下面的命令來安裝 Composer Asset 插件: php composer.phar global require fxp/composer-a...
摘要:請求參數(shù)當(dāng)作請求參數(shù)發(fā)送,例如,由于大多數(shù)服務(wù)器都會保存請求參數(shù)到日志,這種方式應(yīng)主要用于請求,因?yàn)樗荒苁褂妙^來發(fā)送使用者從認(rèn)證服務(wù)器上獲取基于協(xié)議的,然后通過發(fā)送到服務(wù)器。 認(rèn)證介紹 和Web應(yīng)用不同,RESTful APIs 通常是無狀態(tài)的, 也就意味著不應(yīng)使用 sessions 或 cookies, 因此每個(gè)請求應(yīng)附帶某種授權(quán)憑證,因?yàn)橛脩羰跈?quán)狀態(tài)可能沒通過 sessions ...
摘要:最近在做認(rèn)證功能,記錄整個(gè)過程,方便以后查看。請求參數(shù)當(dāng)作請求參數(shù)發(fā)送,例如,由于大多數(shù)服務(wù)器都會保存請求參數(shù)到日志,這種方式應(yīng)主要用于請求,因?yàn)樗荒苁褂妙^來發(fā)送使用者從認(rèn)證服務(wù)器上獲取基于協(xié)議的,然后通過發(fā)送到服務(wù)器。 最近在做RESTful API認(rèn)證功能,記錄整個(gè)過程,方便以后查看。本文參照了 https://segmentfault.com/a/119000001636860...
閱讀 4466·2021-11-19 09:59
閱讀 3397·2021-10-12 10:12
閱讀 2684·2021-09-22 15:25
閱讀 3377·2019-08-30 15:55
閱讀 1222·2019-08-29 11:27
閱讀 1502·2019-08-28 18:06
閱讀 2787·2019-08-26 13:41
閱讀 2593·2019-08-26 13:41