1. 程式人生 > 其它 >REST 入門介紹 REST 入門介紹

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 入門介紹」的文章,所以以你接下去點選這文章的標題連結,接去下閱讀。我們簡易瞭解一下整個流程:

  1. 通過URL ( http://www.cnblogs.com/shanyou ) , Client 向 http://www.cnblogs.com/shanyou 發出請求
  2. www.cnblogs.com/shanyou 收到請求,迴應首頁給 Client
  3. Client 又點選 REST 文章連結  (假設是 http://www.cnblogs.com/shanyou/archive/2011/06/30/2095018.html) 向 http://www.cnblogs.com/shanyou發出archive/2011/06/30/2095018.html  此篇文章的請求
  4. 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 入門介紹」的文章,所以以你接下去點選這文章的標題連結,接去下閱讀。我們簡易瞭解一下整個流程:

  1. 通過URL ( http://www.cnblogs.com/shanyou ) , Client 向 http://www.cnblogs.com/shanyou 發出請求
  2. www.cnblogs.com/shanyou 收到請求,迴應首頁給 Client
  3. Client 又點選 REST 文章連結  (假設是 http://www.cnblogs.com/shanyou/archive/2011/06/30/2095018.html) 向 http://www.cnblogs.com/shanyou發出archive/2011/06/30/2095018.html  此篇文章的請求
  4. 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