如何处理外部 API 速率限制?
How to handle external API rate limits?
当使用 Twitter 或 Vimeo 等服务时,他们对发生在那里的每个请求使用 API 速率限制 API 他们会 return (在响应的 headers 中)是这样的:
X-RateLimit-Limit
X-RateLimit-Remaining
X-RateLimit-Reset
例如,在我的应用程序中,我将使用 Vimeo API 来处理很多事情......例如:
- 上传视频
- 编辑视频
- 获取视频
对于 Vimeo API 的每个请求,我必须检查 X-RateLimit-Remaining 值是否 > 0 到继续 或 return 错误 如果已超过速率限制。 (Vimeo API rate limit)。
是否有处理外部 API 速率限制的良好做法?
存储这些值的最佳位置是什么,以便我可以在需要时检索它们?
注意:Vimeo API 不只是 return 达到速率限制时出现错误,当我超过该限制时它会禁止我的应用程序正如文档所说的那样限制。所以我需要把它们存放在某个地方。 (#Vimeo API rate limit)。
您应该在本地缓存这些值,具体取决于您的缓存驱动程序,可以是 redis、memcached 等...
在此处阅读更多内容:https://laravel.com/docs/5.7/cache
我建议您创建一个 class 来管理缓存值,updating/creating 在需要时从 API 中获取它们。此 class 可能是 class 的依赖项,后者实际上包含调用外部 API 的逻辑。
当使用 Twitter 或 Vimeo 等服务时,他们对发生在那里的每个请求使用 API 速率限制 API 他们会 return (在响应的 headers 中)是这样的:
X-RateLimit-Limit X-RateLimit-Remaining X-RateLimit-Reset
例如,在我的应用程序中,我将使用 Vimeo API 来处理很多事情......例如:
- 上传视频
- 编辑视频
- 获取视频
对于 Vimeo API 的每个请求,我必须检查 X-RateLimit-Remaining 值是否 > 0 到继续 或 return 错误 如果已超过速率限制。 (Vimeo API rate limit)。
是否有处理外部 API 速率限制的良好做法?
存储这些值的最佳位置是什么,以便我可以在需要时检索它们?
注意:Vimeo API 不只是 return 达到速率限制时出现错误,当我超过该限制时它会禁止我的应用程序正如文档所说的那样限制。所以我需要把它们存放在某个地方。 (#Vimeo API rate limit)。
您应该在本地缓存这些值,具体取决于您的缓存驱动程序,可以是 redis、memcached 等...
在此处阅读更多内容:https://laravel.com/docs/5.7/cache
我建议您创建一个 class 来管理缓存值,updating/creating 在需要时从 API 中获取它们。此 class 可能是 class 的依赖项,后者实际上包含调用外部 API 的逻辑。