【发布时间】: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 中添加了更改。 现在我想实现版本控制,为此我找到了两种方法。
- 在路由中使用 V1 和 V2 并在应用程序中管理版本控制(例如:SDammann WebApi Versioning)
- 通过源控制器和 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