我看过Best practices for API versioning?,但我不太相信答案,所以我再次以更具体的示例质疑版本控制部分。我有两个URI(一个版本作为URI的一部分,一个没有):REST API版本化(仅版本表示,而不是资源本身)
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资源为中心的视图与其他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版本控制,只对资源表示进行版本控制。表示版本信息属于内容协商(作为queryParam或HTTP'接受')。
您认为如何?你会不同意/同意哪些事情?
只需添加一件小事。对我来说,使用v1和style的唯一好处就是,当你没有控制负载平衡,并且无法在前端机器上以HTTP头为基础定义到应用程序服务器的方向( - >内容协商是HTTP头的一部分)。通常标准是使用URL路径。在Web框架中,我可以想到,很难在基于HTTP头的控制器中定义请求映射端点而不是路径。 – 2010-01-21 05:16:49