【问题标题】:Render data into headers with RoR使用 RoR 将数据渲染到标头中
【发布时间】:2012-04-02 10:29:26
【问题描述】:

我正在开发一个用 RoR (3.2) 编写的小型 REST API,我将在 Varnish Cache 实例后面使用它。

这个 API 会被 Varnish 的 cURL VMOD 调用来处理用户数限制。

重要的是 Varnish 不擅长处理 HTTP 数据,除了标头。

所以我想将数据字段作为 HTTP 标头(最多 3 个字段)返回,但我不确定如何以正确的 MVC 方式执行此操作。

标题是否可以被视为有效的视图或渲染格式?

标题应该写在控制器还是视图中? (知道返回的数据将来自 2 个模型)。

另外请注意,我将不得不在未来阶段处理常见的 html 和 json 输出。

我知道无论如何这将是一个肮脏的黑客,但相信我:让 Varnish 处理响应体,更糟糕的是 json 或 XML,会更脏 x10...

谢谢!

【问题讨论】:

    标签: ruby-on-rails model-view-controller ruby-on-rails-3.2


    【解决方案1】:

    如果您想要一个轻量级的应用程序而不调用 View 管道,请坚持使用标题。

    API 调用使用标头向客户端发送信息(保持简单)。

    在调用视图之前,应该在控制器中写入标头,因为 HTTP 标头位于正文之前。

    你目前可以为视图做render => :nothing,一旦你想集成json或xml,你可以添加respond_to动作。

    【讨论】:

    • 谢谢!我不知道“render => :nothing”。如果我不使用它,这将允许绕过视图管道。正如我所想,标题应该写在控制器中。但是我将如何要求“标题版本”?没有请求标头的 MIME 类型。我应该通过 URL “.headers” 扩展名指定请求的格式吗?还是有别的办法?
    • 控制器中的请求对象具有您需要的详细信息。可以通过请求的用户操作设置格式 - 请参阅apidock.com/rails/ActionController/MimeResponds/InstanceMethods/…
    【解决方案2】:

    我想说这是你可以在控制器中设置的东西。看看这个,看看它是否对你有帮助:

    http://work.j832.com/2008/10/ruby-rails-render-and-content-type-http.html

    我建议在控制器中执行此操作,因为这听起来好像标题将独立于您呈现的视图。

    【讨论】:

    • 这个链接实际上解释了编写 http 标头的语法,这不是我的问题。更改 Content-Type 在 REST API 中很常见;o)
    猜你喜欢
    • 2016-05-20
    • 1970-01-01
    • 2012-12-28
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多