web-dev-qa-db-fra.com

Laravel 5.4 - Override API 'throttle: 60,1'

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.

16
vlauciani

Réponse actuelle

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:

  1. Écrire son propre middleware de limitation

ou

  1. Définissez le middleware d'accélérateur séparément pour chaque itinéraire (groupe)

Ancienne réponse

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.

17
manniL