rest - 如何对 REST URI 进行版本控制

标签 rest versioning clean-urls

版本 REST URI 的最佳方式是什么?目前我们在 URI 本身中有一个版本 #,即。

http://example.com/users/v4/1234/

此表示的版本 4。

版本是否属于查询字符串?即。

http://example.com/users/1234?version=4

或者最好通过其他方式完成版本控制?

最佳答案

不要对 URL 进行版本控制,因为...

  • 您破坏了永久链接
  • 网址更改会像疾病一样通过您的界面传播。您如何处理未更改但指向已更改的表示?如果更改网址,就会破坏旧客户端。如果您留下该网址,您的新客户可能无法工作。
  • 版本控制媒体类型是一种更加灵活的解决方案。

假设您的资源返回 application/vnd.yourcompany.user+xml 的某些变体,您所需要做的就是创建对新 application/vnd.yourcompany.userV2+xml 媒体类型的支持,并通过内容协商的魔力您的 v1 和 v2 客户端可以和平共处。

在 RESTful 接口(interface)中,最接近契约的是客户端和服务器之间交换的媒体类型的定义。

客户端用于与服务器交互的 URL 应由嵌入到先前检索到的表示中的服务器提供。客户端需要知道的唯一 URL 是接口(interface)的根 URL。仅当您在客户端构建 url 时,向 url 添加版本号才有值(value),而您不应该使用 RESTful 接口(interface)来执行此操作。

如果您需要对媒体类型进行更改,这会破坏现有客户,那么请创建一个新客户并保留您的网址!

对于那些目前说如果我使用 application/xml 和 application/json 作为媒体类型的读者来说这是没有意义的。我们应该如何对它们进行版本控制?你不。这些媒体类型对于 RESTful 接口(interface)来说几乎毫无用处,除非您使用代码下载来解析它们,此时版本控制是一个没有实际意义的问题。

关于rest - 如何对 REST URI 进行版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/972226/

相关文章:

javascript - CORS 的概念,我应该强制使用 Origin header 吗?

api - 带有vhost的Rabbitmq HTTP API

ruby-on-rails - Rails 多个异常处理程序,每个路由命名空间为 "exceptions_app"

web-services - 如何从服务器端模拟复杂的 REST 调用?

xml - 如何始终引用 W3C 的最新版本的 xml.xsd?

android - android应用程序升级到新版本时如何保留全局变量?

yii2 - 使用干净的 url 在 yii2 中的超链接中传递多个参数,Html::a() 不会生成干净的 url

php - 无法调用 Controller codeigniter 中的第二个函数

php - 删除标点符号、符号、变音符号、特殊字符的最佳方法是什么?

java - 如何在FORM中进行POST提交到angular2并将对象值传递给REST服务?