【问题标题】:What is the best (most compatible) way to handle versioning in RESTful APIs? [duplicate]在 RESTful API 中处理版本控制的最佳(最兼容)方法是什么? [复制]
【发布时间】:2012-09-04 23:53:31
【问题描述】:

可能重复:
How to version REST URIs

我是 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


【解决方案1】:

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

如果您想进行分析,请查看api directory

【讨论】:

    【解决方案2】:

    我强烈建议解决方案 1,它清晰易懂 - 不仅 StackOverFlow 也使用它:https://api.stackexchange.com/2.1/questions?order=desc&sort=activity&site=stackoverflow :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      • 2013-01-27
      • 2018-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多