HTML Diff
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