如何在呈现页面之前在服务器端执行api请求?

时间:2014-06-05 23:55:39

标签: javascript ruby-on-rails ruby api

我在页面上有一个JS脚本,它在页面加载时调用Y服务器并显示一些数据。如果您查看页面源,您可以看到调用Y服务器的脚本。

我需要做的事情是从MY服务器向Y服务器发出api请求,并在没有JS脚本的情况下将页面呈现给客户端。因此,如果您查看页面源代码,您将看不到对Y服务器的任何引用,因为在将页面呈现给客户端之前,所有这些都将在后台发生在我的服务器上。

有谁知道如何完成此设置?寻找指导......链接到文档?如果不清楚,请询问澄清。

2 个答案:

答案 0 :(得分:2)

在较高的层面上,您需要:

  1. 为API实施HTTP客户端
  2. 添加调用API的代码(可能在控制器中,但它可能是帮助程序,模型或服务对象)
  3. (可选)解析响应(这取决于它所采用的格式以及您需要的格式)
  4. 在视图中呈现已解析的响应
  5. 2& 4很容易。除非你能提供具体的例子,否则3将取决于你。不过应该很容易。离开1。

    如果您使用的是热门API,则client has already been written很有可能。如果它在内部,您可以使用Net :: HTTP或其中一个popular HTTP client libraries编写自定义内容。只要您不需要从浏览器发送任何cookie /标题,这应该非常简单。

    以下是使用RestClient和返回HTML的API的示例。

    class SampleController < ApplicationController
      def index
        @mydata = RestClient.get('http://path.to/your/api?with=params')
      end
    end
    
    # /app/views/index.html.erb
    <h1>Here's Your Data</h1>
    <%= raw @mydata %>
    

答案 1 :(得分:0)

您需要的是直接从您的服务器生成您的html,并呈现动态页面。 您必须从模板中推广您的html,并将其直接呈现给客户端。 例如,php,你将拥有带有php变量的.twig文件,而不是你的静态html。 对于java,使用servlet也是如此。 页面呈现在后侧,并作为静态文件发送到客户端。 对于ROR的确切方法不确定。

我正在尝试一个简单的例子。想象一下,变量数据包含你想从你的api获得的元素,这是你的2 ex:

//第一个案例
staticPage1.html
[...]
var data = loadAjax(url)
window.console.log(数据);
//从后面提供的页面在前面是相同的

//第二种情况
生成.someServerSideTemplate
[...]
var data = {{getDataFromUrl(url)}} //一些服务器端模板语言
generated.html
[...]
var data = {“message”:“hello world”} //呈现的实际页面

我希望很明显......