【发布时间】:2020-05-03 03:55:53
【问题描述】:
我的目标是让以前的版本不可变:它们的定义和功能不应该改变。 API 使用基于 .NET 4.7.2(依赖原因)的 ASP.NET Core 构建,并作为 Azure 应用服务托管。
最好是,我不想通过添加“版本知识”来弄乱我的代码。此外,如果版本可以托管在相同的基本 URL 下,那也很好。
我的研究:
这样,您就可以完全控制应用程序中的版本控制。但是当新版本发布时,所有旧版本也会更新,因此可以更改。这意味着您不能更改任何现有函数,而必须创建新版本,like Scott does in URL PATH SEGMENT VERSIONING。
正如文档所解释的,这应该用于暂存。但是,这也可以用于“存储”您的版本,因为每个部署槽都是托管的,彼此之间没有任何关系。
将版本托管为虚拟应用程序也是一种选择。但是,应用服务的所有设置都在这些虚拟应用程序之间共享。这意味着在更改任何设置时,这将影响每个版本。
我对此的了解有限,但从我所阅读的内容来看,这也是一种选择。根据您的应用程序版本创建图像,将这些图像上传到Azure Container Registery。然后使用这些图像为每个版本创建一个应用服务。
【问题讨论】:
-
在提供答案之前,我想澄清一下您的意思:"...当发布新版本时,所有旧版本也会更新,因此可以改变。这意味着你不能改变任何现有的函数,而必须创建新的版本......” 你如何实现隔离的实现细节可以有很大的不同。肯定有办法让以前版本的代码完全不受影响。旧版本只有在您更改它们时才会更改。
-
我的意思是,通过 API 版本控制,只要您保持代码不变,以前的版本就会包含在 API 中。但是为了实现不变性,不应更改以前版本使用的所有代码。因此,为了更改函数的功能,您必须克隆整个函数链以确保旧版本不会更改。
-
明白了。我将在下面提供更详细的答案。
-
@ChrisMartinez 谢谢,期待您的回复!
标签: azure asp.net-core api-versioning azure-deployment-slots