Чтобы избежать злоупотреблений, вам следует подумать о добавлении ограничений количества запросов к вашим API. Например, вы можете ограничить
Чтобы избежать злоупотреблений, вам следует подумать о добавлении ограничения частоты запросов к вашим API. Например, вы можете ограничить
использование каждого метода API, поставив для каждого пользователя ограничение не более 100 вызовов API в течение 10 минут. Если от пользователя
использование каждого метода API, поставив для каждого пользователя ограничение: не более 100 вызовов API в течение 10 минут. Если от пользователя
приходит большее количество запросов в течение этого периода времени, будет возвращаться ответ с кодом состояния 429 (означающий «слишком много запросов»).
приходит большее количество запросов в течение этого периода времени, будет возвращаться ответ с кодом состояния 429 (означающий «слишком много запросов»).
Чтобы включить ограничение количества запросов, *[[yii\web\User::identityClass|класс user identity]]* должен реализовывать интерфейс [[yii\filters\RateLimitInterface]].
Чтобы включить ограничение частоты запросов, *[[yii\web\User::identityClass|класс user identity]]* должен реализовывать интерфейс [[yii\filters\RateLimitInterface]].
Этот интерфейс требует реализации следующих трех методов:
Этот интерфейс требует реализации следующих трех методов:
*`getRateLimit()`: возвращает максимальное количество разрешенных запросов и период времени, т.е. `[100, 600]`, что означает
*`getRateLimit()`: возвращает максимальное количество разрешенных запросов и период времени, т.е. `[100, 600]`, что означает
...
@@ -21,7 +21,7 @@
...
@@ -21,7 +21,7 @@
Так как *identity class* реализует требуемый интерфейс, Yii будет автоматически использовать [[yii\filters\RateLimiter]],
Так как *identity class* реализует требуемый интерфейс, Yii будет автоматически использовать [[yii\filters\RateLimiter]],
настроенный как фильтр действий в [[yii\rest\Controller]], для выполнения проверки на количество разрешенных запросов. Если ограничение на количество
настроенный как фильтр действий в [[yii\rest\Controller]], для выполнения проверки на количество разрешенных запросов. Если ограничение на количество
запросов будет превышено, выбрасывается исключение [[yii\web\TooManyRequestsHttpException]]. Вы можете настроить ограничитель количества запросов
запросов будет превышено, выбрасывается исключение [[yii\web\TooManyRequestsHttpException]]. Вы можете настроить ограничитель частоты запросов
в ваших классах REST-контроллеров следующим образом:
в ваших классах REST-контроллеров следующим образом:
```php
```php
...
@@ -33,7 +33,7 @@ public function behaviors()
...
@@ -33,7 +33,7 @@ public function behaviors()
}
}
```
```
Когда ограничение количества запросов включено, по умолчанию каждый ответ будет возващаться со следующими HTTP-заголовками, содержащими
Когда ограничение частоты запросов включено, по умолчанию каждый ответ будет возващаться со следующими HTTP-заголовками, содержащими
информацию о текущих ограничениях количества запросов:
информацию о текущих ограничениях количества запросов:
*`X-Rate-Limit-Limit`: максимальное количество запросов, разрешенное в течение периода времени;
*`X-Rate-Limit-Limit`: максимальное количество запросов, разрешенное в течение периода времени;