如何在.net中对api端点进行版本控制

时间:2013-08-15 18:14:59

标签: c# json api architecture

我们在ASP.NET中设置了一堆json Web服务,它们作为.ashx(自定义处理程序)文件提供。一个例子是:

/mobile/json.ashx

我们希望实施某种形式的版本控制,以及不破坏尚未升级的应用程序。所以我们沿着这条道路前进:

/mobile/json.ashx?v=1.0

现在,我们的自定义处理程序中有一个switch语句来管理api版本之间的差异,但这对我来说听起来不是一个非常易于维护的解决方案。

此类设置的最佳做法是什么?版本控制有哪些选项?

谢谢

1 个答案:

答案 0 :(得分:2)

将版本放在查询参数中(即?之后)向用户建议每个端点都是单独版本化的。我会避免这种情况。

如果您的网络服务的结构使得有更大的逻辑单元进行单独版本化,那么我会选择以下内容:

/api1/1.0/some/endpoint
/api1/1.1/some/endpoint
/api2/1.0/some/other/endpoint
/api2/2.0/some/other/endpoint
...

路径的版本部分直接位于正在版本化的东西之后。这向用户建议/api1/1.1/下面的所有内容都是API 1的1.1版,/api2/2.0/下面的所有内容都是API 2的2.0版。

如果某人完全省略了路径的版本部分,则应隐含最新版本。因此,/api2/some/other/endpoint会映射到/api2/2.0/some/other/endpoint

如果您正在使用ASP.NET MVC,那么使用RegisterRoutes中的Global.asax.cs方法中的路由配置可以非常轻松地完成所有这些操作。例如:

routes.MapRoute("api1/1.1", "api1/1.1/some/endpoint",
    new { controller = "Api1_1_1", action = "SomeEndpoint" });

您拥有方法Api1_1_1的控制器类SomeEndpoint