我正在编写大量 API 来获取和存储数据。
我喜欢默认的 throttle
选项:
protected $middlewareGroups = [
'api' => [
'throttle:60,1',
'bindings',
],
];
将请求限制为每分钟 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']);
});
但它不起作用。
任何的想法?
谢谢你。
更新:
I noticed that the 'throttle:500,1'
used in the api.php
route will be set AFTER the default 'throttle:60,1'
specified into Kernel.php
file;然后,它不起作用。
记录流程执行,第一个调用是:
Illuminate\Routing\Middleware\ThrottleRequests -> handle
来自 Kernel.php
有 maxAttempts=60
。
然后,第二个电话是:
Illuminate\Routing\Middleware\ThrottleRequests -> handle
来自 api.php
有 maxAttempts=500
。
In others words, the throttle:500,1
in the api.php
file do not override the throttle:60,1
in the Kernel.php
file.
原文由 vlauciani 发布,翻译遵循 CC BY-SA 4.0 许可协议
当前答案
根据 这个 GitHub 问题,节流中间件 不 应该“两次”使用(就像你想那样做)。如何“正确”处理你当前的问题,只有两种方式:
或者
旧答案
您设置的中间件密钥错误!当声明使用多个中间件时,为它们创建一个新的数组
编辑: 由于中间件顺序,您应该将内核油门设置为您想要使用的 _最高值_,并将所有其他应具有 较低油门值 的路由设置为相应的油门值。