РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
836 of 1361 menu

Класс RateLimit

Класс RateLimit является частью компонента RateLimiter и представляет собой объект-результат, возвращаемый методом consume класса RateLimiter. Этот объект содержит информацию о том, был ли принят запрос, сколько токенов осталось в корзине и через сколько секунд лимит будет сброшен. Класс не имеет публичного конструктора - экземпляры создаются автоматически внутри RateLimiter. Параметры доступны через методы isAccepted, getRemainingTokens и getRetryAfter.

Синтаксис

$rateLimit = $limiter->consume(1);

Пример

Давайте создадим лимитер и получим объект RateLimit после расхода одного токена:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\RateLimiter\RateLimiterFactory; use Symfony\Component\RateLimiter\Storage\InMemoryStorage; use Symfony\Component\RateLimiter\Policy\TokenBucketLimiter; class RateLimitController extends AbstractController { public function index(): Response { $storage = new InMemoryStorage(); $limiter = new TokenBucketLimiter('api', 10, new \DateInterval('PT1M'), $storage); $rateLimit = $limiter->consume(1); echo $rateLimit->getRemainingTokens(); return new Response(); } } ?>

Результат выполнения кода:

9

Пример

Давайте проверим, принят ли запрос, и выведем время до сброса лимита:

<?php namespace App\Controller; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\RateLimiter\Policy\TokenBucketLimiter; use Symfony\Component\RateLimiter\Storage\InMemoryStorage; class RateLimitController extends AbstractController { public function index(): Response { $storage = new InMemoryStorage(); $limiter = new TokenBucketLimiter('api', 2, new \DateInterval('PT1M'), $storage); $limiter->consume(1); $limiter->consume(1); $rateLimit = $limiter->consume(1); if (!$rateLimit->isAccepted()) { echo 'retry after: ' . $rateLimit->getRetryAfter()->getTimestamp(); } return new Response(); } } ?>

Результат выполнения кода:

"retry after: 1712345678"

Смотрите также

  • класс RateLimiter,
    который управляет лимитами запросов
  • метод consume,
    который расходует токены и возвращает RateLimit
  • метод isAccepted,
    который проверяет, принят ли запрос
  • метод getRemainingTokens,
    который возвращает количество оставшихся токенов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить