对 WCF Web API 进行版本控制的最佳方法是什么?

问题描述 投票:0回答:2

我目前有一个 WCF Web API,我已将其分为两个版本。第一个版本在 api.mysite.com 上运行。第二个目前尚未发布到生产环境。

我想要一种发布第二个 API 的方法,以便对第一个版本的请求不会中断。我的想法是添加一个

x-api-version
标头并在内部将请求路由到指定的 API。如果没有标头,则默认为版本 1。我考虑将
/v1
/v2
添加到路径的开头来分隔版本,这样对 v1 或 v2 的请求可能如下所示:

http://api.mysite.com/v1/authentication/login
http://api.mysite.com/v2/auth/login

唯一需要注意的是,没有版本的请求必须有效,并且默认为版本 1(或我指定的任何版本)。

虽然这听起来不错(至少对我来说),但我不确定推荐的实现方式是什么。我知道我总是可以做某种反向代理,但是我希望我的解决方案可以是一种程序化的解决方案。服务器方面所需的配置越少越好。如果有人有任何想法或博客/教程的链接,那就太棒了!

c# .net wcf versioning
2个回答
6
投票

Microsoft 有一篇关于 WCF 版本控制的不错的文章这里


3
投票

好吧,我很喜欢到目前为止收到的答案(谢谢你们),但是,考虑到我的 API 的限制和目标,它并没有完全解决我的问题。因此,我想详细介绍我找到并计划使用的解决方案。

首先,我通过 URI 对 API 进行版本控制。这意味着 API 的各个版本将如下所示:

http://api.mysite.com/authentication/login
http://api.mysite.com/v1/authentication/login
http://api.mysite.com/v2/auth/login
http://api.mysite.com/v3/auth/letmeinplease
... you get the point ...

这里要注意的重要一点是,如果我不包含版本号,那么我默认为版本 1。这将是我当前的设置,但是,它可以轻松默认为最新版本、最新稳定版本等。

我们开始吧。我创建了一个应用程序所在的文件夹 (

wwroot/api
)。在该文件夹中,我为所有版本创建了文件夹:v1、v2 等。现在,在 IIS(对我来说是 7.5)中,我创建了一个新项目,其应用程序根目录为
wwroot/api/v1
。然后我将每个版本文件夹(包括 v1)添加为子应用程序。这允许我通过 URI 对 API 进行版本控制(如上所示),但是有一个警告。

Web.config 继承确实很痛苦。因此,我确保为我的所有 api 版本禁用它。有关如何执行此操作的参考可以在here找到。除了这个例外,一切都像魅力一样! :-)

© www.soinside.com 2019 - 2024. All rights reserved.