在.NET平臺下,有大量的技術讓你建立一個HTTP服務,像Web Service,WCF,如今又出了Web API。在.NET平臺下,你有不少的選擇來構建一個HTTP Services。我分享一下我對Web Service、WCF以及Web API的見解。
二、這個是Web Service(ASMX)的進化版,能夠支持各類各樣的協議,像TCP,HTTP,HTTPS,Named Pipes, MSMQ.
三、不像WCF REST Service.它可使用HTTP的所有特色(好比URIs、request/response頭,緩存,版本控制,多種內容格式)
四、它也支持MVC的特徵,像路由、控制器、action、filter、模型綁定、控制反轉(IOC)或依賴注入(DI),單元測試。這些可使程序更簡單、更健壯
二、當你想建立一個服務,能夠用更快速的傳輸通道時,像TCP、Named Pipes或者甚至是UDP(在WCF4.5中),在其餘傳輸通道不可用的時候也能夠支持HTTP。
三、當你想建立一個基於HTTP的面向資源的服務而且可使用HTTP的所有特徵時(好比URIs、request/response頭,緩存,版本控制,多種內容格式),你應該選擇Web API
什麼是WebService?
W3C組織對其的定義以下,它是一個軟件系統,爲了支持跨網絡的機器間相互操做交互而設計。Web Service服務一般被定義爲一組模塊化的API,它們能夠經過網絡進行調用,來執行遠程系統的請求服務。簡單的說:WebService即Web服務,它是一種跨編程語言和跨操做系統平臺的遠程調用技術。
所謂跨編程語言和跨操做平臺,就是說服務端程序採用Java編寫,客戶端程序則能夠採用其餘編程語言編寫,反之亦然!跨操做系統平臺則是指服務端程序和客戶端程序能夠在不一樣的操做系統上運行。
所謂遠程調用,就是一臺計算機a上的一個程序能夠調用到另一臺計算機b上的一個對象的方法。譬如從天氣預報系統中獲取某個城市的天氣數據在本身系統中進行展現;從證券交易系統中獲取某隻股票的交易信息在本身的系統中進行展現;又譬如一個商城系統中可以展現快遞的跟蹤信息,而這些信息就是經過webservice從具體的快遞公司的系統中獲取的數據。
其實能夠從多個角度來理解WebService,從表面上看,WebService就是一個應用程序向外界暴露出一個能經過Web進行調用的API,也就是說能用編程的方法經過Web來調用這個應用程序。咱們把調用這個WebService的應用程序叫作客戶端,而把提供這個WebService的應用程序叫作服務端。從深層次看,WebService是創建可互操做的分佈式應用程序的新平臺,是一個平臺,是一套標準。它定義了應用程序如何在Web上實現互操做性,你能夠用任何你喜歡的語言,在任何你喜歡的平臺上寫Web service ,只要咱們能夠經過Web service標準對這些服務進行查詢和訪問。
Web Service = SOAP + HTTP + WSDL
SOAP Simple Object Access Protocol)協議是web service的主體,它經過HTTP或者SMTP等應用層協議進行通信,自身使用XML文件來描述程序的函數方法和參數信息,從而完成不一樣主機的異構系統間的計算服務處理。這裏的WSDL(Web Services Description Language)web 服務描述語言也是一個XML文檔,它經過HTTP向公衆發佈,公告客戶端程序關於某個具體的 Web service服務的URL信息、方法的命名,參數,返回值等。
WebService三要素:
1.SOAP (Simple Object Access Protocol):簡易對象訪問協議,soap用來描述傳遞信息的格式。
2.WSDL (WebServices Description Language):Web服務描述語言,用來描述WebService、以及如何訪問WebService
3.UDDI (Universal Description Discovery and Integration):通用描述、發現及整合,用來管理、分發、
查詢webService。
什麼是WCF?
Windows Communication Foundation(WCF)是由微軟開發的一系列支持數據通訊的應用程序框架,能夠翻譯爲Windows 通信開發平臺。整合了原有的windows通信的 .net Remoting,WebService,Socket的機制,並融合有HTTP和FTP的相關技術。是Windows平臺上開發分佈式應用最佳的實踐方式。
簡單的歸結爲四大部分:
1>.網絡服務的協議,即用什麼網絡協議開放客戶端接入。
2>.業務服務的協議,即聲明服務提供哪些業務。
3>.數據類型聲明,即對客戶端與服務器端通訊的數據部分進行一致化。
4>.傳輸安全性相關的定義。
它是.NET框架的一部分,由 .NET Framework3.0 開始引入,與Windows Presentation Foundation及Windows Workflow Foundation並行爲新一代 Windows操做系統以及 WinFX 的三個重大應用程序開發類庫。在 .NET Framework2.0 以及前版本中,微軟發展了 Web Service(SOAP with HTTP communication),.NET Remoting (TCP/HTTP/Pipeline communication) 以及基礎的 Winsock 等通訊支持。因爲各個通訊方法的設計方法不一樣,並且彼此之間也有相互的重疊性,對於開發人員來講,不一樣的選擇會有不一樣的程序設計模型,並且必需要從新學習,讓開發人員在使用中有許多不便。同時,面向服務架構(Service-Oriented Architecture) 也開始盛行於軟件工業中,所以微軟從新查看了這些通訊方法,並設計了一個統一的程序開發模型,對於數據通訊提供了最基本最有彈性的支持,這就是 Windows Communication Foundation。
Windows通訊基礎(Windows Communication Foundation,WCF)是基於Windows平臺下開發和部署服務的軟件開發包(Software Development Kit,SDK)。WCF爲服務提供了運行時環境(Runtime Environment),使得開發者可以將CLR類型公開爲服務,又可以以CLR類型的方式使用服務。理論上講,建立服務並不必定須要WCF,但實際 上,使用WCF卻可使得建立服務的任務事半功倍。WCF是微軟對一系列產業標準定義的實現,包括服務交互、類型轉換、封送(Marshaling)以及 各類協議的管理。
正由於如此,WCF纔可以提供服務之間的互操做性。WCF還爲開發者提供了大多數應用程序都須要的基礎功能模塊,提升了開發者的效率。WCF的第一 個版本爲服務開發提供了許多有用的功能,包括託管(Hosting)、服務實例管理(Service Instance Management)、異步調用、可靠性、事務管理、離線隊列調用(Disconnected Queued Call)以及安全性。同時,WCF還提供了設計優雅的可擴展模型,使開發人員可以豐富它的基礎功能。事實上,WCF自身的實現正是利用了這樣一種可擴展 模型。本書的其他章節會專一於介紹這諸多方面的內容與特徵。WCF的大部分功能都包含在一個單獨的程序集System.ServiceModel.dll 中,命名空間爲System.ServiceModel。
WCF是.NET 3.0的一部分,同時須要.NET 2.0的支持,所以它只能運行在支持它的操做系統上。目前,這些操做系統包括Windows Vista(客戶端和服務器)、Windows XP SP2和Windows Server 2003 SP1以及更新的版本。
什麼是Web API?
官方解釋:
ASP.NET Web API is a framework that makes it easy to build HTTP services that reach a broad range of clients, including browsers and mobile devices. ASP.NET Web API is an ideal platform for building RESTful applications on the .NET Framework.
在圖上能夠看出來,Web API 與SignalR一塊兒同爲構建Service的框架。Web API負責構建http常規服務,而SingalR主要負責的是構建實時服務,例如股票,聊天室,在線遊戲等實時性要求比較高的服務。
爲何要用Web API?
Web API最重要的是能夠構建面向各類客戶端的服務。另外與WCF REST Service不一樣在於,Web API利用Http協議的各個方面來表達服務(例如 URI/request response header/caching/versioning/content format),所以就省掉不少配置。
WebApi 功能簡介:
1.支持基於Http verb (GET, POST, PUT, DELETE)的CRUD (create, retrieve, update, delete)操做。
2.經過不一樣的http動做表達不一樣的含義,這樣就不須要暴露多個API來支持這些基本操做。
3.請求的回覆經過Http Status Code表達不一樣含義,而且客戶端能夠經過Accept header來與服務器協商格式,例如你但願服務器返回JSON格式仍是XML格式。
5.請求的回覆格式支持 JSON,XML,而且能夠擴展添加其餘格式。
6.原生支持OData。
7.支持Self-host或者IIS host。
8.支持大多數MVC功能,例如Routing/Controller/Action Result/Filter/Model Builder/IOC Container/Dependency Injection。
什麼地方須要用Web API?
當你遇到如下這些狀況的時候,就能夠考慮使用Web API了。
須要Web Service可是不須要SOAP
須要在已有的WCF服務基礎上創建non-soap-based http服務
只想發佈一些簡單的Http服務,不想使用相對複雜的WCF配置
發佈的服務可能會被帶寬受限的設備訪問
但願使用開源框架,關鍵時候能夠本身調試或者自定義一下框架
Web API 與MVC的區別
MVC主要用來構建網站,既關心數據也關心頁面展現,而Web API只關注數據
Web API支持格式協商,客戶端能夠經過Accept header通知服務器指望的格式
Web API支持Self Host,MVC目前不支持
Web API經過不一樣的http verb表達不一樣的動做(CRUD),MVC則經過Action名字表達動做
Web API內建於ASP.NET System.Web.Http命名空間下,MVC位於System.Web.Mvc命名空間下,所以model binding/filter/routing等功能有所不一樣 最後,
Web API很是適合構建移動客戶端服務