2012-05-23 127 views
4

版本WebAPI的最佳方法是什么?实现ASP.NET WebAPI版本控制的最佳方式是什么?

我从头开始构建一个API,我想确保它将在未来优雅地版本化。我设想的东西像mysite.com/api/v2/...

我看到的一种方法是为每个版本的API创建一个单独的项目(网络应用程序)。但也许有更好的方法来做到这一点?

谢谢你的想法。在URL

回答

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。该实现将查看版本号,并可能根据命名空间查找类型。


UPDATE

我不打算在这里开始REST的争论。但随着@DarrelMiller指出,这里是关于同一主题的旧讨论劝阻我建议的方法:

How to version REST URIs

个人认为URL版本是要走的路。

+0

我可以向你保证,最REST拥护者会在那样的URL强烈反对版本。 –

+0

@达雷尔米勒,你有什么看法?你能与我们分享吗? – Aliostad

+0

http://stackoverflow.com/questions/972226/how-to-version-rest-uris/975394#975394 –

3

您需要创建自己的IHttpControllerSelector实现。最好的方法是将此实现基于微软的IHttpControllerSelector。然后你就可以在你的IHttpControllerSelector,如果你通过URL或内容类型要版本决定。

最基本的实现直接实现IHttpControllerSelector,只是实现了SelectController方法,但性能方面的原因是围绕它执行一些缓存更好。

为了找到你简单IHttpControllerTypeResolver例如,您可以开始使用HttpConfiguration.Services控制器。

我用这样的:http://damsteen.nl/blog/implementing-versioning-in-asp.net-web-api。在Github上放一些代码:https://github.com/Sebazzz/SDammann.WebApi.Versioning

相关问题