使用WCF或ASP.Net Web Api实现RESTful API的版本控制
假设我已经阅读了很多关于版本化restful api的内容,我决定不通过uri对服务进行版本化,而是使用mediatypes(请求接受头中的格式和模式):
实现wcf服务或web api服务以提供定义uri中所请求资源的请求的最佳方式是什么,格式(例如,application / json)和schema中的schema / version(例如player-v2)头? WCF允许我基于uri进行路由,但不基于标头.所以我不能正确路由. Web Api允许我定义自定义mediatype格式,路由所请求的格式,但不是模式(例如,返回类型PlayerV1或PlayerV2). 我想实现一个服务(使用WCF或Web Api),对于此请求(伪代码): api.myservice.com/players/123 Accept format=application/json; schema=player-v1 以json格式返回PlayerV1实体 并为此请求: api.myservice.com/players/123 Accept format=application/json; schema=player-v2 以json格式返回PlayerV2实体. 有关如何实现这一点的任何提示? 编辑:澄清我为什么要使用内容协商处理版本,请参见此处:REST API Design: Put the “Type” in “Content-Type”. 解决方法
你带来什么并不是我的版本,但更多的是内容协商. Accept标头表示客户端对资源格式的愿望.服务器应该授予愿望或返回406.因此,如果我们需要更多的契约概念(尽管Web API unline RPC没有定义),那么使用资源更加可靠.
版本控制的最佳实践尚未完全讨论,但大多数REST爱好者认为使用URL中的版本是可行的方法(例如http://server/api/1.0.3 / …).这对我来说也更有意义,因为在你的方法中使用内容协商服务器必须保持向后兼容性,我只能想象服务器上的代码会变得越来越复杂.使用URL方法,您可以彻底解决:旧客户可以愉快地使用以前,而新客户可以享受新API的好处. UPDATE 好了,现在问题已经改为“在RESTful AP中实现内容协商”. 类型1:控制器 – 忘记 基本上,如果内容协商仅涉及资源的格式,则实现或使用正确的媒体类型格式化器就足够了.例如,如果内容协商涉及返回JSON或XML.在这些情况下,控制器无视内容协商. 类型2:控制器感知 控制器需要知道请求协商.在这种情况下,需要从请求中提取请求中的参数并将其作为参数传入.例如,让我们想象一下控制器上的这个动作: public Player Get(string schemaVersion) { ... } 在这种情况下,我会使用经典的MVC样式值提供程序(请参阅Brad Wilson’s post on ValueProviders – 这是在MVC上,但Web API的值提供程序看起来类似): public Player Get([ValueProvider(typeof(RequestHeadersSchemaValueProviderFactory))]string schemaVersion) { ... } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 为什么我应该选择Crystal Report或SSRS而不是纯
- ASP.NET:在代码中验证用户
- 页面存在时的404 – IIS 5,ASP.NET 4.0
- asp.net-core – ASP.NET Core 1.0 SynchronizationContext
- asp.net-web-api – Web API嵌套路由无法按预期工作
- 使用MVC在ASP.NET中实现API的最佳方法是什么?
- 如何重用这个基于ASP.NET和C#中的Ultimate RestSharp客户端
- asp.net – 使用codebehind显示隐藏div
- 在代理服务器后面设置ASP.NET应用程序的基本URL
- asp.net – 在UserControl中将选定值设置为DropDownList
- Jquery+ajax请求data显示在GridView上(asp.net)
- asp.net mvc 中使用async/await异步编程
- asp.net-mvc-4 – 编辑视图中多选列表框的超级简
- asp.net – 如何使用反射在app_code中创建一个类
- asp.net-mvc-3 – MVC3 / Razor缩略图/调整大小图
- ASP.NET MVC / WebApi的Azure表存储最佳实践
- asp.net – 与WCF和其他Web服务有什么区别?
- asp.net-mvc – NHaml是否具有content_for布局能
- asp.net – 每个会话的NH请求 – “会话已关闭!
- ASP.NET MVC:经过几分钟的缓慢访问,然后每次以下