【问题标题】:How to handle external API rate limits?如何处理外部 API 速率限制?
【发布时间】:2019-05-13 07:35:10
【问题描述】:

当使用诸如 TwitterVimeo 之类的服务时,他们会对发生在 API 上的每个请求使用 API 速率限制,并且他们将返回(在响应的标头中)类似这个:

X-RateLimit-限制 X-RateLimit-Remaining X-RateLimit-重置

例如,在我的应用中,我会使用 Vimeo API 来处理很多事情......比如:

  • 上传视频
  • 编辑视频
  • 获取视频

对于 Vimeo API 的每个请求,我必须检查 X-RateLimit-Remaining 值是否 > 0 以 继续 或返回 error 如果超过了速率限制。 (Vimeo API rate limit)。


是否有处理外部 API 速率限制的良好做法?

存储这些值的最佳位置是什么,以便我可以在需要时检索它们?

注意:Vimeo API 不只是在达到速率限制时返回错误,当我超过文档所说的限制时,它会禁止我的应用程序。所以我需要把它们存放在某个地方。 (#Vimeo API rate limit)。

【问题讨论】:

  • 我认为由于 API 在标头中返回这些值,因此您每次都可以检查它。这意味着您不需要存储它们。如果我可能误解了你的问题,请告诉我。我认为即使是 github api 也允许您通过发送请求来检查您的限制:请参阅:developer.github.com/v3/rate_limit
  • @OluwatobiSamuelOmisakin Vimeo API 不只是在达到速率限制时返回错误,当我超过文档所说的限制时,它会禁止我的应用程序。所以我需要把它们存放在某个地方。 developer.vimeo.com/guidelines/rate-limiting我已经更新了我的问题。
  • Laravel 提供了一种使用节流中间件的方法laravel-news.com/laravel-5-6-dynamic-rate-limiting
  • @cbaconnier 这是用于内部 API 请求的。我正在使用外部 API。
  • 我认为你可以使用缓存、会话或数据库来更新会话。

标签: laravel api vimeo-api rate-limiting


【解决方案1】:

你应该在本地缓存这些值,这取决于你的缓存驱动程序,可以是 redis、memcached 等......

在此处阅读更多信息:https://laravel.com/docs/5.7/cache

我建议您创建一个类来管理缓存值,并在需要时从 API 更新/创建它们。该类可能是该类的依赖项,该类实际上包含调用外部 API 的逻辑。

【讨论】:

  • 是的,看来 redis 是要走的路……因为数据库会影响性能,因为我会经常使用这些值。谢谢。只是出于好奇,您以前是否碰巧处理过这样的案例?
猜你喜欢
  • 1970-01-01
  • 2018-08-07
  • 2017-01-11
  • 1970-01-01
  • 2023-03-11
  • 2020-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多