在Rails中的RESTful内容协商

6
我希望在Rails应用程序的某些资源上实现内容协商。我正在使用Mootools,并且很可能能够调整XMLHTTPRequest接受的内容类型为“application/json”。
是否有任何方法可以在我的控制器中获取此信息并生成JSON响应而不是XHTML?
我试图避免做这样的事情:
http://site/resource/1?format=JSON

...因为它会污染我的URL,增加了一定程度的冗余,并且不够灵活。

谢谢!

4个回答

9

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


http://site/resource/1.json 不是正确使用内容协商的方式。为什么不正确?您能提供规范或博客文章的链接吗? - Eugen Konkov
URL本身example.com/users/adeynack代表资源。在这种情况下,是一个用户。Accept头部,如HTTP RFC中所述,表示“您希望以哪种表示形式获取资源”。json需要在此标头中而不是在URL中。尽管我欣赏Rails为方便所做的工作,但它并未遵循HTTP标准。tjercus在这里是正确的。我希望RFC的链接有所帮助,eugen-konkov(它们往往有点枯燥无味)。 - Adeynack

4
您可以在控制器方法中使用 respond_to 语句,像这样:
respond_to do |format|
  format.html { # Generate an HTML response... }
  format.json { # Generate a JSON response... }
end

Rails 根据客户端提交的 HTTP Accept 头部信息来确定响应格式。

1

肯定 http://site/resource/1.json 应该可以工作?不过,你可能需要在你的Rails环境中设置它,这取决于你所使用的Rails版本有多新,我觉得不会有问题。


0
经过大量研究,虽然Rails拥有自动选择输出模板的所有功能,但仍需要为每个支持的模板调用respond_to

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接