Что такое ограничение скорости?
Чтобы предотвратить злоупотребление, вам следует рассмотреть возможность ограничения потока вашего API, например, вы можете ограничить каждого пользователя 100 вызовами API за 10 минут. Если в течение указанного времени получено большое количество запросов от пользователя, возвращается код состояния ответа 429 (что означает слишком много запросов).
Чтобы включить ограничение скорости, прежде всего, вам необходимо реализовать класс аутентификации. В главе об аутентификации я подробно объяснил это в руководстве по аутентификации API restful yii2.0. В этой главе мы еще немного поговорим об этом, а затем я буду действовать на основе этого
Включить ограничение скорости
Просматривая авторитетное руководство, мы видим, что для включения ограничения скорости класс аутентификации должен сначала наследовать интерфейс yiifiltersratelimit
Создайте два ключевых поля
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 { . . . }
Реализация Интерфейс ограничения скорости
Требуемый метод
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; }
Хорошо, ваше действие в соответствии с запросом. Если 429 отображается в нескольких запросах, это означает, что ограничение скорости успешно включено
Вышесказанное касается использования ограничения скорости yii2.0, которое необходимо использовать в сочетании с аутентификацией. Для проверки подлинности, пожалуйста, обратитесь к руководству по проверке подлинности API restful yii2.0. В этой статье рекомендуется сначала прочитать проверку подлинности, сначала выполнить функцию проверки подлинности, а затем включить ограничение скорости
Я думаю, что это конец yii2.0 restful API. Основные функции заключаются в следующем. Остальное-это настоящий бой, Больше тренируйся, больше стучи ,
Всего существует четыре статьи:
Руководство по базовой конфигурации Yii2.0 restful API
Учебник по сертификации API Yii2.0 restful
Контроль версий yii2.0 restful API
Ограничение скорости yii2.0 restful API