4

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

4

3 回答 3

4

帐户和 API 密钥听起来确实是个好主意,如果没有其他任何东西,它会阻止除了您的目标开发人员之外的其他人能够访问您的 API。

让一个简单的数据库表记录最后一次访问特定 API 的时间应该相当简单,如果在某个时间范围内访问太多次,则拒绝重用。如果可能,请在下次 API 可在输出中重复使用时返回,以便开发人员可以相应地进行节流,而不必采用反复试验的方法。

您是否希望一遍又一遍地使用相同的输入,还是完全随机的?缓存输出并仅将缓存提供给开发人员,直到 API 准备好重新使用?这种方法对帐户和密钥的依赖也少得多。

于 2011-02-03T22:38:14.557 回答
3

API 密钥绝对是一个不错的选择,如果您的最终用户将通过第三方构建的应用程序访问服务,还有 openAuth ( http://oauth.net )。

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

我应该补充一下,有一个3scale 的 PHP 插件,您可以将其放入您的代码中,这将启用所有速率限制等。

于 2012-06-03T07:52:44.237 回答
1

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

这一切都取决于应用程序的复杂性和你完成它的时间

于 2011-02-03T22:46:03.103 回答