熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

REST及RESTful的實現

2013-11-23 19:07:41  來源: Java核心技術 

  什麼是REST?

  REST (REpresentation State Transfer) 描述了一個架構樣式的網絡系統比如 web 應用程序它首次出現在 年 Roy Fielding 的博士論文中他是 HTTP 規范的主要編寫者之一REST 指的是一組架構約束條件和原則滿足這些約束條件和原則的應用程序或設計就是 RESTful

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

  在服務器端應用程序狀態和功能可以分為各種資源資源是一個有趣的概念實體它向客戶端公開資源的例子有應用程序對象數據庫記錄算法等等每個資源都使用 URI (Universal Resource Identifier) 得到一個惟一的地址所有資源都共享統一的界面以便在客戶端和服務器之間傳輸狀態使用的是標准的 HTTP 方法比如 GETPUTPOST 和 DELETEHypermedia 是應用程序狀態的引擎資源表示通過超鏈接互聯

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

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

  了解了什麼是什麼是REST我們再看看RESTful的實現最近使用 RPC 樣式架構構建的基於 SOAP 的 Web 服務成為實現 SOA 最常用的方法RPC 樣式的 Web 服務客戶端將一個裝滿數據的信封(包括方法和參數信息)通過 HTTP 發送到服務器服務器打開信封並使用傳入參數執行指定的方法方法的結果打包到一個信封並作為響應發回客戶端客戶端收到響應並打開信封每個對象都有自己獨特的方法以及僅公開一個 URI 的 RPC 樣式 Web 服務URI 表示單個端點它忽略 HTTP 的大部分特性且僅支持 POST 方法

  由於輕量級以及通過 HTTP 直接傳輸數據的特性Web 服務的 RESTful 方法已經成為最常見的替代方法可以使用各種語言(比如 Java 程序PerlRubyPythonPHP 和 Javascript[包括 Ajax])實現客戶端RESTful Web 服務通常可以通過自動客戶端或代表用戶的應用程序訪問但是這種服務的簡便性讓用戶能夠與之直接交互使用它們的 Web 浏覽器構建一個 GET URL 並讀取返回的內容

  在 REST 樣式的 Web 服務中每個資源都有一個地址資源本身都是方法調用的目標方法列表對所有資源都是一樣的這些方法都是標准方法包括 HTTP GETPOSTPUTDELETE還可能包括 HEADER 和 OPTIONS

  在 RPC 樣式的架構中關注點在於方法而在 REST 樣式的架構中關注點在於資源 —— 將使用標准方法檢索並操作信息片段(使用表示的形式)資源表示形式在表示形式中使用超鏈接互聯

  Leonard Richardson 和 Sam Ruby 在他們的著作 RESTful Web Services 中引入了術語 RESTRPC 混合架構RESTRPC 混合 Web 服務不使用信封包裝方法參數和數據而是直接通過 HTTP 傳輸數據這與 REST 樣式的 Web 服務是類似的但是它不使用標准的 HTTP 方法操作資源它在 HTTP 請求的 URI 部分存儲方法信息好幾個知名的 Web 服務比如 Yahoo 的 Flickr API 和 delicious API 都使用這混合架構

  有兩個 Java 框架可以幫助構建 RESTful Web 服務erome Louvel 和 Dave Pawson 開發的 Restlet(見 參考資料)是輕量級的它實現針對各種 RESTful 系統的資源表示連接器和媒體類型之類的概念包括 Web 服務在 Restlet 框架中客戶端和服務器都是組件組件通過連接器互相通信該框架最重要的類是抽象類 Uniform 及其具體的子類 Restlet該類的子類是專用類比如 ApplicationFilterFinderRouter 和 Route這些子類能夠一起處理驗證過濾安全數據轉換以及將傳入請求路由到相應資源等操作Resource 類生成客戶端的表示形式

  JSR是 Sun Microsystems 的規范可以為開發 RESTful Web 服務定義一組 Java APIJersey是對 JSR 的參考實現

  JSR 提供一組注釋相關類和接口都可以用來將 Java 對象作為 Web 資源展示該規范假定 HTTP 是底層網絡協議它使用注釋提供 URI 和相應資源類之間的清晰映射以及 HTTP 方法與 Java 對象方法之間的映射API 支持廣泛的 HTTP 實體內容類型包括 HTMLXMLJSONGIFJPG 等它還將提供所需的插件功能以允許使用標准方法通過應用程序添加其他類型

  RESTful的實現構建 RESTful Web 服務的多層架構

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

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

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

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

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

  

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

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

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

  什麼是REST結束語

  REST 描述了一個架構樣式的互聯系統(如 Web 應用程序)REST 約束條件作為一個整體應用時將生成一個簡單可擴展有效安全可靠的架構由於它簡便輕量級以及通過 HTTP 直接傳輸數據的特性RESTful Web 服務成為基於 SOAP 服務的一個最有前途的替代方案用於 web 服務和動態 Web 應用程序的多層架構可以實現可重用性簡單性可擴展性和組件可響應性的清晰分離Ajax 和 RESTful Web 服務本質上是互為補充的開發人員可以輕松使用 Ajax 和 RESTful Web 服務一起創建豐富的界面


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26312.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.