版本WebAPI的最佳方法是什么?
我正在从头开始构建一个API,我想确保它将来会优雅地版本化。我想象的是mysite.com/api/v2 /...
我看到的一种方法是为每个API版本创建一个单独的项目(Web应用程序)。但也许有更好的方法来做到这一点?
感谢您的想法。
答案 0 :(得分:4)
在网址中包含版本号是我在本文中解释的标准方法(我不重复内容):Implementing versioning a RESTful API with WCF or ASP.Net Web Api
尽管可以,但您无需创建全新的项目。您将面对单个项目的问题是名称会发生冲突:
/api/v1.0/Car/123
和
/api/v2.0/Car/123
两者都会指向CarController
,而您只能拥有其中一个。解决方案是实现您自己的IHttpControllerSelector
并注册DependencyResolver。此实现将查看版本号,并可能根据命名空间查找类型。
我不打算在这里引发REST争议。但正如@DarrelMiller指出的那样,这是一个关于同一主题的较早讨论令人沮丧我建议的方法:
我个人认为网址版本化是最佳选择。
答案 1 :(得分:3)
您需要创建自己的IHttpControllerSelector
实现。最好的方法是将此实现基于Microsoft的IHttpControllerSelector
。然后,您可以在IHttpControllerSelector
中决定是否要按网址或内容类型进行版本。
最基本的实现直接实现IHttpControllerSelector
并且只实现SelectController
方法,但性能原因是围绕它实现一些缓存更好。
要查找控制器,您可以使用IHttpControllerTypeResolver
简化HttpConfiguration.Services
实例。
我使用过这样的东西:http://damsteen.nl/blog/implementing-versioning-in-asp.net-web-api。还在Github上添加了一些代码:https://github.com/Sebazzz/SDammann.WebApi.Versioning。