限制Rails应用程序生成的出站API调用

时间:2010-05-10 22:35:38

标签: ruby-on-rails api

我不是一名专业的网络开发人员,但我喜欢把网站作为一种业余爱好。最近,我一直在开发一个Rails应用程序,作为帮助我学习框架的项目。我的玩具应用程序的目标是通过其API从另一个服务中获取数据,并使我可以使用搜索功能进行查询。

但是,我想从中提取数据的服务对每分钟可执行的API调用数量施加了速率限制。我打算让我的应用程序运行每日更新,这可能会产生一系列API调用,远远超出外部服务提供的限制。我希望尊重外部网站的性能,因此希望限制我的应用执行呼叫的速度。

我已经做了一些搜索,我发现大量的教程资料和预构建的库涵盖了对Web应用程序的入站 API调用,我几乎找不到关于控制的讨论出站呼叫流程。

作为业余网络开发人员和铁杆新手,我完全有可能在错误的地方执行错误的搜索。因此我的问题是:

  • 是否有一个很好的网站聚合Rails教程,其中包含与限制出站API请求相关的材料?

  • 是否有任何红宝石或其他图书馆可以帮助我限制请求?

我对如何使用基于队列的工作程序(如DelayedJob或Resque)编写限制系统来管理API调用有一些想法,但我宁愿花费我的周末来构建网站的其余部分,如果有的话已经有很好的预建解决方案。

3 个答案:

答案 0 :(得分:8)

尝试使用nginx作为代理:http://codetunes.com/2011/07/26/outbound-api-rate-limits-the-nginx-way

如果您使用的是heroku,请考虑使用Slow Web gem。

答案 1 :(得分:2)

现在有一个宝石:throttle-queue。它需要一个代码块,并确保它每秒只执行x次。这是一个从自述文件中获取的示例,它每秒只能获取三个文件:

require 'throttle-queue'

q = ThrottleQueue.new 3
files.each {|file|
    q.background(file) {
        fetch file
    }
}

答案 2 :(得分:0)

没有人谈论出站限制的原因是它通常非常简单,因为控制它。控制带宽可能有点困难,但控制请求数量?

ri Kernel#sleep

所以,如果你每分钟允许10次api通话,你就可以在每次通话后睡觉(6)