一. 簡介
1. 什么是WebApi?
WebApi是一個很廣泛的概念,在這里我們特指.Net平台下的Asp.Net WebApi框架,它是針對各種客戶端(瀏覽器、APP等)來構建Http服務的一個框架,它是一種RestFul風格的開發接口的技術,它比WebService更省流量,比WCF更簡單。下圖表示WebApi在.Net平台下的地位。
簡單分析:WebForms、MVC均為ASP.NET下的Web開發框架,WebAPI負責構建HTTP常規服務,SignalR負責構建實時服務。
WebAPI和MVC簡單對比一下:WebAPI是專注於接口開發,更專業,用戶不會直接和WebApi打交道,因此WebApi也不會生成界面,當然我們完全可以使用MVC來開發接口,甚至一般處理程序(HttpHandler)
2. WebApi的功能特點
(1). 支持RestFul風格的的請求,即可以通過 Get、Post、Put、Delete請求CRUD操作,不需要暴露更多的API。
(2). 方法的返回值可以直接返回對象,專注於數據。
(3). 獨立於IIS部署(selfhost、winform、控制台)。
(4). 方法可以直接聲明為async。
(5). 支持MVC大部分功能,但和MVC在路由、Filter、ModelBinder等方面都有一些區別.(這里指.Net FrameWork)。
3. WebApi和MVC的區別
(1). MVC主要用來構建網站,所以既關心數據又關心頁面,而WebApi主要用來構建接口,所以只關心數據。
(2). WebApi支持Self Host,即獨立於IIS部署,MVC不支持。(.Net Core 下的MVC是支持的)
(3). WebApi通過請求方式來區分請求哪個接口,MVC則需要通過Action的名字來確定。
(4). WebApi位於System.Web.Http命名空間下,而MVC位於System.Web.Mvc命名空間下,所以二者在路由、Filter、ModelBinder等方面都有一些區別。
(5). WebApi更輕量更適合構建App的接口服務。
(6). Web API支持格式協商,客戶端可以通過Accept header通知服務器期望的格式。
4. WebApi和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
二. Restful
1. 什么是RestFul風格的接口?
(1).調用者不再根據方法名稱區分請求方法,而是通過請求方式進行區分,將所有的操作都抽象成對資源的增刪改查。
即:新增用Post請求,查詢用get請求,修改用put請求,刪除用delete請求。
(2).請求的路徑中將不在出現方法名稱
(3).用Http的返回狀態碼表示服務器端的處理結果,eg:找不到用404、沒有權限返回201,不在需要自己約定狀態碼。
(4).有利於系統優化,瀏覽器可以自動緩存Get請求。
2. RestFul風格的弊端
理論性太強,很容易把初學者搞暈,比如 如何通過狀態碼區分是"賬號錯誤"還是"密碼錯誤"? 比如"登錄"屬於什么操作?再比如 一個控制器里有兩個方法 GetM1() 和 GetM2(), 兩個方法中都沒有參數值,這種情況如何通過請求方式來區分呢?再比如 下面的GetStudets(string str) 和 GetTeachers(string str) 方法,參數名都是str,所以無法區分(可以把其中一個參數名改為str2,就不沖突了,或者通過別的路由規則聲明一下,或者給標注個非Get請求的標記,比如[HttpPost]總之很麻煩)
三. 系列章節
第一節:WebApi的純原生態的RestFul風格接口和路由規則介紹
第三節:總結.Net下后端的幾種請求方式(WebRequest、WebClient、HttpClient)
第七節:WebApi與Unity整合進行依賴注入和AOP的實現
第八節:常見安全隱患和傳統的基於Session和Token的安全校驗
第九節:JWT簡介和以JS+WebApi為例基於JWT的安全校驗
第十三節:Asp.Net Core WebApi基礎總結和請求處理
第十四節:Asp.Net Core WebApi生成在線文檔
!
- 作 者 : Yaopengfei(姚鵬飛)
- 博客地址 : http://www.cnblogs.com/yaopengfei/
- 聲 明1 : 本人才疏學淺,用郭德綱的話說“我是一個小學生”,如有錯誤,歡迎討論,請勿謾罵^_^。
- 聲 明2 : 原創博客請在轉載時保留原文鏈接或在文章開頭加上本人博客地址,否則保留追究法律責任的權利。