我正在开发一个 Laravel 应用程序,使用 Guzzle 6。许多功能依赖于 API,我已经为其创建了一个包装器。
我的包装器是一个单独的类,在
我使用的 API 每 10 秒钟限制 40 个请求。我正在缓存一些东西,因此很少会达到此限制,但我想知道如果达到限制时,我的应用程序不会死掉!
关于我的应用程序的一些注意事项:
我的包装器是一个单独的类,在
__construct()
中创建 Guzzle 客户端,并具有各种公共函数,这些函数返回 Guzzle 请求的响应。我使用的 API 每 10 秒钟限制 40 个请求。我正在缓存一些东西,因此很少会达到此限制,但我想知道如果达到限制时,我的应用程序不会死掉!
关于我的应用程序的一些注意事项:
- API调用仅在过去6小时内没有进行相同的调用时才进行。如果已经调用过,该调用将不会再次进行,响应将直接从我的redis缓存中提供。
- 在大多数情况下,API调用是通过用户操作进行的。应用程序本身几乎不会接近这些限制。
- 在大多数情况下,我已经拥有了显示所请求页面所需的数据。可以在后台执行API调用以查看是否需要在我的端上更新任何内容,但如果我已经拥有数据,并且API请求失败,这不会使页面无法使用。
- 该应用程序已上线,https://likethis.tv,如果您想查看。我正在使用TMDb API。
所以,我的问题是,我应该如何确保不超过API限制? 我的一些想法如下:
请使用 Laravel 队列系统将 Guzzle 请求放入队列中,仅在我们仍有请求时处理它们。如果没有,请等待 10 秒冷却时间过去...请直接为 Guzzle 使用 HandlerStack。不确定是否可能,但我之前已经使用 HandlerStack 缓存响应了。我试图避免引起过多争议的回复,但我相信可能有比上述方法更好和/或更容易的方法,如果它们是好主意,任何指针或建议都将是很棒的。谢谢您的帮助。