将版本放在查询参数中(即,在 之后?)向用户建议每个端点都是单独版本的。我会避免这种情况。
如果您的 Web 服务的结构使得有更大的逻辑单元被单独版本化,那么我会使用这样的东西:
/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。