在RESTful API中处理版本控制的最佳(最兼容)方法是什么?

在RESTful API中处理版本控制的最佳(最兼容)方法是什么?,rest,versioning,Rest,Versioning,可能重复: 我是REST-ful API设计的新手,对于如何以REST-ful风格实现API版本控制,我似乎找不到共识。我遇到的可能性包括: 基于URL(例如,/myApi/version5/someCall) 这种方法对服务器和客户端都非常有效。。。但它似乎不是很REST(URL应该对应于资源,API版本实际上不是资源的一部分) 基于负载的(例如,$.ajax({data:{version:5,) 这种方法在兼容性方面非常有效,但是: A) 服务器需要实际解析有效负载以确定版本(这往往会使

可能重复:

我是REST-ful API设计的新手,对于如何以REST-ful风格实现API版本控制,我似乎找不到共识。我遇到的可能性包括:

  • 基于URL(例如,
    /myApi/version5/someCall

    这种方法对服务器和客户端都非常有效。。。但它似乎不是很REST(URL应该对应于资源,API版本实际上不是资源的一部分)

  • 基于负载的(例如,
    $.ajax({data:{version:5,

    这种方法在兼容性方面非常有效,但是:

    A) 服务器需要实际解析有效负载以确定版本(这往往会使版本检查逻辑比应该的更深入)

    B) 再一次,从我对这一理念的了解来看,这并不是很轻松(据我所知,我发布的数据应该只是我想要创建的资源的数据)

  • 基于标题(例如,
    接受应用程序/json;版本=5

    有人建议使用这种方法,我发现这是一个关于如何创建REST-ful API的极好资源。但是在这种特殊情况下,我不断遇到问题,因为无论我做什么,我似乎都无法让jQuery在标题中发送版本

现在,如果我尝试的话,我相信我最终可以用方法#3解决jQuery问题,但这让我觉得我可能在使用基于头的版本控制时走错了路;如果我遇到问题,我们API的消费者似乎也会这样做

因此,在创建REST-ful API时,谁能解释一下哪种版本控制方法:

  • A) 将与其他技术(浏览器、框架等)配合使用

  • B) 最忠实地贯彻“休息”的理念

  • C) 是最常见的(这一项本身并不重要,但它往往是前两项的指标)


换句话说,在REST-ful api中处理版本控制的最佳方法是什么?

我强烈建议解决方案1,它清晰而简单——不仅是StackOverFlow也使用它::)

解决方案1看起来既实用又简单。供您参考twitter(
api.twitter.com/2
)和(
api.linkedin.com/v1
)使用基于URL的版本控制,Google Data(
&v=1.0
)使用基于负载的版本控制。我的实践经验是基于URL的版本控制


如果您想进行分析,请勾选此项

第一种方法显然是最容易实现和理解的,也是最流行的。请看一看:我将把自己的问题标记为重复问题,因为它似乎与“如何对REST URI进行版本设置”完全相同。谢谢大家的回答,我肯定看到了基于URL的实用价值。不过,本文(),这是在重复的问题中链接的,两者都说服我进行基于标题的版本控制,并提供了实际有效的jQuery代码,因此我将继续。我强烈建议所有面临相同问题的人阅读这篇文章。