什么是REST-ful,以及REST-ful的實現

jopen 9年前發布 | 30K 次閱讀 REST-ful WEB服務/RPC/SOA

REST 指的是一組架構約束條件和原則

  • Web 應用程序最重要的 REST 原則是:客戶端和服務器之間的交互,在請求之間是無狀態的;客戶端的每個請求都必須包含理解請求所必需的信息;服務器在請求之間的任何時間點重啟,客戶端 不會得到通知;無狀態請求可以由任何可用服務器回答,十分適合云計算之類的環境;客戶端可以緩存數據以改進性能。

  • 在服務器端,應用程序狀態和功能可以分為各種資源:每個資源都使用 URI (Universal Resource Identifier) 得到一個惟一的地址。所有資源都共享統一的界面,以便在客戶端和服務器之間傳輸狀態。使用的是標準的 HTTP 方法,比如 GET、PUT、POST 和 DELETE。

  • 另一個重要的 REST 原則是分層系統:這表示組件無法了解它與之交互的中間層以外的組件。通過將系統知識限制在單個層,可以限制整個系統的復雜性,促進了底層的獨立性。

    當 REST 架構的約束條件作為一個整體應用時,將生成一個可以擴展到大量客戶端的應用程序。它還降低了客戶端和服務器之間的交互延遲。統一界面簡化了整個系統架構,改進了子系統之間交互的可見性。REST 簡化了客戶端和服務器的實現。

REST-ful的實現:構建 RESTful Web 服務的多層架構

RESTful Web 服務和動態 Web 應用程序在許多方面都是類似的。有時它們提供相同或非常類似的數據和函數,盡管客戶端的種類不同。例如,在線電子商務分類網站為用戶提供一個瀏覽器界面, 用于搜索、查看和訂購產品。如果還提供 Web 服務供公司、零售商甚至個人能夠自動訂購產品,它將非常有用。與大部分動態 Web 應用程序一樣,Web 服務可以從多層架構的關注點分離中受益。業務邏輯和數據可以由自動客戶端和 GUI 客戶端共享。惟一的不同點在于客戶端的本質和中間層的表示層。此外,從數據訪問中分離業務邏輯可實現數據庫獨立性,并為各種類型的數據存儲提供插件能力。

圖 1 展示了自動化客戶端,包括 Java 和各種語言編寫的腳本,這些語言包括 Python、Perl、Ruby、PHP 或命令行工具,比如 curl。在瀏覽器中運行且作為 RESTful Web 服務消費者運行的 Ajax、Flash、JavaFX、GWT、博客和 wiki 都屬于此列,因為它們都代表用戶以自動化樣式運行。自動化 Web 服務客戶端在 Web 層向 Resource Request Handler 發送 HTTP 響應。客戶端的無狀態請求在頭部包含方法信息,即 POST、GET、PUT 和 DELETE,這又將映射到 Resource Request Handler 中資源的相應操作。每個請求都包含所有必需的信息,包括 Resource Request Handler 用來處理請求的憑據。

從 Web 服務客戶端收到請求之后,Resource Request Handler 從業務邏輯層請求服務。Resource Request Handler 確定所有概念性的實體,系統將這些實體作為資源公開,并為每個資源分配一個惟一的 URI。但是,概念性的實體在該層是不存在的。它們存在于業務邏輯層。可以使用 Jersey 或其他框架(比如 Restlet)實現 Resource Request Handler,它應該是輕量級的,將大量職責工作委托給業務層。

Ajax 和 RESTful Web 服務本質上是互為補充的。它們都可以利用大量 Web 技術和標準,比如 HTML、JavaScript、瀏覽器對象、XML/JSON 和 HTTP。當然也不需要購買、安裝或配置任何主要組件來支持 Ajax 前端和 RESTful Web 服務之間的交互。RESTful Web 服務為 Ajax 提供了非常簡單的 API 來處理服務器上資源之間的交互。

圖 1 中的 Web 瀏覽器客戶端作為 GUI 的前端,使用表示層中的 Browser Request Handler 生成的 HTML 提供顯示功能。Browser Requester Handler 可以使用 MVC 模型(JSF、Struts 或 Spring 都是 Java 的例子)。它從瀏覽器接受請求,從業務邏輯層請求服務,生成表示并對瀏覽器做出響應。表示供用戶在瀏覽器中顯示使用。表示不僅包含內容,還包含顯示的屬 性,比如 HTML 和 CSS。

什么是REST-ful,以及REST-ful的實現

業務規則可以集中到業務邏輯層,該層充當表示層和數據訪問層之間的數據交換的中間層。數據以域對象或值對象的形式提供給表示層。從業務邏輯層中解耦 Browser Request Handler 和 Resource Request Handler 有助于促進代碼重用,并能實現靈活和可擴展的架構。此外,由于將來可以使用新的 REST 和 MVC 框架,實現它們變得更加容易,無需重寫業務邏輯層。

數據訪問層提供與數據存儲層的交互,可以使用 DAO 設計模式或者對象-關系映射解決方案(如 Hibernate、OJB 或 iBATIS)實現。作為替代方案,業務層和數據訪問層中的組件可以實現為 EJB 組件,并取得 EJB 容器的支持,該容器可以為組件生命周期提供便利,管理持久性、事務和資源配置。但是,這需要一個遵從 Java EE 的應用服務器(比如 JBoss),并且可能無法處理 Tomcat。該層的作用在于針對不同的數據存儲技術,從業務邏輯中分離數據訪問代碼。數據訪問層還可以作為連接其他系統的集成點,可以成為其他 Web 服務的客戶端。

數據存儲層包括數據庫系統、LDAP 服務器、文件系統和企業信息系統(包括遺留系統、事務處理系統和企業資源規劃系統)。使用該架構,您可以開始看到 RESTful Web 服務的力量,它可以靈活地成為任何企業數據存儲的統一 API,從而向以用戶為中心的 Web 應用程序公開垂直數據,并自動化批量報告腳本。

來自:http://my.oschina.net/stephenzhang/blog/380397

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