如何对公共API进行速率限制?

时间:2011-02-03 22:19:57

标签: php api rate-limiting

我有一个接收输入并提供输出的算法,我希望开发人员像API一样使用它。为了防止拒绝服务攻击和过度使用,我想要一些速率限制或保护。我有什么选择?我是否提供帐户和API密钥?这通常有用吗?还有什么其他想法可以用于这种情况?

3 个答案:

答案 0 :(得分:4)

帐户和API密钥确实听起来不错,如果没有别的东西可以阻止除了您的目标开发人员能够访问您的API之外的其他人。

在上次访问特定API时记录一个简单的数据库表应该相当简单,如果在特定时间范围内访问过多次,则拒绝重复使用。如果可能的话,在下次API可以在输出中重复使用时返回,这样开发人员就可以相应地进行限制,而不必采用试错法。

您是期望一遍又一遍地使用相同的输入还是完全随机?在API准备好重用之前,如何缓存输出并仅向开发人员提供缓存?这种方法也很少依赖于帐户和密钥。

答案 1 :(得分:3)

如果最终用户将通过第三方构建的应用程序访问服务,那么API密钥肯定是一个很好的方法,还有openAuth(http://oauth.net)。

如果您不想自己编写速率限制/密钥管理代码,那么值得一看http://www.3scale.net/,它可以提供大量免费开箱即用的服务(以及其他包括开发人员门户,计费等)。作为免责声明,我在那里工作,所以我可能会有一些偏见,但我们尽量使这一点尽可能简单!

我应该补充一下,有一个PHP plugin for 3scale,你可以放入你的代码,并启用所有的速率限制等。

答案 2 :(得分:1)

其他选项稍微不那么复杂而牺牲了准确性就是使用ip地址。显然这更容易克服,但对于不知道IP地址是什么的普通用户来说。也很容易设置。

这一切都取决于应用程序的复杂性和你在

中完成它的时间