Azure Function API 版本控制 - 如何构建我的代码?

1 versioning api design-principles azure-functions

我创建了一个在 Azure Function Apps 的帮助下实现的演示微服务应用程序。为了分离关注点,我创建了 API 层、业务层和数据层。

API层,即功能应用程序,调用业务层实现业务逻辑,而数据层实现存储和检索数据的逻辑。

经过深思熟虑,我决定在我的演示中使用基于查询的 API 版本控制。

我的问题是,

组织代码以促进这一点的最佳方法是什么?除了使用不同的命名空间/存储库之外,还有其他方法来组织我的代码以适应不同的版本吗?

到目前为止,我已经为每个版本创建了单独的命名空间,但这会造成大量代码重复。另外,在我的一些朋友对其进行审查后,他们提出了这样的担忧:如果使用单独的命名空间,我将迫使遗留系统更改对新命名空间的引用(如果它们需要更新),这是不建议的。

任何帮助,将不胜感激。

小智 8

在 Azure Functions 中实现版本控制的最简单方法是使用端点。HttpTrigger 属性允许定义自定义路由,您可以在其中设置预期版本。

// Version 1 of get users
[FunctionName(nameof(V1UserList))]
public static IEnumerable<UserModel> V1UserList(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = "v1/users")]HttpRequest req, ILogger log)
{
}

// Version 2 of get users
[FunctionName(nameof(V2UserList))]
public static IEnumerable<UserModel> V2UserList(
[HttpTrigger(AuthorizationLevel.Function, "get", Route = "v2/users")]HttpRequest req, ILogger log)
{
}
Run Code Online (Sandbox Code Playgroud)

单独部署每个版本时,需要路由器组件将请求重定向到正确的 API 端点。

路由器组件可以在 Azure 中使用不同的服务来实现,例如:

  • Azure Function Proxies:您可以在函数应用程序上指定由其他资源实现的端点。您可以使用这些代理将大型 API 分解为多个功能应用程序(如在微服务架构中),同时仍然为客户端提供单个 API 界面。
  • API 管理:Azure API 管理支持将 Azure Function Apps 作为新 API 导入或将其附加到现有 API。该过程会自动在 Azure Function App 中生成主机密钥,然后将其分配给 Azure API 管理中的命名值。

Azure Functions 中版本控制 API的示例代码