データを取得して保存するためのAPIをたくさん書いています。
デフォルトのthrottle
オプションが好きです:
protected $middlewareGroups = [
'api' => [
'throttle:60,1',
'bindings',
],
];
要求を1分あたり60に制限します。しかし、いくつかのルート(es: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
from Kernel.php
にはmaxAttempts=60
があります。
次に、2番目の呼び出しは次のとおりです。
Illuminate\Routing\Middleware\ThrottleRequests -> handle
from api.php
にはmaxAttempts=500
があります。
つまり、throttle:500,1
ファイルのapi.php
は、throttle:60,1
ファイルのKernel.php
をオーバーライドしません。
このGitHubの問題 によると、スロットルミドルウェアはを2回使用するべきではありません(あなたがそれをしたいように)。現在の問題を「正しく」処理する方法は2つしかありません。
または
ミドルウェアキーを間違って設定しました!使用する複数のミドルウェアを宣言する場合、それらの新しいミドルウェアを作成します
['middleware' => ['WriteToDatabaseMiddleware','throttle:500,1']]
EDIT:ミドルウェアの順序のため、使用するカーネルスロットルを最高値に設定する必要があります。 より低いスロットル値対応するものに。