1

可能重复:
如何对 REST URI 进行版本控制

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

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

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

可能没有“最好”的方式来实现这一点,但我会很感激关于这个主题的一些想法(每个人的优点和缺点等......)

谢谢

4

2 回答 2

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 密钥映射到版本,您可以使用某种用户查找表在版本之间进行路由,但这是非常疯狂的开销。

于 2012-10-11T20:38:49.637 回答
0

我建议通过 Accept/Content-Type 标头进行版本控制。URI 不应跨版本更改,除非资源本身发生较大的结构更改。这是一个很好的解释:API 版本控制的最佳实践?

于 2012-10-12T03:26:16.320 回答