序言
最近工做的項目一直使用API,就想趁這個機會,把API的知識點進行一次梳理和總結,順便提高一下本身對API全新的認識php
Web API 是ASP.NET平臺新加的一個特性,它能夠簡單快速地建立Web服務爲HTTP客戶端提供API。Web API 使用的基礎庫是和通常的MVC框架同樣的,但Web API並非MVC框架的一部分,微軟把Web API相關的類從 System.Web.Mvc 命名空間下提取了出來放在 System.Web.Http 命名空間下。這種理念是把 Web API 做爲ASP.NET 平臺的核心之一,以使Web API能使用在其餘的Web應用中,或做爲一個獨立的服務引擎。本文爲了更好的理解Web API,先帶你們瞭解一下 REST 和 RESTful Web APIhtml
理解REST和RESTful Web API
爲了更好的理解Web API,先帶你們瞭解一下 REST 和 RESTful Web API。如下內容大多來自維基百科。web
關於REST及RESTful的概念,已有很多文章介紹,這裏整理幾篇我以爲不錯的參考:數據庫
- 維基百科的定義: REST
- 什麼是REST跟RESTful? REST理論的中文詳述,其中你能夠了解到WCF Restful屬於RPC 樣式的 Web 服務,ASP.NET Web API屬於RESTful Web 服務。
- 深刻淺出REST InfoQ的專文介紹,文中甚至有Roy T. Fielding當年REST博士論文的中文翻譯連接。另外值得一提的,你們可能沒聽過Roy Fielding的大名,但若是得知他是HTTP規格的主要做者及Apache HTTP Server項目的發起人之一,應該不會有人懷疑他在Web技術領域的份量。
上面的文章建議你們認真的讀一下,這裏咱們簡要的介紹下REST 作入門介紹,理解整個 REST 能讓咱們在 ASP.NET Web API 的路上更順暢。api
REST(全名:Representational State Transfer),State Transfer 爲 "狀態傳輸" 或 "狀態轉移 ",Representational 中文有人翻譯爲"表徵"、"具象",合起來就是 "表徵狀態傳輸" 或 "具象狀態傳輸" 或 "表述性狀態轉移",不過,通常文章或技術文件都比較不會使用翻譯後的中文來撰寫,而是直接引用 REST 或 RESTful 來表明,由於 REST 一整個觀念,想要只用六個中文字來完整表達真有難度。是Roy Fielding博士在2000年他的博士論文中提出來的一種軟件架構風格。瀏覽器
REST 從資源的角度來觀察整個網絡,分佈在各處的資源由URI肯定,而客戶端的應用經過URI來獲取資源的表徵。得到這些表徵導致這些應用程序轉變了其狀態。隨着不斷獲取資源的表徵,客戶端應用不斷地在轉變着其狀態,所謂表徵狀態轉移(Representational State Transfer)。安全
目前使用Web服務的三種主流的方式是:遠程過程調用(RPC),面向服務架構(SOA)以及表徵性狀態轉移(REST),其中REST模式的Web服務與複雜的SOA和RPC對比來說顯的更加簡潔,愈來愈多的web服務開始採用REST風格設計和實現。服務器
須要注意的是,REST是設計風格而不是標準,但REST設計風格常基於使用HTTP,URI,和XML以及HTML這些現有的普遍流行的協議和標準。REST設計風格有以下要點:網絡
- 資源是由URI來指定。
- 對資源的操做包括獲取、建立、修改和刪除資源,這些操做正好對應HTTP協議提供的GET、POST、PUT和DELETE方法。
- 經過操做資源的表現形式來操做資源。
- 資源的表現形式則是XML或HTML,取決於讀者是機器仍是人,是消費web服務的客戶軟件仍是web瀏覽器。固然也能夠是任何其餘的格式,如JSON。
另外,使用REST須要知足一些要求,如客戶端和服務器結構、鏈接協議具備無狀態性、可以利用Cache機制增進性能等。架構
REST 自己是設計風格而不是標準。REST 談論一件很是重要的事,如何正確地使用 Web標準,例如,HTTP 和 URI。想要了解 REST 最好的方式就是思索與瞭解Web 及其工做方式。若是你設計的應用程序能符合 REST 原則 (REST principles),這些符合 REST 原則的 REST 服務可稱爲 "RESTful web service" 也稱 "RESTful Web API"。"-ful" 字尾強調它們的設計徹底符合 REST 論文裏的建議內容。
資源 RESOURCE
在 REST 中的資源 (Resource) 表明整個網絡上的資源。網絡上提供了各式各樣的資源,而網絡上的資源由 URI (統一資源標識符,Uniform Resource Identifier) 來提供。
回想,你如何連上個人 博客,你可能經過瀏覽器直接輸入 www.cnblogs.com/shanyou 此域名來到達首頁,也能用書籤或網絡上的連接,經點擊後來連上個人博客。而後,你想看這一篇名爲「REST 入門介紹」的文章,因此以你接下去點擊這文章的標題連結,接去下閱讀。咱們簡易瞭解一下整個流程:
- 經過URL ( http://www.cnblogs.com/shanyou ) , Client 向 http://www.cnblogs.com/shanyou 發出請求
- www.cnblogs.com/shanyou 收到請求,迴應首頁給 Client
- Client 又點擊 REST 文章連結 (假設是 http://www.cnblogs.com/shanyou/archive/2011/06/30/2095018.html) 向http://www.cnblogs.com/shanyou發出archive/2011/06/30/2095018.html 此篇文章的請求
- www.cnblogs.com/shanyou 收到請求,響應 REST 文章內容給 Client
Client 的經過 URI 來獲取資源的具體象徵 (Representational)。Client 取得這些具體象徵使這些應用程序轉變其狀態 (以 瀏覽器而言,取得 HTML、CSS、JavaScript … 來生成界面),隨着不斷取得資源的具體象徵, Client 端不斷地改變其狀態,這樣不斷的反覆 (iterations ) 過程就是所謂的 Representational State Transfer。
RESTful Web API(也稱爲RESTful Web服務)是一個使用HTTP並遵循REST原則的Web服務。它從如下請求資源的三個方面進行定義:
- URI,好比:http://example.com/resources/。
- Web服務接受與返回的互聯網媒體類型,好比:JSON,XML ,YAML 等。
- Web服務在該資源上所支持的一系列請求方法(好比:POST,GET,PUT或DELETE)。
本文要講的ASP.NET Web API 就是RESTful Web API的一種。下表列出了在實現 RESTful Web API 時HTTP請求方法的典型用途:

不像基於SOAP的Web服務,RESTful Web服務並無「正式」的標準。這是由於REST是一種架構,而SOAP只是一個協議。雖然REST不是一個標準,但在實現RESTful Web服務時可使用其餘各類標準(好比HTTP,URL,XML,PNG等)。
使用 WEB 標準
上述是最接近平常的範例,這些行爲在 HTTP 規範中稱之爲 GET,也就是經過URL 來 GET 我想要的資源。另外一經常使用的例子是填寫表單,例如,登入表單,我想進行登入動做,就必須先發送帳號與密碼給某一資源,此資源會驗證你所傳送的數據是否正確,再進行後續動做。咱們發送信息給資源的行爲在 HTTP 規範中稱之爲 POST。
在 HTTP/1.1 RFC 2616第 5.1.1 Method 一節定義了八大類 HTTP 方法,除了咱們經常使用的 GET 與 POST 以外,在 REST 中經常使用的還有 PUT 與 DELETE。此 GET, POST, PUT, DELETE 正好能夠對應咱們 CRUD (Create, Read, Update, Delete) 四種數據操做。
HTTP Method 與 CURD 數據處理操做對應 |
HTTP方法 |
數據處理 |
說明 |
POST |
Create |
新增一個沒有id的資源 |
GET |
Read |
取得一個資源 |
PUT |
Update |
更新一個資源。或新增一個含 id 資源(若是 id 不存在) |
DELETE |
Delete |
刪除一個資源 |
RESTFUL WEB SERVICE
RESTful Web Service (又稱 RESTful Web API) 是一個使用 HTTP 並符合 REST 原則的 Web 服務。咱們知道,經過 URL 能夠傳送 GET 請求,在 表單指定 method="GET|POST" 來送出請求。但咱們要處理 PUT 或 DELETE 的請求呢?經過 RESTful 咱們能夠簡單 URI 來定義資源並和 HTTP 方法配合使用。
Resource 與 HTTP 方法的對應 |
資源 |
資源說明 |
GET |
PUT |
POST |
DELETE |
http://www.cnblogs.com/Products/ |
Products是一組資源集合 |
列出 該組資源集合中每一個資源的詳細信息 |
更新 當前整組資源 |
新增 或附加一個新資源。該操做傳回新資源的URL |
刪除 整組資源 |
http://www.cnblogs.com/Products/1 |
Products/1是單個資源 |
取得 指定的資源的詳細信息 |
更新 或新增指定的資源 |
新增 或附加一個新元素 |
刪除 指定的元素 |
以上表格有沒有很像咱們通常在對數據庫表格的操做順序,進入一個 Table 的數據首頁 (一般是列表),此頁面會有「新增、更新、刪除、詳細」等連結,你想進行什麼操做,就點那一個連結。
在 RESTful 每一個資源有本身獨立的 URI, Client 從資源集合或單個資源開始進入,不論是資源集合或單個資源,咱們都能與 HTTP 方法配合使用,例如,GET 下載,PUT 更新,POST 新增,DELETE 刪除。
ASP.NET Web API 是一個框架(framework),能讓你在 .NET Framwork 之上架設 HTTP 服務 (HTTP Services)。ASP.NET Web API 是 .NET Framework 上構建 RESTful 應用程序的理想平臺。
什麼是REST:結束語
REST 描述了一個架構樣式的互聯繫統(如 Web 應用程序)。REST 約束條件做爲一個總體應用時,將生成一個簡單、可擴展、有效、安全、可靠的架構。因爲它簡便、輕量級以及經過 HTTP 直接傳輸數據的特性,RESTful Web 服務成爲基於 SOAP 服務的一個最有前途的替代方案。用於 web 服務和動態 Web 應用程序的多層架構能夠實現可重用性、簡單性、可擴展性和組件可響應性的清晰分離。Ajax 和 RESTful Web 服務本質上是互爲補充的。開發人員能夠輕鬆使用 Ajax 和 RESTful Web 服務一塊兒建立豐富的界面。
上面資料有參考
清清飛揚園友:http://www.cnblogs.com/joeblackzqq/archive/2011/06/16/2082841.html
Liam Wang 園友 : http://www.cnblogs.com/willick/p/3441432.html
張友善 園友:http://www.cnblogs.com/shanyou/archive/2012/05/12/2496959.html
該內容只是入門的參考,理解資料
- 博主是利用讀書、參考、引用、抄襲、複製和粘貼等多種方式打形成本身的純鍍 24k 文章,請原諒博主成爲一個無恥的文檔搬運工!
- 小弟剛邁入博客編寫,文中若有不對,歡迎用板磚扶正,但願給你有所幫助。