【发布时间】:2012-09-04 23:53:31
【问题描述】:
我是 REST-ful API 设计的新手,我似乎无法就如何以 REST-ful 风格实现 API 版本控制达成共识。我遇到的可能性包括:
-
基于 URL(例如
/myApi/version5/someCall)这种方法对服务器和客户端都非常有效......但它似乎不太符合 REST(url 应该与资源相对应,而 API 版本确实不是资源的一部分)
-
基于负载(例如
$.ajax({data:{version:5, ...)这种方法在兼容性方面效果很好,但是:
A) 服务器需要实际解析有效负载以确定版本(这往往会使版本检查逻辑比应有的“更深”)
B) 同样,根据我的理念,这不是非常 REST-ful(据我了解,我发布的数据应该只是我想要创建的资源的数据)
-
基于标头(例如
Accept application/json;version=5)here 建议使用此方法,我发现它是有关如何制作 REST-ful API 的绝佳资源。但是在这种特殊情况下,我一直遇到问题,因为无论我做什么,我似乎都无法让 jQuery 在标题中发送版本。
现在,如果我尝试,我确信我最终可以解决方法#3 中的 jQuery 问题,但这让我认为我可能会在基于标头的版本控制中走错路;如果我遇到问题,我们 API 的使用者似乎也会遇到问题。
所以,在创建 REST-ful API 时,谁能解释一下哪种版本控制方法:
A) 将与其他技术(浏览器、框架等)一起使用最好的技术
B) 最忠实地实施“REST-ful”理念
C) 是最常见的(这个本身并不重要,但它确实往往是前两个的指标)
换句话说,在 REST-ful API 中处理版本控制的最佳方式是什么?
【问题讨论】:
-
第一种方法显然是最容易实现和理解的,也是最流行的。
-
我将我自己的问题标记为重复,因为它看起来与“如何对 REST URI 进行版本控制”非常相似。谢谢大家的解答,我绝对看到了基于 URL 的实用价值。但是,在重复问题中链接的这篇文章 (informit.com/articles/article.aspx?p=1566460) 都说服我进行基于标头的版本控制,并提供了实际工作的 jQuery 代码,所以我将继续这样做。我向所有面临同样问题的人强烈推荐这篇文章。
标签: rest versioning