在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
https://www.zhihu.com/question/46369458/answer/144963042 首先要重点说的是,Web API是一种无限接近于RESTful风格的轻型框架,且不是微软提出来的,微软在.NET上实现了这中框架—http://Asp.Net Web API,所以“微软包装”是一个极大的偏见。 就应用市场时间而论,MVC普及市场的时间比Web API时间早。为什么MVC提出来了,且都被大家公认是一种经典的web站点实现架构,为什么还要搞Web API呢? 这两年什么炒得最火热?互联网。在网络技术不断更新和替代的过程,网络不断普及。互联网产品只要你有技术,就可以做。但要说明的是,互联网产品的用户不再是一小部分人群,除了潜在用户,你需要面对的是庞大的上网人群和开发者。这时候你要考虑你的WEB服务器是否能够支持这么多的用户,节省一点点传输数据的带宽都能够让你的服务器轻松不少,除此之外,你还要考虑你的潜在用户变成你的真实用户的某刻时刻,你的服务器是否能够顺利支撑。 面对用户,你要考虑你的产品是否能够让用户使用起来感觉很“爽”,你要把用户体验放在首位,那么你的产品首先功能上必须稳定,不然即使有再好的创意,再耐心的用户总会使用其它产品替代你的产品。 面对开发者,你想要把某些功能开放,这时候你必须要开放某些接口。有人会说,我也可以使用MVC来开放这些接口,没错是可以,但是绕远道给你带来的是更大的代价。 Web API 和 MVC可以说是两个不同的东西。Web API更倾向于基于HTTP协议的服务,直接返回用户的数据请求。MVC是建站的一种框架,倾向于返回用户的页面请求。 我总结了以下 http://ASP.NET Web API 的特性,更能说明Web API是一种数据请求框架:
类似可以理解成ashx和webform的区别
"WebApi和MVC有什么区别?" 首先要重点说的是,Web API是一种无限接近于RESTful风格的轻型框架,且不是微软提出来的,微软在.NET上实现了这中框架—Asp.Net Web API,所以“微软包装”是一个极大的偏见。 我在公司经历了从 MVC 转到 “Web API + 其他框架”的过程,为什么要这么做? 从需求的根本上来看,业务的布局和扩张导致是根本原因。我们要求,数据库数据不只能够对 Web 程序服务,对其他业务也行,甚至可以根据数据接口开放给第三方。例如,MVC 业务中,可以在前端用AJAX获取和更新数据,也可以在后台用 HttpClient, 调用的方式不限,数据格式完全由调用方决定(XML 和 JSON 也是足够了)。 为什么不用 MVC 来做? MVC 框架负责的东西太多了,我们可以说它是一个重量级的框架,因为它负责了数据接口,逻辑运算和View层的显示,为了减少 Controller 层的代码量,我们甚至还在三层架构上加了 DAL 和 BLL 层。除此之外,MVC 只能运行在 IIS 和 新出来的 DotNetCore 中,宿主选择比较少。
Web API 和 MVC可以说是两个不同的东西。Web API更倾向于基于HTTP协议的服务,直接返回用户的数据请求。MVC是建站的一种框架,倾向于返回用户的页面请求。
我总结了以下 ASP.NET Web API 的特性,更能说明Web API是一种数据请求框架:
增增删删写了蛮多,后来发现可以用一张图和两段话来概括。而其他一些概念和功能上的异同(view还是json,xml,内容协商等)网上随便一搜也有,或者推荐看看蒋金楠的两本框架揭秘。 使用上区分,mvc主要用于建站,web api主要用于构建http服务,当然你非要用mvc来构建Uri式的Api也行,不过显然是没有这个必要的,一个不恰当的比喻就像是你也可以玩破解版的单机游戏,也可以通过平台进行联机,但是始终不如steam上来得爽是吧。自身实现上区分的话,两种框架主要是在Asp .Net的基础上进行改造,主要是对HttpModule和HttpHandler做了扩展,实现方法是不一样的,比如说前者更像是在一层上建了第二层,引伸出更强大的路由机制,实现了诸如MvcHandler和ControllerFactory这种消息处理和后台控制器方法选择机制,Web Api除了扩展了前者以外,另外写出了一套独立的,独立于Asp .Net的消息处理管道,就像是借鉴原来房子的模型,重新设计出了另外一套别墅。这也很好地解释了为什么Web Api可以寄宿在不同的宿主上(寄宿的本质就是利用一个具体的应用程序为Web Api提供一个运行的环境,并解决请求的接收和响应的回复),如Web Host,Self Host方式,这和WCF是相似的。而MVC只能寄宿于IIS上(不考虑.net core),就像Webform的寄宿方式。何况它们两者虽然都有Controller和Action,但是请求的实现和响应的回复机制也是不同的,比如说Web Api处理消息有两个核心类是HttpRequestMessage和HttpResponseMessage。这两种框架最多只能说是模式上类似,实现上还是有很大差别的。不过两者都是Asp .Net的组成成员,图上表现得很清楚了。 |
请发表评论