REST 入門介紹 REST 入門介紹
REST 入門介紹
dudu的 HttpClient + ASP.NET Web API, WCF之外的另一個選擇 討論的人很多,說明RESTful API也開始在.NET 社群中得到重視,其中的回覆有很多對REST不正確的觀點。REST(REpresentational State Transfer)的概念提出已超過10年,不知不覺間已成當今設計開放式API的主流。或許大家手邊的.NET系統整合都還是使用WCF(甚至Web Service)進行跨主機溝通,但是當微軟在ASP.NET MVC 4 Beta裡也開始推廣REST架構的ASP.NET Web API。如果沒有先了解 RESTful,那接下去的內容還真有點硬,像是專業名詞,例如,你在 ASP.NET Web API 檔案中可以看到大量的 Resource (資源) 這個單字,URI 我還能理解,跟 Resource 有什麼關係?
關於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 的路上更順暢。
REST是什麼?
REST ( REpresentational State Transfer ),State Transfer 為 "狀態傳輸" 或 "狀態轉移 ",Representational 中文有人翻譯為"表徵"、"具象",合起來就是 "表徵狀態傳輸" 或 "具象狀態傳輸" 或 "表述性狀態轉移",不過,一般文章或技術檔案都比較不會使用翻譯後的中文來撰寫,而是直接引用 REST 或 RESTful 來代表,因為 REST 一整個觀念,想要只用六個中文字來完整表達真有難度。
REST 一詞的出於《Architectural Styles and
the Design of Network-based Software Architectures》論文,我們先簡單從標題來看,它應該是一種架構樣式 (Architectural Styles) 與軟體架構 (Software Architectures),而且是以網路 (Network-based) 為基礎,重點就是:
- 架構樣式 (Architectural Styles)
- 軟體架構 (Software Architectures)
- 網路 (Network-based) 為基礎
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。
使用 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 應用程式的理想平臺。
在 Julie Lerman's 的 How I see Web API 一文中,用了一張圖來簡明說明 Web API:
An Introduction to ASP.NET Web API
歡迎大家掃描下面二維碼成為我的客戶,為你服務和上雲
dudu的 HttpClient + ASP.NET Web API, WCF之外的另一個選擇 討論的人很多,說明RESTful API也開始在.NET 社群中得到重視,其中的回覆有很多對REST不正確的觀點。REST(REpresentational State Transfer)的概念提出已超過10年,不知不覺間已成當今設計開放式API的主流。或許大家手邊的.NET系統整合都還是使用WCF(甚至Web Service)進行跨主機溝通,但是當微軟在ASP.NET MVC 4 Beta裡也開始推廣REST架構的ASP.NET Web API。如果沒有先了解 RESTful,那接下去的內容還真有點硬,像是專業名詞,例如,你在 ASP.NET Web API 檔案中可以看到大量的 Resource (資源) 這個單字,URI 我還能理解,跟 Resource 有什麼關係?
關於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 的路上更順暢。
REST是什麼?
REST ( REpresentational State Transfer ),State Transfer 為 "狀態傳輸" 或 "狀態轉移 ",Representational 中文有人翻譯為"表徵"、"具象",合起來就是 "表徵狀態傳輸" 或 "具象狀態傳輸" 或 "表述性狀態轉移",不過,一般文章或技術檔案都比較不會使用翻譯後的中文來撰寫,而是直接引用 REST 或 RESTful 來代表,因為 REST 一整個觀念,想要只用六個中文字來完整表達真有難度。
REST 一詞的出於《Architectural Styles and
the Design of Network-based Software Architectures》論文,我們先簡單從標題來看,它應該是一種架構樣式 (Architectural Styles) 與軟體架構 (Software Architectures),而且是以網路 (Network-based) 為基礎,重點就是:
- 架構樣式 (Architectural Styles)
- 軟體架構 (Software Architectures)
- 網路 (Network-based) 為基礎
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。
使用 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 應用程式的理想平臺。
在 Julie Lerman's 的 How I see Web API 一文中,用了一張圖來簡明說明 Web API: