可能重复:
How to version REST URIs
我目前正在撰写REST服务,我想了解一下我的客户在提出请求时如何指定服务版本的想法。
例如,当我将我的REST服务器升级到版本2时,我不希望所有已实现我的服务版本1的客户端中断调用。
我见过其他人在网址中添加版本或在某处标题中指定版本。
可能没有一种“最佳”的方式来实现这一点,但我会对这个主题的一些想法感兴趣(每个等等的专业和意见......)
谢谢
答案 0 :(得分:4)
我们通过不同的路线进行:
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密钥映射到版本,您可以使用某种用户查找表在版本之间进行路由,但这是非常疯狂的开销。
答案 1 :(得分:0)
我建议通过Accept / Content-Type标头进行版本控制。除非对资源本身进行大的结构更改,否则URI不应在版本之间更改。这是一个很好的解释:Best practices for API versioning?