Устранение ошибки 429: слишком много запросов в Laravel — подробное руководство

Ошибка 429, известная как «Слишком много запросов», возникает, когда клиент превысил ограничение скорости, установленное сервером. В Laravel эта ошибка может возникнуть при выполнении запросов к API. В этой статье мы рассмотрим несколько способов устранения ошибки 429 в Laravel, а также приведем примеры кода.

Метод 1: реализация промежуточного программного обеспечения, ограничивающего скорость

Laravel предоставляет встроенное промежуточное программное обеспечение под названием throttle, которое позволяет ограничивать скорость для маршрутов API. Чтобы использовать это промежуточное программное обеспечение, выполните следующие действия:

Шаг 1. Откройте файл app/Http/Kernel.php.
Шаг 2. Найдите массив $routeMiddlewareи добавьте следующую строку:

'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class,

Шаг 3. Примените промежуточное программное обеспечение throttleк маршрутам API с помощью метода middleware. Например:

Route::group(['middleware' => 'throttle:60,1'], function () {
    // Your API routes
});

В приведенном выше коде 60представляет собой максимальное количество запросов, разрешенных в минуту, а 1указывает количество минут для кэширования счетчика запросов.

Метод 2: настройка ограничения скорости в промежуточном программном обеспечении API

Другой подход к ограничению скорости в Laravel — создание специального промежуточного программного обеспечения. Вот пример:

Шаг 1. Создайте новое промежуточное ПО с помощью команды artisan:

php artisan make:middleware RateLimitMiddleware

Шаг 2. Откройте вновь созданный файл промежуточного программного обеспечения (app/Http/Middleware/RateLimitMiddleware.php) и добавьте следующий код:

<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Cache\RateLimiter;
use Symfony\Component\HttpFoundation\Response;
class RateLimitMiddleware
{
    protected $limiter;
    public function __construct(RateLimiter $limiter)
    {
        $this->limiter = $limiter;
    }
    public function handle($request, Closure $next, $maxAttempts = 60, $decayMinutes = 1)
    {
        $key = $request->ip();
        if ($this->limiter->tooManyAttempts($key, $maxAttempts)) {
            return new Response('Too Many Requests', 429);
        }
        $this->limiter->hit($key, $decayMinutes);
        return $next($request);
    }
}

Шаг 3. Зарегистрируйте промежуточное ПО в массиве $routeMiddlewareв app/Http/Kernel.php:

'rate_limit' => \App\Http\Middleware\RateLimitMiddleware::class,

Шаг 4. Примените промежуточное программное обеспечение rate_limitк маршрутам API:

Route::group(['middleware' => 'rate_limit'], function () {
    // Your API routes
});

Метод 3: использование стороннего пакета

Если вы предпочитаете более продвинутое решение для ограничения скорости, вы можете использовать сторонние пакеты, такие как «spatie/laravel-rate-limiter» или «throttle/visits», для управления ограничением скорости в Laravel. Эти пакеты предоставляют дополнительные функции и гибкость для управления ограничениями скорости в вашем приложении.

Ошибка 429: слишком большое количество запросов можно эффективно устранить в Laravel, внедрив методы ограничения скорости. В этой статье мы рассмотрели два метода: использование встроенного промежуточного программного обеспечения throttleLaravel и создание специального промежуточного программного обеспечения, ограничивающего скорость. Кроме того, мы обсудили возможность использования сторонних пакетов для более продвинутых функций ограничения скорости. Применяя эти методы, вы можете гарантировать, что ваш API Laravel останется стабильным и отзывчивым даже в условиях интенсивного трафика.

Не забудьте учитывать конкретные требования вашего приложения при выборе подходящего подхода к ограничению скорости.