ASP.NET Web API 心得筆記 (2) REST 入門簡介

我接下去還會有幾篇關於 ASP.NET Web API 的文章,但看完黑暗執行緒的「RESTful探索系列」才發現,如果沒有先了解 RESTful,那接下去的內容還真有點硬,像是專業名詞,例如,你在 ASP.NET Web API 文件中可以看到大量的 Resource (資源) 這個單字,URI 我還能理解,跟 Resource 有什麼關係?

以下主要對 REST 做入門簡介,理解整個 REST 能讓我們在 ASP.NET Web API 的路上更順暢。

何謂REST

REST ( REpresentational State Transfer ),State Transfer 為 "狀態傳輸" 或 "状态转移 ",Representational 中文有人翻譯為"表徵"、"具象",合起來就是 "表徵狀態傳輸" 或 "具象狀態傳輸" 或 "表述性状态转移",不過,一般文章或技術文件都比較不會使用翻譯後的中文來撰寫,而是直接引用 REST 或 RESTful 來代表,因為 REST 一整個觀念,想要只用六個中文字來完整表達真有難度。
在我的《朗文當代辭典》中是這樣解釋 Representational:「a representational painting or style of art shows things as they actually appear in real life」(具體的繪畫或藝術風格所顯示的東西,實際出現在真實生活中)
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) 來提供。

回想,你如何連上我的 Blog,你可能透過 Browser 直接輸入 blog.kkbruce.net 此域名來到達首頁,也能用書籤或網路上的連結,經點擊後來連上我的 Blog。然後,你想看這一篇名為「REST 入門簡介」的文章,所以以你接下去點擊這文章的標題連結,接去下閱讀。

前段提到「思索與了解 Web 及其工作方式」,我們簡易了解一下整個流程:

  1. 透過 URL ( blog.kkbruce.net ) , Client 向 http://blog.kkbruce.net 發出請求
  2. blog.kkbruce.net 收到請求,回應首頁給 Client
  3. Client 又點擊 REST 文章連結  (假設是 http://blog.kkbruce.net/2012/04/...rest.html) 向 http://blog.kkbruce.net 發出 /2012/04/...rest.html 此篇文章的請求
  4. blog.kkbruce.net 收到請求,回應 REST 文章內容給 Client

 Client 的透過 URI 來獲取資源的具體象徵 (Representational)。Client 取得這些具體象徵使這些應用程式轉變其狀態 (以 Browser 而言,取得 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方法資料處理說明
POSTCreate新增一個沒有id的資源
GETRead取得一個資源
PUTUpdate更新一個資源。或新增一個含 id 資源(如果 id 不存在)
DELETEDelete刪除一個資源

RESTful Web Service

RESTful Web Service (又稱 RESTful Web API) 是一個使用 HTTP 並符合 REST 原則的 Web 服務。我們知道,透過 URL 可以傳送 GET 請求,在 表單指定 method="GET|POST" 來送出請求。但我們要處理 PUT 或 DELETE 的請求呢?透過 RESTful 我們可以簡單 URI 來定義資源並和 HTTP 方法配合使用。

Resource 與 HTTP 方法的對應
資源資源說明GETPUTPOSTDELETE
http://kkbruce.net/Products/Products是一組資源集合列出 該組資源集合中每個資源的詳細資訊更新 當前整組資源新增 或附加一個新資源。該操作傳回新資源的URL刪除 整組資源
http://kkbruce.net/Products/1Products/1是單個資源取得 指定的資源的詳細資訊更新 或新增指定的資源新增 或附加一個新元素刪除 指定的元素

以上表格有沒有很像我們一般在對資料庫表格的操作順序,進入一個 Table 的資料首頁 (通常是列表),此頁面會有「新增、更新、刪除、詳細」等連結,你想進行什麼操作,就點那一個連結。

在 RESTful 每個資源有自己獨立的 URI, Client 從資源集合或單個資源開始進入,不管是資源集合或單個資源,我們都能與 HTTP 方法配合使用,例如,GET 下載,PUT 更新,POST 新增,DELETE 刪除。

再回頭看,前一篇我們範例,我們呼叫 "/api/Products/" 或 "/api/Products/id",再看一次圖十三裡的 URL 與 HTTP 方法:

Web API 執行流程
圖一:Web API 執行流程
下一篇我們就會看到整個 CRUD 在 ASP.NET Web API 的實作。


參考資料

沒有留言:

張貼留言

感謝您的留言,如果我的文章你喜歡或對你有幫助,按個「讚」或「分享」它,我會很高興的。