ASP.NET Web API (第一部分)
[原文发表地址] ASP.NET Web API (Part 1)
[原文发表时间] 2012-02-23 22:06
本周早些时候,我写过一篇关于 ASP. NET MVC 4 测试版的博文。ASP. NET MVC 4 是一个重大的更新,它带来了一堆出色的新功能。我最兴奋的改进之一是为创建"Web ApI"提供了支持。今天的博文是我将要谈论的这种新功能的系列文章中的第一篇。
Web ApI
近几年见证了 Web ApI的兴起——服务是通过一般的 HTTP公开了,而不是通过更正式的服务合同 (如SOAP或 WS *)。公开服务这种方式可以使它易于与各种各样的设备和客户端平台集成功能,以及通过在浏览器中使用 JavaScript来创建更丰富的HTML体验。web 中的大多数大型站点现在公开了 Web API (一些例子: Facebook、 Twitter,LinkedIn,Netflix,等),随着连接设备激增和用户需求更丰富的用户体验,它们的使用在未来几年将更加快速。
我们新的 ASP. NET Web API支持让你能够轻松地创建功能强大的 Web API,可以从范围广泛的客户端 (包括使用 JavaScript从浏览器中,到任何移动/客户端平台上的本机应用程序)访问。它提供以下支持:
- 现代 HTTP 的编程模型: 在你的 Web 应用程序中直接访问和处理 HTTP 请求并响应,使用清洁、 强类型的 HTTP 对象模型。除了在服务器上支持这个 HTTP 的编程模型之外,通过使用新的 HttpClient API来从任何.NET 应用程序中调用 Web ApI,我们也支持客户端中相同的编程模型。
- 内容协商: Web API 有对内容协商的内置支持 — — 这使客户端和服务器一起工作以决定从一个 API 返回的正确的数据格式。我们为JSON、 XML 和Form URL 编码的格式提供默认支持,并可以通过添加你自己的格式化程序来扩展这种支持,或者甚至用你自己的来替换默认的内容协商策略。
- 查询组成: Web API 通过 OData URL 公约使你能够轻松地支持查询。当你从你的 Web API 返回一种类型的 IQueryable <T> 时,框架将自动为它提供 OData 查询支持— — 使其易于分页和排序。
- 模型绑定和验证:模型绑定器提供了一种简单的方法来从HTTP 请求中的不同部分提取数据,并将这些信息部分转换为Web API行为可使用的.NET对象。Web API 支持相同的模型绑定和ASP. NET MVC 现今支持的验证基础结构。
- 路由: Web ApI 支持完整的路由功能集。现今ASP. NET MVC 和 ASP.NET也支持这一点,包括路线参数和约束。默认情况下,Web API 还提供了智能公约,使你能够轻松地创建实现 Web ApI的类,而无需不得不将属性应用到你的类或方法中。Web API 的配置纯粹是通过代码来实现的 — — 保持你的配置文件干净。
- 筛选器: Web ApI 使你能够轻松地使用和创建筛选器 (例如: [授权]),那样你能够封装和应用交叉行为。
- 改进的可测试性: 与其在静态文本对象中设置 HTTP 的详细信息,不如将 Web API 行为与 HttpRequestMessage 和 HttpResponseMessage 一起使用— — 两个新 的HTTP对象 (在其他内) 使测试更容易。例如,你可以单元测试你的 Web ApI,而无需不得不使用 Mocking 框架。
- IoC支持: Web API 支持由 ASP. NET MVC 实现的服务定位器模式,使你能够解决不同设备的依赖。你可以轻松地使用IoC容器或依赖注射架构来集成,以保持干净的依赖解决方案。
- 灵活的托管: Web ApI可以托管在任何类型的 ASP.NET应用程序内 (包括这两个基于应用程序的ASP. NET MVC和ASP.NET Web Forms)。我们还设计了 Web API 支持,这样,你还可以选择在你自己的进程内托管/公开它们,如果你不想使用 ASP.NET/IIS 来这样做。至于你如何以及在哪儿使用它,这给了你最大的灵活性。
了解更多
访问www.asp.net/web-api找到如何使用 ASP.NET Web API的教程。你也可以在 ASP. NET MVC 4 的演讲视频(在此演讲中,关于它我讲了36 分钟)观看我谈论和演示 ASP .NET Web API。
在我的下一篇博文中,我将演示如何创建新的 Web API ,它运行的基本原理,以及如何以编程方式从客户端激活它。
希望这会对你有所帮助,
Scott
P.S. 除了写博客之外,我还使用 Twitter 来快速发表文章和共享链接。我的 Twitter是: @ scottgu