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

时间:2019-02-19 02:50:32

标签: api azure-functions versioning design-principles

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

API层(作为功能应用程序)调用业务层,该业务层实现业务逻辑,而数据层实现用于存储和检索数据的逻辑。

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

我的问题是

组织代码以实现此目的的最佳方法是什么?除了使用不同的名称空间/存储库以外,还有其他方法来组织我的代码以适应不同的版本吗?

到目前为止,我已经为每个版本创建了单独的命名空间,但这创建了很多代码重复。同样,在我的一些朋友对它进行了审查之后,他们提出了一个担忧,即如果使用单独的名称空间,那么如果他们不希望更新,则将迫使旧系统更改对新名称空间的引用。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

在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)
{
}

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

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

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

Versioning APIs in Azure Functions的示例代码