Laravel 5.4 - 覆盖API'油门:60,1'

vla*_*ani 17 php throttling laravel-5.4

我正在编写大量API来获取和存储数据.
我喜欢默认throttle选项:

protected $middlewareGroups = [
    'api' => [
        'throttle:60,1',
        'bindings',
    ],
];
Run Code Online (Sandbox Code Playgroud)

将请求限制在每分钟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']);
});
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

任何的想法?

谢谢.

更新:
我注意到路由中'throttle:500,1'使用的api.php将在默认'throttle:60,1'指定的Kernel.php文件后设置; 那么,它不起作用.

记录流程执行,第一个调用是:

Illuminate\Routing\Middleware\ThrottleRequests -> handle
Run Code Online (Sandbox Code Playgroud)

Kernel.phpmaxAttempts=60.

然后,第二个电话是:

Illuminate\Routing\Middleware\ThrottleRequests -> handle
Run Code Online (Sandbox Code Playgroud)

api.phpmaxAttempts=500.

在其他也就是说,throttle:500,1api.php文件没有覆盖throttle:60,1的的Kernel.php文件.

man*_*niL 18

目前的答案

根据这个GitHub问题,节流中间件应该"两次"使用(就像你想要那样).如何"正确"处理当前问题只有两种方法:

  1. 编写自己的限制中间件

要么

  1. 为每条路线(组)分别定义油门中间件

老答案

您设置中间件密钥错误!在声明要使用多个中间件时,为它们创建一个新数组

['middleware' => ['WriteToDatabaseMiddleware','throttle:500,1']]
Run Code Online (Sandbox Code Playgroud)

编辑:由于中间件订单,您应该将内核限制设置为您要使用的最高值,以及应该具有较低限制值的所有其他路由到相应的限制.