0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<p>RateLimiter делает управление скоростью обработки запросов более простым, масштабируемым и удобным в применении. Подумайте об этом, если планируете перейти на Laravel 8.</p>
1
<p>RateLimiter делает управление скоростью обработки запросов более простым, масштабируемым и удобным в применении. Подумайте об этом, если планируете перейти на Laravel 8.</p>
2
<p>В прошлых версиях Laravel, включая седьмую, при необходимости ограничения скорости обработки запросов на определённых маршрутах, пользователь мог реализовать это с помощью throttle:</p>
2
<p>В прошлых версиях Laravel, включая седьмую, при необходимости ограничения скорости обработки запросов на определённых маршрутах, пользователь мог реализовать это с помощью throttle:</p>
3
<p>В данной конфигурации параметр<em>30,1</em>означает, что аутентифицированный юзер может получать доступ к маршруту тридцать раз в минуту, а если он превысит данный лимит, фреймворк Laravel вернет ошибку<em>429 Too Many Requests</em>.</p>
3
<p>В данной конфигурации параметр<em>30,1</em>означает, что аутентифицированный юзер может получать доступ к маршруту тридцать раз в минуту, а если он превысит данный лимит, фреймворк Laravel вернет ошибку<em>429 Too Many Requests</em>.</p>
4
<p>Однако числа захардкожены и нет возможности настроить их динамическое изменение либо переиспользование этой настроенной конфигурации для иных маршрутов. Сегодня данную проблему можно решить в Laravel 8, что достигается с помощью фасада RateLimiter.</p>
4
<p>Однако числа захардкожены и нет возможности настроить их динамическое изменение либо переиспользование этой настроенной конфигурации для иных маршрутов. Сегодня данную проблему можно решить в Laravel 8, что достигается с помощью фасада RateLimiter.</p>
5
<h2>Фасад RateLimiter</h2>
5
<h2>Фасад RateLimiter</h2>
6
<p>Используя фасад<em>Illuminate\Support\Facades\RateLimiter</em>, вы получите возможность задать "именованные" ограничители скорости разных конфигураций. Так как у них теперь существуют имена, в свою очередь, появляется возможность применять их для различных маршрутов и групп этих маршрутов.</p>
6
<p>Используя фасад<em>Illuminate\Support\Facades\RateLimiter</em>, вы получите возможность задать "именованные" ограничители скорости разных конфигураций. Так как у них теперь существуют имена, в свою очередь, появляется возможность применять их для различных маршрутов и групп этих маршрутов.</p>
7
<p>Вдобавок к этому, вы сможете создавать несколько ограничителей скорости для различных вариантов применения.</p>
7
<p>Вдобавок к этому, вы сможете создавать несколько ограничителей скорости для различных вариантов применения.</p>
8
<p>Ограничители прописывают в методе<em>boot</em>в<em>AppServiceProvider</em>. К примеру, если нужен ограничитель<em>limitadmin</em>, можно поступить следующим образом:</p>
8
<p>Ограничители прописывают в методе<em>boot</em>в<em>AppServiceProvider</em>. К примеру, если нужен ограничитель<em>limitadmin</em>, можно поступить следующим образом:</p>
9
<p>В данном случае метод for в RateLimiter принимает 2 параметра: • название ограничителя скорости; • замыкание, возвращающее конфигурацию ограничения для маршрутов.</p>
9
<p>В данном случае метод for в RateLimiter принимает 2 параметра: • название ограничителя скорости; • замыкание, возвращающее конфигурацию ограничения для маршрутов.</p>
10
<p>В замыкании можно вернуть фактическое ограничение скорости запросов, применяя метод<em>perMinute</em>из<em>Illuminate\Cache\RateLimiting\Limit</em>, где вы указываете, сколько раз в минуту юзеру разрешён доступ к маршруту.</p>
10
<p>В замыкании можно вернуть фактическое ограничение скорости запросов, применяя метод<em>perMinute</em>из<em>Illuminate\Cache\RateLimiting\Limit</em>, где вы указываете, сколько раз в минуту юзеру разрешён доступ к маршруту.</p>
11
<h2>Применяем именованный ограничитель скорости</h2>
11
<h2>Применяем именованный ограничитель скорости</h2>
12
<p>После создания ограничителя скорости вы сможете назначить маршрут:</p>
12
<p>После создания ограничителя скорости вы сможете назначить маршрут:</p>
13
<p>Как можно видеть, вместо закардкоженной конфигурации, вы просто задействуете имя ограничителя. В результате получаем<strong>читабельное и доступное для многократного применения решение</strong>.</p>
13
<p>Как можно видеть, вместо закардкоженной конфигурации, вы просто задействуете имя ограничителя. В результате получаем<strong>читабельное и доступное для многократного применения решение</strong>.</p>
14
<h2>Динамические ограничители</h2>
14
<h2>Динамические ограничители</h2>
15
<p>Есть возможность создавать также и ограничители скорости запросов, которые основаны на определённых условиях.</p>
15
<p>Есть возможность создавать также и ограничители скорости запросов, которые основаны на определённых условиях.</p>
16
<p>К примеру, замыкание метода<em>for</em>получает объект<em>Illuminate\Http\Request</em>, поэтому мы можем его использовать. Допустим, надо ограничивать лишь обычных пользователей, но не администраторов. Реализовать это можно следующим образом:</p>
16
<p>К примеру, замыкание метода<em>for</em>получает объект<em>Illuminate\Http\Request</em>, поэтому мы можем его использовать. Допустим, надо ограничивать лишь обычных пользователей, но не администраторов. Реализовать это можно следующим образом:</p>
17
<p>Таким образом, используя метод none(), мы можем задавать неограниченную скорость обработки запросов.</p>
17
<p>Таким образом, используя метод none(), мы можем задавать неограниченную скорость обработки запросов.</p>
18
<h2>Кастомный ответ</h2>
18
<h2>Кастомный ответ</h2>
19
<p>Вдобавок ко всему, вместо стандартного<em>429 Too Many Requests</em>мы можем вернуть свой собственный ответ, для чего пригодится метод<em>response</em>:</p>
19
<p>Вдобавок ко всему, вместо стандартного<em>429 Too Many Requests</em>мы можем вернуть свой собственный ответ, для чего пригодится метод<em>response</em>:</p>
20
<p>Вот так вот. Пожалуй, теперь вы не будете спорить с тем, что RateLimiter делает управление скоростью обработки запросов более простым, масштабируемым и удобным в применении.</p>
20
<p>Вот так вот. Пожалуй, теперь вы не будете спорить с тем, что RateLimiter делает управление скоростью обработки запросов более простым, масштабируемым и удобным в применении.</p>
21
<p><em>По материалам статьи "<a>New RateLimiter facade for defining named rate limiters in Laravel 8</a>".</em></p>
21
<p><em>По материалам статьи "<a>New RateLimiter facade for defining named rate limiters in Laravel 8</a>".</em></p>
22
22