Middleware throttle
Middleware throttle применяется к маршрутам и контроллерам для защиты приложения от чрезмерного количества запросов. Он позволяет ограничить число запросов с одного IP-адреса или для аутентифицированных пользователей в течение заданного периода времени. Первым параметром передаётся максимальное количество попыток, вторым - количество минут, в течение которых действует ограничение.
Синтаксис
<?php
Route::middleware('throttle:max_requests,minutes')->group(function () {
// ...
});
?>
Пример
Давайте ограничим маршрут '/api/users' до 60 запросов в минуту:
<?php
use Illuminate\Support\Facades\Route;
Route::middleware('throttle:60,1')->group(function () {
Route::get('/users', function () {
return ['users' => ['John', 'Jane', 'Bob']];
});
});
?>
Пример
Применим ограничение 100 запросов за 5 минут к контроллеру:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ArticleController;
Route::get('/articles', [ArticleController::class, 'index'])
->middleware('throttle:100,5');
?>
Пример
Используем динамическое ограничение для аутентифицированных пользователей:
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\DashboardController;
Route::middleware(['auth', 'throttle:auth'])->group(function () {
Route::get('/dashboard', [DashboardController::class, 'index']);
Route::get('/profile', [DashboardController::class, 'profile']);
});
?>
Пример
Настроим разные ограничения для разных методов API:
<?php
use Illuminate\Support\Facades\Route;
Route::prefix('api')->group(function () {
Route::get('/posts', function () {
return ['posts' => ['post 1', 'post 2', 'post 3']];
})->middleware('throttle:200,1');
Route::post('/posts', function () {
return ['message' => 'Post created successfully'];
})->middleware('throttle:50,1');
});
?>
Смотрите также
-
метод
middleware,
который назначает middleware для маршрута -
метод
group,
который группирует маршруты с общими параметрами -
метод
prefix,
который добавляет префикс к URI маршрутов -
метод
controller,
который указывает контроллер для маршрута