在REST服务调用中指定版本的最佳方法

时间:2012-10-11 20:37:36

标签: rest versioning auto-versioning

  

可能重复:
  How to version REST URIs

我目前正在撰写REST服务,我想了解一下我的客户在提出请求时如何指定服务版本的想法。

例如,当我将我的REST服务器升级到版本2时,我不希望所有已实现我的服务版本1的客户端中断调用。

我见过其他人在网址中添加版本或在某处标题中指定版本。

可能没有一种“最佳”的方式来实现这一点,但我会对这个主题的一些想法感兴趣(每个等等的专业和意见......)

谢谢

2 个答案:

答案 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?