Guzzle 高级限流中间件和 Laravel 包
发布日期:作者: Paul Redmond
全栈开发人员 Timo Prüße 创建了一个 Guzzle 中间件,可以帮助您在 Guzzle 处理程序堆栈中设置高级 API 请求限流。
以下是 GitHub 存储库中关于 guzzle-advanced-throttle
可以为您使用的可能存在速率限制的外部 API 做什么的内容:
一个 Guzzle 中间件,可以根据 (多个) 定义的规则限制请求。还可以定义缓存策略,例如,当超出速率限制时从缓存中获取响应,或者始终获取缓存的值来节省您的速率限制。
Guzzle 中间件包
如果您需要在 Laravel 项目之外直接使用中间件,您可以按如下方式配置规则,这显示了中间件的灵活性
use hamburgscleanest\GuzzleAdvancedThrottle\RequestLimitRuleset; $rules = new RequestLimitRuleset([ [ 'host' => 'https://www.google.com', 'max_requests' => 20, 'request_interval' => 1 ], [ 'host' => 'https://www.google.com', 'max_requests' => 100, 'request_interval' => 120 ]]);
以下是您在 Guzzle 中将中间件添加到处理程序堆栈中的方法:
$stack = new HandlerStack();$stack->setHandler(new CurlHandler());$stack->push((new ThrottleMiddleware($rules))->handle()); // Pass the stack to the client$client = new Client([ 'base_uri' => 'https://www.google.com', 'handler' => $stack]);
Laravel 包
Timo 为这个 Guzzle 中间件提供了一个 Laravel 包装器包,可以轻松配置缓存和规则以在 Laravel 应用程序中使用。
您可以在 Laravel 项目中使用 GuzzleThrottle
门面来获取一个新的 Guzzle 客户端实例,该实例带有 Guzzle 速率限制缓存处理程序堆栈
$client = GuzzleThrottle::client([ 'base_uri' => 'https://www.google.com']);
以下是项目自述文件中的示例配置
return [ 'cache' => [ // Name of the configured driver in the Laravel cache config file / Also needs to be set when "no-cache" is set! Because it's used for the internal timers 'driver' => 'default', // Cache strategy: no-cache, cache, force-cache 'strategy' => 'cache', // TTL in minutes 'ttl' => 900 ], 'rules' => [ [ // host (including scheme) 'host' => 'https://www.google.com', // maximum number of requests in the given interval 'max_requests' => 20, // interval in seconds till the limit is reset 'request_interval' => 1 ], [ // host (including scheme) 'host' => 'https://www.google.com', // maximum number of requests in the given interval 'max_requests' => 100, // interval in seconds till the limit is reset 'request_interval' => 120 ] ]];
了解更多
如果您想了解有关 guzzle-advanced-throttle
中间件的更多信息,请查看 hamburgscleanest/guzzle-advanced-throttle。有关配套的 Laravel 包,请查看 hamburgscleanest/laravel-guzzle-throttle。
Timo Prüße 在 Twitter 上是 @TimoPruesse,在 GitHub 上是 Chroma91。