ASP.NET Web API是什么
ASP.NET Web API是什么Web API最重要的是可以构建面向各种客户端的服务。另外与WCF REST Service不同在于,Web API利用Http协议的各个方面来表达服务(例如 URI/request response header/caching/versioning/content format),因此就省掉很多配置。
Web API在ASP.NET完整框架中地位如下图,与SignalR一起同为构建Service的框架。Web API负责构建http常规服务,而SingalR主要负责的是构建实时服务,例如股票,聊天室,在线游戏等实时性要求比较高的服务。
一、ASP.NET Web API 特性
1、先进的 HTTP 编程模型: 使用新的强类型的 HTTP 对象模型直接操作 HTTP 请求和响应, 在 HTTP客户端使用相同的编程模型和 HTTP 管道;
2、支持路由: Web API 完整支持 ASP.NET 路由, 包括路由参数和约束。 此外, 到动作的映射支持约定, 从此将不再需要向类或者方法添加类似于 [HttpPost] 之类的属性;
3、内容协商: 客户端与服务端可以一起决定 API 返回数据的格式。 默认支持 XML, JSON 以及 Form URL-Encoded 格式, 可以扩展添加自定义格式, 甚至可以替换掉默认的内容协商策略;
4、模型绑定与验证: 模型绑定器可以轻易地从 HTTP 请求中提取数据并转换成在动作方法中使用的 .Net 对象;
5、过滤: Web API 支持过滤, 包括总所周知的 [Authorize] 过滤标记, 可以为 Action 添加并插入自定义过滤, 实现认证、异常处理等;
6、查询聚合: 只要简单的返回 Iqueryable<T> , Web API 将会支持通过 OData 地址约定进行查询;
7、改进的 Http 细节可测试性: Web API 不是将 HTTP 细节设置到一个静态的 Context 对象上, 而是使用 HttpRequestMessage 和 HttpResponseMessage 实例, 可以使用这些对象的泛型版本为这些 Http 类型添加自定义类型;
8、改进的依赖反转 (IoC) 支持: Web API 使用 MVC Dependency Resolver 实现的服务定位器模式在不同的场景下来获取实例;
9、基于代码的配置: Web API 单独使用代码完成配置, 从而保证了配置文件的整洁;
10、自托管 (Self-Host) : Web API 除了可以托管在 IIS 中, 还可以托管在进程中,依旧可以使用路由以及其它的特性。
11、支持基于Http verb (GET, POST, PUT, DELETE)的CRUD (create, retrieve, update, delete)操作
通过不同的http动作表达不同的含义,这样就不需要暴露多个API来支持这些基本操作。
13、请求的返回格式支持 JSON,XML,并且可以扩展添加其他格式。
14、原生支持OData。
15、支持Self-host或者IIS host。
16、支持大多数MVC功能,例如Routing/Controller/Action Result/Filter/Model Builder/IOC Container/Dependency Injection。
二、当你遇到以下这些情况的时候,就可以考虑使用Web API了
1、需要Web Service但是不需要SOAP
2、需要在已有的WCF服务基础上建立non-soap-based http服务
3、只想发布一些简单的Http服务,不想使用相对复杂的WCF配置
4、发布的服务可能会被带宽受限的设备访问
5、希望使用开源框架,关键时候可以自己调试或者自定义一下框架
三、Web API 与 MVC区别
1、 MVC主要用来构建网站,既关心数据也关心页面展示,而Web API只关注数据
2、 Web API支持格式协商,客户端可以通过Accept header通知服务器期望的格式
3、 Web API支持Self Host,MVC目前不支持
4、 Web API通过不同的http verb表达不同的动作(CRUD),MVC则通过Action名字表达动作
5、 Web API内建于ASP.NET System.Web.Http命名空间下,MVC位于System.Web.Mvc命名空间下,因此model binding/filter/routing等功能有所不同
6、Web API非常适合构建移动客户端服务
四、Web API 与 WCF区别
1、如果服务需要支持One Way Messaging/Message Queue/Duplex Communication,选择WCF
2、如果服务需要在TCP/Named Pipes/UDP (wcf 4.5),选择WCF
3、如果服务需要在http协议上,并且希望利用http协议的各种功能,选择Web API
4、如果服务需要被各种客户端(特别是移动客户端)调用,选择Web API
五、提升 ASP.NET Web API 性能的几个方法
1、使用快的 JSON 序列化工具
JSON 的序列化对整个 ASP.NET Web API 的性能有着关键性的影响。
2、从DataReader中手动串行化JSON
你可以手动地从DataReader创建JSON字符串并避免不必要的对象创建,这样你就不用从DataReader中取值并写入对象,再从这些对象中取值并使用JSON Serializer产生JSON.
使用StringBuilder产生JSON,并在结尾处返回StringContent作为在WebAPI中响应的内容。
3、实现压缩
在你的ASP.NET Web API中使用GZIP 或 Deflate 。
对于减少响应包的大小和响应速度,压缩是一种简单而有效的方式。
4、使用caching
5、尽可能地使用典型的 ADO.NET
最流行的ORM之间的性能比较.
6、在 Web API 中实现异步方法
使用异步的 Web API 服务大幅增加 Web API 对于Http 请求的处理数量。
实现是简单的,只需使用 async 的关键字和 将你方法的返回值类型改为 Task 即可。
7、返回多个结果集和集合的组合
减少传输的次数不仅多数据库有好处,对于 Web API同样 ,你才有可能使用结果集的功能。
也就是说你可以从DataReader去提取多个结果集