【问题标题】:What is the best way to version a WCF Web API?对 WCF Web API 进行版本控制的最佳方法是什么?
【发布时间】:2012-01-16 19:52:39
【问题描述】:

我目前有一个 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(或我指定的任何版本)。

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

提前致谢!

【问题讨论】:

  • 这就是谷歌的做法 v=1.0 http://ajax.googleapis.com/ajax/services/search/web?v=1.0&rsz=8&q=stackoverflow
  • 我认为“版本标头”和“版本 URI”是类似的方法,我会同时支持它们。将它放在 URI 中对开发人员非常有帮助 - 它使通过浏览器试验服务变得容易。我还将支持重定向到当前“活动”版本的“无版本 URI”(这通常是最新版本,但您可能会遇到暂存新版本但不公开激活它们的情况)。这真的取决于你的标准。
  • 在查看了实现细节之后,我相信由于技术上的简单性,我将不得不更加倾向于 URI 方法。但是,我相信我可以采用这种方法,同时仍能满足不破坏当前 API 客户端的原始要求。

标签: c# .net wcf api versioning


【解决方案1】:

Microsoft 有一篇关于使用 WCF 进行版本控制的不错的文章 here

【讨论】:

  • 这是一篇很棒的版本控制文章。但是,我认为它无法满足我为 API 设定的目标。就像我在对 Erno 的回答的评论中提到的那样,我希望 API 是直观的。我想远离以客户可见的任何方式对特定服务和/或合同进行版本控制。我希望客户端只看到整个 API 的版本控制
【解决方案2】:

好的,我很喜欢目前收到的答案(谢谢你们),但是考虑到我的 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 找到有关如何执行此操作的参考。除了那个例外,一切都像魅力一样! :-)

【讨论】:

    猜你喜欢
    • 2018-11-23
    • 1970-01-01
    • 2010-09-12
    • 2022-11-10
    • 2011-07-01
    • 2010-09-09
    • 2011-01-02
    • 1970-01-01
    • 2010-10-11
    相关资源
    最近更新 更多