【问题标题】:Can I limit number of requests based on route?我可以根据路由限制请求数量吗?
【发布时间】:2021-03-02 00:11:45
【问题描述】:

我有 api 密钥并向其他服务发送请求,我想限制请求数量。我可以在 laravel 中限制特定路由上的请求数量,但限制所有用户尽管他们的 ip 吗?

【问题讨论】:

  • 限制谁的请求数?每个人?请求进来?对其他服务的请求?
  • 请求来自使用应用程序的用户,我想限制从我的服务器到外部 api 的请求数量,例如,google 或 facebook
  • 你使用的是什么版本的 Laravel?框架中有一个 RateLimiter 可以使用
  • 我使用的是 Laravel 8.11.2 版本

标签: laravel api backend


【解决方案1】:

使用 laravel 节流中间件

对于 laravel 5,6,7 使用这个

Route::post('api/api-key','ApiController@getKey')->middleware('throttle:60,1');

对于 Laravel 8

Route::post('api/api-key',[ApiController::class,'getKey'])->middleware('throttle:60,1');

有关 api-key 的更多限制,请阅读此article

【讨论】:

  • 限制不是基于请求的用户ip吗?
  • 我需要根据路由限制所有请求,而不是 ip。所以如果 "/token" - 每小时应该只有 100 个来自任何 ip 的请求。
【解决方案2】:

经过几个小时的搜索,我在laravel documentation 找到了答案。

你可以像这样限制每条路由的请求数

RateLimiter::for('uploads', function (Request $request) {
    return Limit::perMinute(1000)->response(function () {
        return response('Custom response...', 429);
    });
});


Route::middleware(['throttle:uploads'])->group(function () {
  Route::post('/audio', function () {
  
  });
}

【讨论】:

    猜你喜欢
    • 2019-11-14
    • 1970-01-01
    • 2011-08-10
    • 2016-07-28
    • 2014-05-03
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    相关资源
    最近更新 更多