REST api版本控制(仅版本表示,而不是资源本身)?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (25)

我有两个URI(一个版本为URI的一部分,另一个没有):

http://xxxx/v1/user/123    -> favored solution in discussed thread
http://xxxx/user/123             

在REST中,版本控制唯一有意义的是该资源的表示(例如添加或删除新字段)。这种版本控制属于内容协商的部分,如:

http://xxx/user/123 + HTTP 'Accept' Header -> Content negotation through header
http://xxx/user/123?v=1                    -> for perma-links/hyperlinks

总结:在REST URI中没有api版本,只有资源表示的版本。表示版本信息属于内容协商(作为queryParam或HTTP'接受')。

你怎么看?

提问于
用户回答回答于

我完全同意; 一个URI表示身份,在引入新版本时身份不会改变。当然,可能有新的URI用于附加概念,现有的URI可能会重定向,但在URI中包含一个“v2”会给我带来RPCish的味道。

用户回答回答于

如果标题存在,那么服务器必须使用该版本的API。如果标题不存在,服务器可能会使用最新版本的API。

> GET /user/123 HTTP/1.1
> Host: xxx
> X-API-Version: >=1.5.1, <2.0.0
> Accept: application/json
>

< HTTP/1.1 200 OK
< X-API-Version: 1.6.12
<
< { "user": { "id": 123, "name": "Bob Smith" } }
<

扫码关注云+社区

领取腾讯云代金券