我查看了API版本控制的最佳实践?,但对答案还不是很满意。因此,我想通过一个更具体的示例再次询问版本控制部分。我有两个URI(一个包含URI的版本控制,另一个不包含):
http://xxxx/v1/user/123 -> favored solution in discussed thread
http://xxxx/user/123
我对第一个链接是否表达了REST的意思有所怀疑。我认为 http://xxxx/v1/user/123
这样的链接很令人困惑,因为它暗示着将来可能会有更高的API版本,例如 http://xxxx/v2/user/123
。但是从REST的角度来看,这并没有意义,API版本本身已经在HTTP请求中以HTTP 1.0或1.1的形式发送。这种基于REST资源的观点与其他API接口(如SOAP或Java接口)非常不同(在这些接口中,在合格名称中具有API版本是很常见的)。在REST中,唯一有意义需要进行版本控制的地方是该资源的表示方式(例如,添加或删除新字段)。这种版本控制属于内容协商的一部分,例如:
http://xxx/user/123 + HTTP 'Accept' Header -> Content negotation through header
http://xxx/user/123?v=1 -> for perma-links/hyperlinks
也可以认为这样的版本内容协商可以成为路径中URI的一部分,但我觉得这是不符合直觉的,因为你最终可能会为同一资源维护不同的URI,并且必须在某些时候保留重定向。
总之,在REST URI中没有API版本控制,只有资源表示的版本控制。表示版本信息属于内容协商(作为查询参数或HTTP“接受”头)。
你认为呢?你在哪些方面不同意/同意?