我们在ASP.NET中设置了一堆json Web服务,它们作为.ashx(自定义处理程序)文件提供。一个例子是:
/mobile/json.ashx
我们希望实施某种形式的版本控制,以及不破坏尚未升级的应用程序。所以我们沿着这条道路前进:
/mobile/json.ashx?v=1.0
现在,我们的自定义处理程序中有一个switch语句来管理api版本之间的差异,但这对我来说听起来不是一个非常易于维护的解决方案。
此类设置的最佳做法是什么?版本控制有哪些选项?
谢谢
答案 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
。