REST 入門介紹
dudu的 HttpClient + ASP.NET Web API, WCF之外的另一個選擇 討論的人很多,說明RESTful API也開始在.NET 社區(qū)中得到重視,其中的回復(fù)有很多對REST不正確的觀點。REST(REpresentational State Transfer)的概念提出已超過10年,不知不覺間已成當(dāng)今設(shè)計開放式API的主流。或許大家手邊的.NET系統(tǒng)整合都還是使用WCF(甚至Web Service)進行跨主機溝通,但是當(dāng)微軟在ASP.NET MVC 4 Beta里也開始推廣REST架構(gòu)的ASP.NET Web API。如果沒有先了解 RESTful,那接下去的內(nèi)容還真有點硬,像是專業(yè)名詞,例如,你在 ASP.NET Web API 文件中可以看到大量的 Resource (資源) 這個單字,URI 我還能理解,跟 Resource 有什么關(guān)系?
關(guān)于REST及RESTful的概念,已有不少文章介紹,這里整理幾篇我覺得不錯的參考:
- 維基百科的定義: REST
- 什么是REST跟RESTful? REST理論的中文詳述,其中你可以了解到WCF Restful屬于RPC 樣式的 Web 服務(wù),ASP.NET Web API屬于RESTful Web 服務(wù)。
- 深入淺出REST InfoQ的專文介紹,文中甚至有Roy T. Fielding當(dāng)年REST博士論文的中文翻譯鏈接。另外值得一提的,大家可能沒聽過Roy Fielding的大名,但如果得知他是HTTP規(guī)格的主要作者及Apache HTTP Server項目的發(fā)起人之一,應(yīng)該不會有人懷疑他在Web技術(shù)領(lǐng)域的分量。
上面的文章建議大家認(rèn)真的讀一下,這里我們簡要的介紹下REST 做入門介紹,理解整個 REST 能讓我們在 ASP.NET Web API 的路上更順暢。
REST是什么?
REST ( REpresentational State Transfer ),State Transfer 為 "狀態(tài)傳輸" 或 "狀態(tài)轉(zhuǎn)移 ",Representational 中文有人翻譯為"表征"、"具象",合起來就是 "表征狀態(tài)傳輸" 或 "具象狀態(tài)傳輸" 或 "表述性狀態(tài)轉(zhuǎn)移",不過,一般文章或技術(shù)文件都比較不會使用翻譯后的中文來撰寫,而是直接引用 REST 或 RESTful 來代表,因為 REST 一整個觀念,想要只用六個中文字來完整表達(dá)真有難度。
REST 一詞的出于《Architectural Styles and
the Design of Network-based Software Architectures》論文,我們先簡單從標(biāo)題來看,它應(yīng)該是一種架構(gòu)樣式 (Architectural Styles) 與軟件架構(gòu) (Software Architectures),而且是以網(wǎng)絡(luò) (Network-based) 為基礎(chǔ),重點就是:
- 架構(gòu)樣式 (Architectural Styles)
- 軟件架構(gòu) (Software Architectures)
- 網(wǎng)絡(luò) (Network-based) 為基礎(chǔ)
REST 本身是設(shè)計風(fēng)格而不是標(biāo)準(zhǔn)。REST 談?wù)撘患浅V匾氖拢绾握_地使用 Web標(biāo)準(zhǔn),例如,HTTP 和 URI。想要了解 REST 最好的方式就是思索與了解 Web 及其工作方式。如果你設(shè)計的應(yīng)用程序能符合 REST 原則 (REST principles),這些符合 REST 原則的 REST 服務(wù)可稱為 "RESTful web service" 也稱 "RESTful Web API"。"-ful" 字尾強調(diào)它們的設(shè)計完全符合 REST 論文里的建議內(nèi)容。
資源 RESOURCE
在 REST 中的資源 (Resource) 代表整個網(wǎng)絡(luò)上的資源。網(wǎng)絡(luò)上提供了各式各樣的資源,而網(wǎng)絡(luò)上的資源由 URI (統(tǒng)一資源標(biāo)識符,Uniform Resource Identifier) 來提供。
回想,你如何連上我的 博客,你可能通過瀏覽器直接輸入 www.rzrgm.cn/shanyou 此域名來到達(dá)首頁,也能用書簽或網(wǎng)絡(luò)上的鏈接,經(jīng)點擊后來連上我的博客。然后,你想看這一篇名為「REST 入門介紹」的文章,所以以你接下去點擊這文章的標(biāo)題連結(jié),接去下閱讀。我們簡易了解一下整個流程:
- 通過URL ( http://www.rzrgm.cn/shanyou ) , Client 向 http://www.rzrgm.cn/shanyou 發(fā)出請求
- www.rzrgm.cn/shanyou 收到請求,回應(yīng)首頁給 Client
- Client 又點擊 REST 文章連結(jié) (假設(shè)是 http://www.rzrgm.cn/shanyou/archive/2011/06/30/2095018.html) 向 http://www.rzrgm.cn/shanyou發(fā)出archive/2011/06/30/2095018.html 此篇文章的請求
- www.rzrgm.cn/shanyou 收到請求,響應(yīng) REST 文章內(nèi)容給 Client
Client 的通過 URI 來獲取資源的具體象征 (Representational)。Client 取得這些具體象征使這些應(yīng)用程序轉(zhuǎn)變其狀態(tài) (以 瀏覽器而言,取得 HTML、CSS、JavaScript … 來生成界面),隨著不斷取得資源的具體象征, Client 端不斷地改變其狀態(tài),這樣不斷的反復(fù) (iterations ) 過程就是所謂的 Representational State Transfer。
使用 WEB 標(biāo)準(zhǔn)
上述是最接近日常的范例,這些行為在 HTTP 規(guī)范中稱之為 GET,也就是通過URL 來 GET 我想要的資源。另一常用的例子是填寫表單,例如,登入表單,我想進行登入動作,就必須先發(fā)送賬號與密碼給某一資源,此資源會驗證你所傳送的數(shù)據(jù)是否正確,再進行后續(xù)動作。我們發(fā)送信息給資源的行為在 HTTP 規(guī)范中稱之為 POST。
在 HTTP/1.1 RFC 2616第 5.1.1 Method 一節(jié)定義了八大類 HTTP 方法,除了我們常用的 GET 與 POST 之外,在 REST 中常用的還有 PUT 與 DELETE。此 GET, POST, PUT, DELETE 正好可以對應(yīng)我們 CRUD (Create, Read, Update, Delete) 四種數(shù)據(jù)操作。
|
HTTP Method 與 CURD 數(shù)據(jù)處理操作對應(yīng) |
||
|
HTTP方法 |
數(shù)據(jù)處理 |
說明 |
|
POST |
Create |
新增一個沒有id的資源 |
|
GET |
Read |
取得一個資源 |
|
PUT |
Update |
更新一個資源。或新增一個含 id 資源(如果 id 不存在) |
|
DELETE |
Delete |
刪除一個資源 |
RESTFUL WEB SERVICE
RESTful Web Service (又稱 RESTful Web API) 是一個使用 HTTP 并符合 REST 原則的 Web 服務(wù)。我們知道,通過 URL 可以傳送 GET 請求,在 表單指定 method="GET|POST" 來送出請求。但我們要處理 PUT 或 DELETE 的請求呢?通過 RESTful 我們可以簡單 URI 來定義資源并和 HTTP 方法配合使用。
|
Resource 與 HTTP 方法的對應(yīng) |
|||||
|
資源 |
資源說明 |
GET |
PUT |
POST |
DELETE |
|
http://www.rzrgm.cn/Products/ |
Products是一組資源集合 |
列出 該組資源集合中每個資源的詳細(xì)信息 |
更新 當(dāng)前整組資源 |
新增 或附加一個新資源。該操作傳回新資源的URL |
刪除 整組資源 |
|
http://www.rzrgm.cn/Products/1 |
Products/1是單個資源 |
取得 指定的資源的詳細(xì)信息 |
更新 或新增指定的資源 |
新增 或附加一個新元素 |
刪除 指定的元素 |
以上表格有沒有很像我們一般在對數(shù)據(jù)庫表格的操作順序,進入一個 Table 的數(shù)據(jù)首頁 (通常是列表),此頁面會有「新增、更新、刪除、詳細(xì)」等連結(jié),你想進行什么操作,就點那一個連結(jié)。
在 RESTful 每個資源有自己獨立的 URI, Client 從資源集合或單個資源開始進入,不管是資源集合或單個資源,我們都能與 HTTP 方法配合使用,例如,GET 下載,PUT 更新,POST 新增,DELETE 刪除。
ASP.NET Web API 是一個框架(framework),能讓你在 .NET Framwork 之上架設(shè) HTTP 服務(wù) (HTTP Services)。ASP.NET Web API 是 .NET Framework 上構(gòu)建 RESTful 應(yīng)用程序的理想平臺。
在 Julie Lerman's 的 How I see Web API 一文中,用了一張圖來簡明說明 Web API:
歡迎大家掃描下面二維碼成為我的客戶,扶你上云


浙公網(wǎng)安備 33010602011771號