Я пишу много API для получения и хранения данных.
Мне нравится по умолчанию throttle
опция:
protected $middlewareGroups = [
'api' => [
'throttle:60,1',
'bindings',
],
];
ограничить запрос до 60 в минуту; но по какому-то маршруту POST
), Я хотел бы увеличить это значение.
Я пытался установить 'throttle:500,1'
на промежуточном программном обеспечении маршрута как ниже:
Route::group(function () {
Route::get('semaphore/1', ['uses' => 'App\Api\V1\DBs\SemaphoreController@index']);
Route::post('semaphore/1', ['uses' => 'App\Api\V1\DBs\SemaphoreController@store', 'middleware' => 'WriteToDatabaseMiddleware', 'throttle:500,1']);
});
Но это не работает.
Любая идея?
Спасибо.
ОБНОВИТЬ:
Я заметил, что 'throttle:500,1'
используется в api.php
маршрут будет установлен ПОСЛЕ значения по умолчанию 'throttle:60,1'
указано в Kernel.php
файл; тогда, это не работает.
Регистрируя выполнение процесса, первый вызов:
Illuminate\Routing\Middleware\ThrottleRequests -> handle
от Kernel.php
имеет maxAttempts=60
,
Затем второй вызов:
Illuminate\Routing\Middleware\ThrottleRequests -> handle
от api.php
имеет maxAttempts=500
,
Другими словами, throttle:500,1
в api.php
файл не переопределяет throttle:60,1
в Kernel.php
файл.
В соответствии с этот вопрос GitHub, дроссельная заслонка не следует быть использованы «дважды» (как вы хотите сделать это). Есть только два способа, как правильно решить вашу текущую проблему:
или же
Вы неправильно установили ключ промежуточного программного обеспечения! При объявлении использования нескольких промежуточных программ создайте для них новый массив
['middleware' => ['WriteToDatabaseMiddleware','throttle:500,1']]
РЕДАКТИРОВАТЬ: Из-за порядка промежуточного программного обеспечения вы должны установить дроссель ядра в самое высокое значение вы хотите использовать, и все другие маршруты, которые должны иметь нижнее значение дроссельной заслонки к соответствующим.
Других решений пока нет …