REST 入門介紹

fmms 12年前發布 | 80K 次閱讀 REST WEB服務/RPC/SOA

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技術領域的分量。
  • </ul>

    上面的文章建議大家認真的讀一下,這里我們簡要的介紹下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:

    REST 入門介紹

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!