我写了很多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
。
答案 0 :(得分:15)
根据this GitHub issue,油门中间件不应该使用"两次" (就像你想要那样)。如何正确处理当前问题只有两种方式":
或
您设置中间件密钥错误!在声明要使用多个中间件时,为它们创建一个新数组
['middleware' => ['WriteToDatabaseMiddleware','throttle:500,1']]
编辑:由于中间件订单,您应该将内核限制设置为您要使用的最高值,以及应该具有降低油门值到相应的值。
答案 1 :(得分:0)
在laravel 5.9之后,您可以使用前缀来防止全局限制。
使用'throttle:5,1,prefix'
Route::group(['prefix' => 'contact-us', 'middleware' => 'throttle:5,1,contact-form',], function () {
Route::post('/', 'ContactUsController@store');
});