【问题标题】:REST versioning - URL vs. headerREST 版本控制 - URL 与标头
【发布时间】:2013-09-19 21:37:27
【问题描述】:

我正计划编写一个 RESTful API,但我不知道如何处理版本控制。 我已经阅读了许多讨论和博客文章,其中建议使用接受标头进行版本控制。

但后来我发现以下网站正在监听流行的 REST API 及其版本控制方法,其中大多数使用 URL 进行版本控制。 为什么?

为什么大多数人都说:“不要使用 URL,而是使用接受头”,而流行的 API 使用 URL?

【问题讨论】:

  • 这只是两种不同的方法,使用URL时不能出错,而且没有“默认”可能会造成混淆。
  • 作为开发者,你觉得哪种方式更容易实现?如果您是客户,您认为哪个版本更易于使用?
  • 不使用标头的一个原因是如果您将浏览器作为客户端并且需要使用 JSONP 或 CORS 进行跨域/协议调用。 JSONP 无法指定标头,某些浏览器(例如 IE8)上的 CORS 也无法指定标头。
  • 根据我的经验,对于客户来说,一种方式与另一种方式没有太大区别,使代码使用特定版本(更改 URL 与标头)所需的更改在两个选项中都很小(如果你真的逼我,我什至会给 URL 选项带来一点优势,因为它更清楚地传达了它是什么版本。

标签: rest


【解决方案1】:

这两种机制都有效。您需要了解您的消费者才能知道该走哪条路。一般来说,与企业和有学术头脑的人一起工作倾向于将开发人员指向资源头版本控制。但是,如果您的客户是小型企业,那么 URL 版本控制方法会得到更广泛的应用。

优点和缺点(我敢肯定还有更多,其中一些缺点有此处未提及的变通办法)

  1. 它更具探索性。对于大多数请求,您可以只使用浏览器,而 Resource Header 实现需要更程序化的测试方法。但是,由于并非所有 HTTP 请求都是可探索的,例如 POST 请求,您应该使用像 PostmanPaw 这样的 Rest Client 插件。 URI Pro/Header Con

  2. 使用 URI 版本化的 API,资源标识和资源的表示是混合在一起的。这违反了 REST 的基本原则;一种资源应由一个且只有一个端点标识。在这方面,Resource Header 版本控制选择在学术上更加理想化。 Header Pro/URI Con

  3. URI 版本化的 API 更不容易出错,并且客户端开发人员更熟悉。通过 URL 进行版本控制允许开发人员一目了然地确定服务的版本。如果客户端开发人员忘记在标头中包含资源版本,您必须决定是否应将它们定向到最新版本(增加版本时可能会导致错误)或 301(永久移动)错误。无论哪种方式,对于您的新手客户端开发人员来说都会有更多的困惑。 URI Pro/Header Con
  4. URI 版本控制有助于在同一应用程序中托管多个版本。在这种情况下,您不必进一步开发您的框架。 注意:如果这样做,您的目录结构很可能会在 v2 目录中包含大量重复代码。此外,部署更新需要重新启动系统 - 因此应尽可能避免使用此技术。 URI Pro/Header Con
  5. 对于从一开始就没有考虑版本控制的现有项目,将版本控制添加到 HTTP 标头会更容易。 Header Pro/URI Con
  6. 根据RMM Level 3 REST Principle: Hypermedia Controls,您应该使用HTTP Accept 和Content-Type 标头来处理数据的版本控制以及描述数据。 Header Pro/URI Con

如果您想进一步阅读,这里有一些有用的链接:

【讨论】:

  • 总之,header 选项没有实用的亲 :)
  • 我正在阅读但无法理解第 4 点是 Header Con ????您想托管您的应用程序的 3 个版本吗???????如果您已经从 5 台服务器提供服务,您是否真的想管理 15 个 JVM?????????????????????????至少将 4 分成 2 并制作一个 FOR Header 和另一个反对。
  • 您可以添加以下内容: 7. 缓存。基于 URI 的版本控制本质上是缓存友好的。基于标头的版本控制需要特别注意缓存友好。 URI Pro/Header Con
  • 两个更多... 8. 如果你想将不同版本的请求路由到不同的地方,代理/路由器通常更容易基于 URL 路径信息而不是 HTTP 标头信息。 URI Pro/Header Con; 9. 如果您对 HATEOAS 很感兴趣,那么使用 URI 版本控制,任何链接资源都必须与其链接资源同步进行版本控制,否则当您将链接的 URL 更改为新的破坏版本时,您将破坏消费者。标头 Pro/URI Con.
猜你喜欢
  • 1970-01-01
  • 2016-11-29
  • 2020-04-29
  • 2017-11-17
  • 2012-05-31
  • 1970-01-01
  • 2021-10-04
  • 2018-09-30
  • 1970-01-01
相关资源
最近更新 更多