可能重复:
如何对 REST URI 进行版本控制
我目前正在编写一个 REST 服务,我想了解我的客户在发出请求时如何指定服务版本。
例如,当我将 REST 服务器升级到版本 2 时,我不希望所有已实现我的服务版本 1 的客户端都中断调用。
我见过其他人在 url 中添加版本或在某处的标题中指定版本。
可能没有“最好”的方式来实现这一点,但我会很感激关于这个主题的一些想法(每个人的优点和缺点等......)
谢谢
可能重复:
如何对 REST URI 进行版本控制
我目前正在编写一个 REST 服务,我想了解我的客户在发出请求时如何指定服务版本。
例如,当我将 REST 服务器升级到版本 2 时,我不希望所有已实现我的服务版本 1 的客户端都中断调用。
我见过其他人在 url 中添加版本或在某处的标题中指定版本。
可能没有“最好”的方式来实现这一点,但我会很感激关于这个主题的一些想法(每个人的优点和缺点等......)
谢谢
我们通过不同的路线来做到这一点:
http://my.service.com/v1/user/1
http://my.service.com/v2/user/1
在版本之间没有变化的情况下,我们只是将路由映射到为 v1 版本的资源提供服务的控制器。
是的,这确实为同一个资源创建了多个 URL,并且不稳定的铁杆 REST evanginlists 会开始哭泣,但是这种方式可以让您和您的用户轻松管理。我发现用户甚至不能使用请求标头来设置内容类型之类的东西,从不介意 X-Path 或类似的东西来处理版本控制......
如果你真的想避免重复资源问题,你可以传入一个 get 参数,如版本:
http://my.service.com/user/1?version=1
如果没有版本,则默认为任何版本。这实际上完全是 REST 教条,但我认为它对您的 API 用户有很大影响。
如果您有办法将用户或 api 密钥映射到版本,您可以使用某种用户查找表在版本之间进行路由,但这是非常疯狂的开销。
我建议通过 Accept/Content-Type 标头进行版本控制。URI 不应跨版本更改,除非资源本身发生较大的结构更改。这是一个很好的解释:API 版本控制的最佳实践?