在最近发布的Visual Studio 2012 及.NET 4.5 中, 微软正式推出新的网络服务框架 ASP.NET Web API 。作为 ASP.NET MVC 4 的一部分,ASP.NET Web API 这套开源框架的设计目的是简化 RESTful 服务的开发和使用。
在“ Where does ASP.NET Web API Fit? ”这篇博文中, West Wind Technologies 的 Rick Strahl 解析了 ASP.NET Web API 的目标与优势。
ASP.NET Web API 与之前的内建 HTTP 服务解决方案的不同之处在于,它一开始就是围绕 HTTP 协议及其消息语义构建起来的。与 WCF REST 或 ASP.NET AJAX 加 ASMX 相比,它不是对现有框架的增强,而是一个全新的平台。新的 ASP.NET Web API 的优势在于它汇集了之前各平台的各种最佳特性,结合为一个全面而不臃肿的 HTTP 平台。这套 Web API 基于 ASP.NET,又借用了很多 ASP.NET MVC 的概念,应该很容易被 ASP.NET 的开发者适应和熟悉。
Strahl 指出 ASP.NET Web API 有一些核心功能,能让它成为 ASP.NET MVC 框架现用户的自然选择,同时也切合 HTTP 端点开发者的需要。
- 完善支持 URL 路由,透过用户熟悉的 MVC 风格路由语义,生成干净的 URL
- 根据 Accept 标头对请求和响应的序列化形式进行内容协商(Content Negotiation)
- 支持大量输出格式,包括 JSON、XML、ATOM 等
- 默认对 REST 语义有完善支持,同时又不强制限定必须使用 REST 语义
- 易于扩展的 Formatter 机制,支持添加新的输入 / 输出类型
- 可通过 HttpResponseMessage 类、HttpRequestMessage 类和强类型枚举来描述大量的 HTTP 操作,提供对更高级的 HTTP 特性的深度支持
- 基于惯例的设计引导用户按 HTTP Services 的正确方式行事
- Formatters 和 Filters 延续了 MVC 的扩展模型,具备出色的扩展能力
- 用于非 Web 程序时,可以脱离 IIS 运行(Self-hostable)
- 具备可测试性,测试机制的设计类似于 MVC
微软现有的 Web 服务框架叫做 Windows Communication Foundation( WCF),它利用 TCP、HTTP、MSMQ 等传输协议构建“契约先行”的服务。WCF 最初为基于 SOAP 的服务而设计,首先支持的是 WS-* 功能,但后来添加了少量迎合 REST 的功能。按照 Ido Flatow 在一篇 Code Project 文章中的描述,ASP.NET Web API 一开始也归在 WCF 框架旗下,但最终被移交到 ASP.NET 团队。
随着时间流逝,WCF Web API 为了让 WCF 适配到”原生”HTTP 世界,遇到了很多困难。因为 WCF 主要是为基于 SOAP 的 XML 消息设计的,为了让 Web API 成为 WCF 一部分,需要动的手术实在有点大(至少 Web API 的开发者们给了我这样的印象)。另一方面,ASP.NET MVC 的基础设施既能优雅地处理 HTTP 请求和响应,又能轻松创建各种控制器,好像是创建这种新类型服务的合适途径。
WCF 在最新的.NET 4.5 中依然健在,Flatow 给出了一些在 WCF 和 ASP.NET Web API 之间做出选择的标准。
- 如果想让服务支持特殊场景,如单向消息传递、消息队列、双向通信等等,最好选择 WCF。
- 如果想让服务优先使用快速传输通道,如 TCP、Named Pipes,甚至 UDP(在 WCF 4.5 中),然后在所有其他传输都不可用的时候支持 HTTP,那么最好选择 WCF,并且把 SOAP 和 WebHttp 两种绑定都用上。
- 如果服务是建立在 HTTP 之上的面向资源的服务,需要发挥 HTTP 的全部功能,如 定义浏览器的缓存控制,用 ETags 做版本与并发,传送图像、文档、HTML 页面等多种类型的内容,在响应中用 URI 模板去包含 Task URIs,那么新的 Web API 是最好的选择。
- 如果服务是多目标环境的,既可作为面向资源的服务走 HTTP 通道,又可作为 RPC 风格的 SOAP 服务走 TCP 通道——先跟我谈谈吧,我会给你一些指点。
ASP.NET Web API 已经包含在 Visual Studio 2012 中, Visual Studio 2010 用户可单独下载。需要上手指导的开发者可以在该团队的 Codeplex 网站上找到很多示例项目。
查看英文原文: Microsoft Release New REST API Framework as Part of .NET 4.5
感谢郭晓刚对本文的审校。
给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。
评论