我已经在Azure Function Apps的帮助下创建了一个演示微服务应用程序。为了分离问题,我创建了一个API层,业务层和一个数据层。
作为功能app的API层调用实现业务逻辑的业务层,而数据层实现用于存储和检索数据的逻辑。
经过深思熟虑后,我决定在我的演示中使用基于查询的API版本控制。
我的问题是,
组织代码以促进此操作的最佳方法是什么?除了使用不同的命名空间/ repos之外,还有其他方法来组织我的代码以适应不同的版本吗?
截至目前,我已经为每个版本创建了单独的命名空间,但这创建了大量的代码重复。在我的一些朋友对其进行审核之后,他们还提出了一个问题:如果使用单独的命名空间,我会强制遗留系统更改对新命名空间的引用,如果需要更新则不建议这样做。
任何帮助,将不胜感激。
在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中实现,例如: