J'écris beaucoup d'API pour obtenir et stocker des données.
J'aime l'option par défaut throttle
:
protected $middlewareGroups = [
'api' => [
'throttle:60,1',
'bindings',
],
];
limiter la demande à 60 par minute; mais pour une route (es: POST
), je voudrais augmenter cette valeur.
J'ai essayé de définir 'throttle:500,1'
on route Middleware comme ci-dessous:
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']);
});
mais ça ne marche pas.
Une idée?
Merci.
MISE À JOUR:
J'ai remarqué que le 'throttle:500,1'
utilisé dans le api.php
l'itinéraire sera défini APRÈS la valeur par défaut 'throttle:60,1'
spécifié dans Kernel.php
fichier; alors, ça ne marche pas.
Consigner l'exécution du processus, le premier appel est:
Illuminate\Routing\Middleware\ThrottleRequests -> handle
de Kernel.php
a maxAttempts=60
.
Ensuite, le deuxième appel est:
Illuminate\Routing\Middleware\ThrottleRequests -> handle
de api.php
a maxAttempts=500
.
En d'autres termes, le throttle:500,1
dans le api.php
le fichier ne remplace pas le throttle:60,1
dans le Kernel.php
fichier.
Selon ce problème GitHub , le middleware d'accélérateur ne devrait pas être utilisé "deux fois" (comme vous voulez le faire). Il n'y a que deux façons de traiter "correctement" votre problème actuel:
ou
Vous avez mal défini la clé du middleware! Lorsque vous déclarez plusieurs middleware à utiliser, créez un nouveau tableau pour eux
['middleware' => ['WriteToDatabaseMiddleware','throttle:500,1']]
EDIT: En raison de l'ordre du middleware, vous devez définir votre accélérateur de noyau sur la valeur la plus élevée que vous souhaitez utiliser, et toutes les autres routes qui devraient avoir un valeur de limitation inférieure vers les routes correspondantes.