azure - 在 Azure 中维护以前版本的 API 的最佳方法是什么?

标签 azure asp.net-core api-versioning azure-deployment-slots

我的目标是让以前的版本不可变:它们的定义和功能不应改变。 该 API 是使用基于 .NET 4.7.2(由于依赖关系)的 ASP.NET Core 构建的,并托管为 Azure 应用服务。

最好,我不想通过添加“版本知识”来使我的代码变得困惑。另外,如果版本可以托管在相同的基本 URL 下,那就太好了。

我的研究:

  1. ASP.NET API Versioning

通过此功能,您可以完全控制应用程序内的版本控制。但当新版本发布时,所有旧版本也会更新,因此可能会发生变化。这意味着您不能更改任何现有函数,而必须创建新版本,like Scott does in URL PATH SEGMENT VERSIONING .

  • Azure Deploymentslots
  • 正如文档所解释的,这应该用于暂存。但是,这也可以用于“存储”您的版本,因为每个部署槽都是托管的,彼此之间没有任何关系。

  • Virtual Applications
  • 将版本托管为虚拟应用程序也是一种选择。但是,应用服务的所有设置都在这些虚拟应用程序之间共享。这意味着更改任何设置都会影响每个版本。

  • Azure Web App for Containers
  • 我对此的了解有限,但从我所读到的来看,这也是一种选择。根据应用程序的版本创建图像,并将这些图像上传到 Azure Container Registery 。然后使用这些图像为每个版本创建一个应用服务。

    最佳答案

    最好的方法是适合您的用例的方法 - 您提出的所有方法都是有效的。

    如果您希望能够在不更改任何代码的情况下进行单独的设置来进行版本控制,那么您的选择是部署槽和容器。在这两者之间,如果您不熟悉 Docker,那么插槽会更容易使用。

    正如您所提到的,虚拟应用程序执行类似的操作,但您无法分离配置。

    请记住,这意味着在同一个应用服务上运行应用的多个副本,因此您需要适当扩展。这可能是使用 API 版本控制的最大优势,即使它确实意味着一些不同的编码实践。您仍然只运行一份副本。随着您获得越来越多的版本,运行应用程序的多个副本的成本将会上升,除非您开始弃用旧版本。

    所有 Azure 网站都使用 https://{app_name}.azurewebsites.net URL,因此从技术上讲,它们都具有相同的基础。如果您希望它们都具有相同的子域,那么 API 版本控制或虚拟应用程序是可行的方法,除非您想构建某些重定向逻辑。当然,通过自定义域,您可以更好地控制 DNS 记录的映射方式。

    关于azure - 在 Azure 中维护以前版本的 API 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59767401/

    相关文章:

    azure - 调用 New-AzureRmADApplication 时无法将 TokenCloudCredentials 转换为 AccessTokenCredential

    c# - 来自 PostAsync 的 HttpPost 始终为 null

    rest - 使用 HATEOAS 对耦合的 RESTful API 进行版本控制

    c# - 处理 API 版本控制 .NET Core 中的代码重复

    azure - Kestrel 运行哪个框架?

    asp.net-core - MVC 6 中使用 Action 约束时使用 Swagger 的多个 Api 版本

    azure - 当强制 NSG 与子网关联时,如何使应用服务虚拟网络快速连接

    c# - 通过托管身份访问 AzureBlobStorage c#

    Azure管道: How to block pipeline A if pipeline B is running

    c# - 如何使用 Razor/C# 值预填充 'date' 输入字段