【问题标题】:Host Multi-Versioned Services in Windows Azure在 Windows Azure 中托管多版本服务
【发布时间】:2012-04-26 14:01:39
【问题描述】:

我们目前正处于一个新项目的开发阶段,该项目将部署到 Windows Azure。该产品将是一个使用新的 ASP.NET MVC Web API 的可公开访问的 Web API。我们需要做的是随着时间的推移支持 API 的多个版本。例如,当我们部署它时,它将是版本 1。除非强制更改合约,否则此版本号不应更改。这意味着,如果在版本 1 中,我们有一些服务路线,例如:

/v1/user/{id}

它支持 GET/POST,对于 POST,它支持 Name 值。好吧,也许在版本 2 中,我们想要更改 POST 接受的内容,现在我们将 Name 更改为 FullName,它还支持 FirstName 和 LastName。

这会给使用版本 1 和该方法的任何人带来问题,我们所做的新更改将破坏其功能。

所以我们希望能够在其中添加服务版本控制支持

/v1/user/{id}

将继续工作并使用旧库等。我们将版本 2 并排部署到它,以便消费者可以迁移到使用

/v2/user/{id}

当我们慢慢淡出旧的。

因此,简而言之,我们希望能够在 Windows Azure 中并排托管多个版本的 Web 服务,其中将包含不同的路由/合同、不同的核心库等。任何人都知道我们如何做到这一点?

【问题讨论】:

    标签: .net asp.net-mvc azure


    【解决方案1】:

    您可以使用 ARR 来提供路由功能。它是一个 IIS 模块,可以通过 Azure 启动任务添加。请参阅这篇关于如何安装 ARR 的帖子:

    http://robindotnet.wordpress.com/2011/07/21/how-to-install-iis-application-request-routing-in-windows-azure/

    然后,您将应用程序的每个版本作为单独的部署托管,并设置 ARR 以转发到正确的 *.cloudapp.net 地址。

    另一个想法是在同一个部署中托管所有版本,并使用主机头在它们之间进行路由。即(version1.yourdomain.com,version2.yourdomain.com)。

    查看服务定义架构的 WebRole/Sites/Site/VirtualApplication 部分:

    http://msdn.microsoft.com/en-us/library/windowsazure/gg557553.aspx

    【讨论】:

      【解决方案2】:

      对 REST API 进行版本控制是一个棘手的问题。我认为没有一个正确的答案,但有很多讨论。大部分讨论都集中在 API 的设计上,例如 URI 和资源的布局,而不是它的技术实现。如果您还没有完全准备好将版本号放在 URL 中,我建议您先考虑一下,然后尝试弄清楚如何实现它。

      这里有几个关于 SO 的起点:

      【讨论】:

        猜你喜欢
        • 2013-02-27
        • 2013-03-12
        • 2012-01-18
        • 1970-01-01
        • 1970-01-01
        • 2014-07-17
        • 2012-08-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多