【发布时间】:2012-01-08 03:09:17
【问题描述】:
限制 API 请求的最佳方法是什么?基本上,我们希望将用户限制为每小时 360 个 API 请求(每 10 秒一个请求)。想到的是跟踪每个 API 请求和存储:
ip-address hourly-requests
1.2.3.4 77
2.3.4.5 34
3.4.5.6 124
如果IP地址请求大于360,只需返回一个标头:
429 - Too Many Requests
然后每小时回滚一次计数器每小时请求。这似乎是一种非常低效的方法,因为我们必须对每个 API 请求进行 MySQL 查询以增加计数器。此外,我们需要一个 cron 任务来每小时重置所有计数器。
有没有更优雅/高效的解决方案?
【问题讨论】:
-
对于更灵活的方法,您可能需要查看Token Bucket Algorithm。计数器应该保存在一些内存存储中,以提高性能。
标签: api rate-limiting