gpt4 book ai didi

Laravel 速率限制器

转载 作者:行者123 更新时间:2023-12-03 20:25:23 29 4
gpt4 key购买 nike

我对 Laravel 还很陌生,目前正在使用每分钟限制为 25 个请求的 API。
我有一个 Controller 方法 sendRequest()所有方法都使用它来向 API 发送请求,所以我认为这是放置速率限制器的地方,它检查如果尚未达到限制,是否可以将当前请求添加到队列中。
我在想这样的事情:

protected function sendRequest(){
if ($this->allowRequest()) {
//proceed to api call
}
}

protected function allowRequest() {
$allow = false;
//probably a do-while loop to check if the limit has been reached within the timeframe?
}
我找到了这门课 Illuminate\Cache\RateLimiter我认为可能有用但还不知道如何使用它。任何人都可以直接指出我正确的方向吗?所以基本上请求应该“等待”并仅在未达到 25 个请求/分钟限制时执行。
谢谢!

最佳答案

Illuminate\Cache\RateLimiter类(class)有hittooManyAttempts您可以像这样使用方法:

use Illuminate\Cache\RateLimiter;
use Illuminate\Http\Request;

protected function sendRequest()
{
if ($this->hasTooManyRequests()) {
// wait
sleep(
$this->limiter()
->availableIn($this->throttleKey()) + 1 // <= optional plus 1 sec to be on safe side
);

// Call this function again.
return $this->sendRequest();
}

//proceed to api call
$response = apiCall();

// Increment the attempts
$this->limiter()->hit(
$this->throttleKey(), 60 // <= 60 seconds
);

return $response;
}

/**
* Determine if we made too many requests.
*
* @return bool
*/
protected function hasTooManyRequests()
{
return $this->limiter()->tooManyAttempts(
$this->throttleKey(), 25 // <= max attempts per minute
);
}

/**
* Get the rate limiter instance.
*
* @return \Illuminate\Cache\RateLimiter
*/
protected function limiter()
{
return app(RateLimiter::class);
}

/**
* Get the throttle key for the given request.
*
* @return string
*/
protected function throttleKey()
{
return 'custom_api_request';
}
Illuminate\Cache\RateLimiter 类以获取更多可用方法。
您也可以查看 Illuminate\Foundation\Auth\ThrottlesLogins 举例说明如何使用 Illuminate\Cache\RateLimiter类(class)。
备注 : RateLimiter方法使用秒而不是分钟,因为 Laravel >= 5.8 并得到 major improvement在 v8.x 上。

关于Laravel 速率限制器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62641920/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com