REST 和多种数据格式

标签 rest

好的,这是事实。 StackOverflow 以 REST 风格实现。当您访问特定问题/$id/URL 时,您会看到该问题。内容以 HTML 形式返回,因为它是浏览器可以理解的。

我必须开发自己的 REST 服务。事实是我必须为相同的信息返回多种格式。例如,默认可以是 HTML,但我也可以返回 XML 或 JSON。

问题是:实现这一目标的推荐风格是什么?三个选择(更多来自您的有用建议)

  • URL 中的选项(例如 http://example.com/questions/12345/?format=json )
  • 不同的接口(interface)(例如:对于 json 数据,你有 http://example.com/questions/1234/json/http://example.com/json/questions/12345/,对于 xml 数据,你有 http://example.com/questions/1234/xml/ 等等......你明白了)
  • http头接受:application/json

  • PUT(POST)操作也是如此。如果我想提交不同格式的数据,我需要通知接收方我提供的格式,所以同样的情况(和问题)成立。

    谢谢!

    编辑:附加提案如下

    4) 为每种格式指定正确的 URL,例如http://example.com/questions/12345.json .这看起来不错,但这是否意味着为了一致性,我们也应该有 http://example.com/questions/12345.html ?听起来如此 1995 年... :)

    PS:我讨厌 Markdown 将任意顺序添加到列表中。如果我想从4开始,我应该可以做到。

    最佳答案

    选项 #3,设置 HTTP“Accept” header ,更符合 HTTP 规范,并且在 REST 纯粹主义者中被认为是最正确的。这也意味着无论表示是什么,您都保持相同的 URL(资源)。

    但是,您可能会遇到无法设置 Accept header 的用户代理,因此建议支持用于指定响应格式的备份机制。在这种情况下,我建议使用 URL 查询字符串参数。使用 URL 查询字符串参数意味着您保持相同的核心 URL,无论返回的内容类型如何。这更清楚地表明客户端应该只向该 URL 发出 PUT,而不是/foo/bar.json 或/foo/bar.xml URL。

    编辑:如果您决定使用 URL 后缀(即 foo.json 与 foo?format=json),要考虑的另一件事是您可能会遇到缓存代理问题。如果有人向/foo.json 发出 PUT,代理不会将其解释为使/foo.xml 无效的请求。但是,如果您使用/foo?format=json,那么它们都存储在代理中的同一资源 (/foo) 下。

    关于REST 和多种数据格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1250060/

    相关文章:

    python - 如何全局禁用 Django Rest Framework 上的 OPTIONS 方法?

    java - Play Framework : rest api creation issue : cannot find symbol symbol: class ObjectNode

    java - (RestAssured) 将嵌套路径提取为给定类型

    python - 测试 REST API

    java - 如何使用Monit Web Service API java

    c# - 生产中使用 C# 的 Neo4j

    java - 在 Jersey REST API 中为 CORS 配置 Web.xml

    javascript - SharePoint Rest 文档库

    javascript - Paypal 客户端 REST : dynamic prices

    api - 进行 REST API 调用时,您是否可以在 url 中包含授权 key ,就像在 GET 请求中一样?