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


我正在编写大量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']);
});

但它不起作用。

任何想法?

谢谢。

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

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

Illuminate\Routing\Middleware\ThrottleRequests -> handle

Kernel.php 具有 maxAttempts=60

然后,第二个电话是:

Illuminate\Routing\Middleware\ThrottleRequests -> handle

api.php 具有 maxAttempts=500

换句话说, throttle:500,1 在里面 api.php 文件不要覆盖 throttle:60,1 在里面 Kernel.php 文件。


4859
2018-05-26 12:57


起源



答案:


目前的答案

根据 这个GitHub问题,油门中间件 不应该 被用于“两次”(就像你想要那样)。如何“正确”处理当前问题只有两种方法:

  1. 一个人 限制中间件

要么

  1. 定义节流中间件 分别 每条路线(组)

老答案

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

['middleware' => ['WriteToDatabaseMiddleware','throttle:500,1']]

编辑: 由于中间件订单,您应该将内核限制设置为 最高价值 你想要使用,以及所有其他应该有的路由 降低油门值 到相应的。


11
2018-05-26 19:22



OPS!真的......谢谢! ;-) - vlauciani
欢迎你@vlauciani如果你接受答案会很好,因为它解决了你的问题:) - manniL
我测试我的代码,但它不起作用;我通过调查更新了我的问题。 - vlauciani
@vlauciani那么你应该将你的内核值更改为 throttle:500,1 (到较高的一个),以及应该有油门的所有其他路线 throttle:60,1。这应该与请求订单一起使用。 - manniL
谢谢@manniL,我看了你“目前的答案“现在。好的,它澄清了操作;我认为解决方案是创建我自己的限制中间件。再次感谢你。 - vlauciani


答案:


目前的答案

根据 这个GitHub问题,油门中间件 不应该 被用于“两次”(就像你想要那样)。如何“正确”处理当前问题只有两种方法:

  1. 一个人 限制中间件

要么

  1. 定义节流中间件 分别 每条路线(组)

老答案

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

['middleware' => ['WriteToDatabaseMiddleware','throttle:500,1']]

编辑: 由于中间件订单,您应该将内核限制设置为 最高价值 你想要使用,以及所有其他应该有的路由 降低油门值 到相应的。


11
2018-05-26 19:22



OPS!真的......谢谢! ;-) - vlauciani
欢迎你@vlauciani如果你接受答案会很好,因为它解决了你的问题:) - manniL
我测试我的代码,但它不起作用;我通过调查更新了我的问题。 - vlauciani
@vlauciani那么你应该将你的内核值更改为 throttle:500,1 (到较高的一个),以及应该有油门的所有其他路线 throttle:60,1。这应该与请求订单一起使用。 - manniL
谢谢@manniL,我看了你“目前的答案“现在。好的,它澄清了操作;我认为解决方案是创建我自己的限制中间件。再次感谢你。 - vlauciani