【问题标题】:Restful API: implement version handlingRestful API:实现版本处理
【发布时间】:2015-01-30 08:18:51
【问题描述】:

我在同一个域中有 API 的参考版本,我想通过将版本号放在下面的 url 中来管理它

mydomain.com/api/v1/user/getall
mydomain.com/api/v1/user/add

mydomain.com/api/v2/user/getall
mydomain.com/api/v2/user/add

想象一下这个场景: 两个版本中的获取用户具有相同的功能,但在 V2 中添加了更改。 现在我想实现版本控制,为此我找到了两种方法。

  1. 在路由中使用 V1 和 V2 并在应用程序中管理版本控制(例如:SDammann WebApi Versioning
  2. 通过源控制器和 Web 服务器管理版本控制(每个版本都存在一个分支,如果是 ASP.net(IIS),则为每个版本创建子应用程序)

在第一种方法中,我认为我们必须复制控制器和操作,因此如果在获取用户操作中发现错误,我们必须在两个操作中都进行更改(冗余

在第二种方法中,如果发生一些错误,我们必须检查旧分支,修复它并通过新版本分支合并它。

Dose 是否有更好的方法来管理和实施 API 版本控制?

【问题讨论】:

  • 是的,在同一个 WebAPI 中使用 URL 路由将请求映射到正确的控制器版本。
  • @Chris 但是在这种方法中,如果应用程序出现问题,所有版本都会失效!可以吗?我真的很困惑寻找最佳方法
  • 您尚未指定任何 DR 要求。如果您希望根据版本号提供不同的内容,那么路由是最简洁的方式。如果您正在研究 DR 场景,那么这是一个完全不同的问题。此外,为每个版本保留单独的分支意味着您将需要维护两个流,这是不可取的。
  • @Chris 好的,但是在 api 的尊重版本中,相同功能中的代码冗余呢?你有什么解决办法吗?
  • 如果方法没有什么不同,那么将其移至 v2 有什么意义? v1 和 v2 除了数字有什么不同吗?采用 DRY 方法,您永远不应该重复相同的代码,因此您需要重新考虑您的需求

标签: asp.net api rest asp.net-web-api


【解决方案1】:

不同服务版本的分支可能会导致部署噩梦,因为您需要同时维护/测试/部署许多单独的应用程序。所以,一个单个应用程序和适当的路由系统的想法对我来说看起来更有希望。但是,您需要保证您没有共享代码路径,否则您可能会在一个版本与另一个版本一起使用时引入新问题。复制呢?我相信无论如何,如果你想在代码级别分离你的版本以保证安全修改,这在某种程度上是不可避免的。一些专业人士甚至think 认为您不需要在旧版本中执行错误修复:任何错误修复都只是引入了新的服务版本。

【讨论】:

    猜你喜欢
    • 2012-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    • 2013-11-30
    相关资源
    最近更新 更多