我查看了 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 1.0 或 1.1,它已经在 HTTP 请求内部发送。这种以 REST 资源为中心的视图与 SOAP 或 Java 接口等其他 api 接口非常不同(在这些接口中,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 版本控制,只有资源表示的版本控制。表示版本信息属于内容协商(如 queryParam 或 HTTP 'Accept')。
你怎么看?你会不同意/同意哪些事情?