Rails中有多个GET请求?

时间:2013-11-16 01:17:27

标签: ruby-on-rails ruby get

我正在开发一个应用程序,在一个页面上,它需要在后台对API进行大约12-15个GET请求。我最初的意图是使用来自jQuery的AJAX来发出请求,但事实证明使用我正在使用的Steam Web API是不可能的。

在页面加载之前在Rails控制器中执行此操作,显然是非常慢的。

从API获取数据后,我解析它并使用gon将其发送到JavaScript。问题是我不知道如何在页面渲染后获取和设置数据

这是我的控制器的样子:

def index
  @title = "My Stats"
  if not session.key?(:current_user) then
    redirect_to root_path
  else
    gon.watch.winlossdata = GetMatchHistoryRawData(session[:current_user][:uid32])
  end
end

函数GetMatchHistoryRawData是一个调用GET请求的辅助函数。

1 个答案:

答案 0 :(得分:1)

使用随时随地的宝石 - (可能见下文)......

在呈现页面之前在队列数据库表中设置一个值。使用监视队列表的“cron”任务(每当gem),您可以向Steam API发出请求并填充队列结果表。在呈现的页面上,您可以使用AJAX实现JavaScript定期检查以监视队列结果表,并在API返回结果后填充页面。

其他信息:

我还没有使用过随时可用的宝石,但我对它进行了更多的阅读,并且可能存在间隔不足以使其尽可能接近实时的问题。我目前正在使用实现计时器的Java应用程序进行我的工作处理但是想知道什么时候和CRON一起移动。因此,无论何时可能不适合您,但异步处理器执行联系API工作的想法是我的答案的要点。如果来自Steam API的有效负载很小并且返回的速度足够快,那么就像上面所述,您可以通过AJAX直接调用控制器,然后使用Steam API。

关于Rails代码,它应该是非常标准的。

控制器:

def index
  # Create a Steam API Queue row in the database and save any pertinent information needed for contacting the Steam API
  @unique_id = Model.id  # some unique id created for the Steam API queue row
end

# AJAX calls START
def get_api_result
  # Check for a result using 
  params[:unique_id]
  # render partial for <div>
end
# AJAX calls end

查看:索引

# Display your page     
# Setup an intermittent AJAX call to "controller#get_api_result" with some unique id #{@unique_id} i.e. params[:unique_id] to identify the Steam API Queue table row, populate the result of the call into a <div>

external_processor_code(每当Gem,Java实现,一些Job处理器等......)

多个线程应该可用于处理Steam API Queue表并每隔几秒检索一次结果,并填充结果表,当通过AJAX调用请求时,控制器将读取该结果表。

为了给出这种类型的实现的完整示例需要一些时间,所以我从概念层面简要概述了上面的概述。可能还有其他一些方法可以通过技术扩展的方式提高效率,所以请进行一些调查。

我希望这有用!