如何处理对请求进行速率限制的api?

Muh*_*mer 5 architecture throttling api-design node.js

对于小型应用程序来说,它们没有问题。

但对于有流量的应用程序,您很容易就会达到限制。

Http 协议是 req-res 驱动的。仅仅因为您的后端受到限制,您就迫不及待地发送响应,直到速率限制允许您恢复进行 api 调用。

你做什么工作?

我可以想到几种场景:

等待它:虽然它很糟糕,但有时很容易修复,因为您不需要做任何事情。

将其排队:与仅进行 api 调用相比,这需要大量工作。这要求首先将其存储在数据库中,然后让后台任务通过数据库并执行任务。用户还会被告知“正在处理”而不是“已完成”

使用大量 api:非常 hacky...并且管理起来很麻烦。假设您正在使用亚马逊,现在您必须创建、验证、确认 10 个帐户。甚至对于需要用域名进行验证的地方也是不可能的。因为亚马逊会知道帐户 abc 已经拥有它。

Ham*_*bot 1

我认为这取决于您想要调用哪个 API 以及调用什么数据。

例如,Facebook 将其 API 调用限制为每个用户每小时 200 个请求。因此,如果您的应用程序不断增长,并且您正在正确使用其 OAuth 实现,那么您不应受到此处的限制。

现在,您需要什么数据?您真的需要拨打所有这些电话吗?您调用的信息是否可以存储在您的任何服务器上

假设您需要在网站上显示 Instagram feed。因此,根据每位访客的请求,您可以访问 Instagram 获取所需的照片。当您的应用程序增长时,您就会达到 API 限制,因为您的访问者数量超出了 Instagram API 允许的数量。在这种情况下,您绝对应该每小时在服务器上存储一次数据,并让您的用户访问您的数据库而不是 Instagram 的数据库。

现在假设您需要每个用户的每个请求的特定信息。难道不能让该用户处理他与 API 的连接吗?要么通过实现 API 的 OAuth 2 流程,要么通过询问用户他们的 API 信息(我认为不太安全......)?

最后,如果您确实无法改变现在的工作方式,那么除了您在此处列出的选项之外,我没有看到任何其他选项。

编辑:最后,正如 @Eric Stein 在他的评论中所说,一些 API 允许您通过付费来提高 API 限制(很多 SaaS 都这样做),因此,如果您的应用程序增长,您应该负担得起这些服务的费用(它们正在为您创造价值,回报他们是公平的)