【问题标题】:RESTful Content Negotiation in RailsRails 中的 RESTful 内容协商
【发布时间】:2010-11-08 03:00:24
【问题描述】:

我希望在 Rails 应用程序中对某些资源实施内容协商。我正在使用 Mootools,并且可能能够将 XMLHTTPRequest 接受的内容类型调整为“application/json”。

有什么方法可以在我的控制器中获取这些信息并生成 JSON 响应而不是 XHTML?

我试图避免做类似的事情:

http://site/resource/1?format=JSON

...因为它弄脏了我的 URL,强加了一定程度的冗余并且不够灵活。

谢谢!

【问题讨论】:

    标签: ruby-on-rails json rest mootools content-negotiation


    【解决方案1】:

    http://site/resource/1.json 不正确使用内容协商。关键是 URL 应该保持不变,但客户端会根据随请求发送的 HTTP 标头请求特定的表示形式(JSON、PDF、HTML 等)。

    【讨论】:

    • http://site/resource/1.json is not correct use of content-negotiation 为什么这不正确?您可以提供规范或博客文章的链接吗?
    • URL 本身 example.com/users/adeynack 代表资源。在这种情况下,用户。 Accept 标头,如HTTP RFC 中所述,表示您希望在哪个表示下拥有资源json 需要在此标头中,而不是在 URL 中。尽管我很欣赏 Rails 为方便起见在这里所做的事情,但它并没有遵循 HTTP 标准。 tjercus 就在这里。我希望 RFC 的链接有所帮助,eugen-konkov(它们读起来有点枯燥)。
    【解决方案2】:

    您可以在控制器方法中使用respond_to 节,如下所示:

    respond_to do |format|
      format.html { # Generate an HTML response... }
      format.json { # Generate a JSON response... }
    end
    

    Rails 根据客户端提交的 HTTP Accept 标头的值确定响应格式。

    【讨论】:

      【解决方案3】:

      http://site/resource/1.json 肯定可以吗?你可能需要在你的 Rails 环境中设置它,不过,这取决于你所拥有的 Rails 版本的最新程度,我对此表示怀疑。

      【讨论】:

        【解决方案4】:

        经过大量研究,虽然 rails 具备自动选择输出模板的所有功能,但它仍然需要为您希望支持的每个模板调用 respond_to

        【讨论】:

          猜你喜欢
          • 2013-08-14
          • 1970-01-01
          • 1970-01-01
          • 2012-08-13
          • 2023-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-02-05
          相关资源
          最近更新 更多