
REST (REpresentation State Transfer) 描述了一個架構(gòu)樣式的網(wǎng)絡(luò)系統(tǒng),比如 web 應(yīng)用程序 。它首次出現(xiàn)在 2000 年 Roy Fielding 的博士論文中,他是 HTTP 規(guī)范的主要編寫者之一 。REST 指的是一組架構(gòu)約束條件和原則 。滿足這些約束條件和原則的應(yīng)用程序或設(shè)計就是 RESTful 。Web 應(yīng)用程序最重要的 REST 原則是,客戶端和服務(wù)器之間的交互在請求之間是無狀態(tài)的 。從客戶端到服務(wù)器的每個請求都必須包含理解請求所必需的信息 。如果服務(wù)器在請求之間的任何時間點重啟,客戶端不會得到通知 。此外,無狀態(tài)請求可以由任何可用服務(wù)器回答,這十分適合云計算之類的環(huán)境 。客戶端可以緩存數(shù)據(jù)以改進性能 。在服務(wù)器端,應(yīng)用程序狀態(tài)和功能可以分為各種資源 。資源是一個有趣的概念實體,它向客戶端公開 。資源的例子有:應(yīng)用程序?qū)ο蟆?shù)據(jù)庫記錄、算法等等 。每個資源都使用 URI (Universal Resource Identifier) 得到一個惟一的地址 。所有資源都共享統(tǒng)一的界面,以便在客戶端和服務(wù)器之間傳輸狀態(tài) 。使用的是標準的 HTTP 方法,比如 GET、PUT、POST 和 DELETE 。Hypermedia 是應(yīng)用程序狀態(tài)的引擎,資源表示通過超鏈接互聯(lián) 。另一個重要的 REST 原則是分層系統(tǒng),這表示組件無法了解它與之交互的中間層以外的組件 。通過將系統(tǒng)知識限制在單個層,可以限制整個系統(tǒng)的復雜性,促進了底層的獨立性 。當REST 架構(gòu)的約束條件作為一個整體應(yīng)用時,將生成一個可以擴展到大量客戶端的應(yīng)用程序 。它還降低了客戶端和服務(wù)器之間的交互延遲 。統(tǒng)一界面簡化了整個系統(tǒng)架構(gòu),改進了子系統(tǒng)之間交互的可見性 。REST 簡化了客戶端和服務(wù)器的實現(xiàn) 。RESTful的實現(xiàn):RESTful Web 服務(wù)與 RPC 樣式的 Web 服務(wù)了解了什么是什么是REST,我們再看看RESTful的實現(xiàn) 。最近,使用 RPC 樣式架構(gòu)構(gòu)建的基于 SOAP 的 Web 服務(wù)成為實現(xiàn) SOA 最常用的方法 。RPC 樣式的 Web 服務(wù)客戶端將一個裝滿數(shù)據(jù)的信封(包括方法和參數(shù)信息)通過 HTTP 發(fā)送到服務(wù)器 。服務(wù)器打開信封并使用傳入?yún)?shù)執(zhí)行指定的方法 。方法的結(jié)果打包到一個信封并作為響應(yīng)發(fā)回客戶端 。客戶端收到響應(yīng)并打開信封 。每個對象都有自己獨特的方法以及僅公開一個 URI 的 RPC 樣式 Web 服務(wù),URI 表示單個端點 。它忽略 HTTP 的大部分特性且僅支持 POST 方法 。由于輕量級以及通過 HTTP 直接傳輸數(shù)據(jù)的特性,Web 服務(wù)的 RESTful 方法已經(jīng)成為最常見的替代方法 。可以使用各種語言(比如 Java 程序、Perl、Ruby、Python、PHP 和 Javascript[包括 Ajax])實現(xiàn)客戶端 。RESTful Web 服務(wù)通常可以通過自動客戶端或代表用戶的應(yīng)用程序訪問 。但是,這種服務(wù)的簡便性讓用戶能夠與之直接交互,使用它們的 Web 瀏覽器構(gòu)建一個 GET URL 并讀取返回的內(nèi)容 。在REST 樣式的 Web 服務(wù)中,每個資源都有一個地址 。資源本身都是方法調(diào)用的目標,方法列表對所有資源都是一樣的 。這些方法都是標準方法,包括 HTTP GET、POST、PUT、DELETE,還可能包括 HEADER 和 OPTIONS 。在RPC 樣式的架構(gòu)中,關(guān)注點在于方法,而在 REST 樣式的架構(gòu)中,關(guān)注點在于資源 —— 將使用標準方法檢索并操作信息片段(使用表示的形式) 。資源表示形式在表示形式中使用超鏈接互聯(lián) 。Leonard Richardson 和 Sam Ruby 在他們的著作 RESTful Web Services 中引入了術(shù)語 REST-RPC 混合架構(gòu) 。REST-RPC 混合 Web 服務(wù)不使用信封包裝方法、參數(shù)和數(shù)據(jù),而是直接通過 HTTP 傳輸數(shù)據(jù),這與 REST 樣式的 Web 服務(wù)是類似的 。但是它不使用標準的 HTTP 方法操作資源 。它在 HTTP 請求的 URI 部分存儲方法信息 。好幾個知名的 Web 服務(wù),比如 Yahoo 的 Flickr API 和 del.icio.us API 都使用這種混合架構(gòu) 。RESTful的實現(xiàn):RESTful Web 服務(wù)的 Java 框架有兩個 Java 框架可以幫助構(gòu)建 RESTful Web 服務(wù) 。erome Louvel 和 Dave Pawson 開發(fā)的 Restlet(見 參考資料)是輕量級的 。它實現(xiàn)針對各種 RESTful 系統(tǒng)的資源、表示、連接器和媒體類型之類的概念,包括 Web 服務(wù) 。在 Restlet 框架中,客戶端和服務(wù)器都是組件 。組件通過連接器互相通信 。該框架最重要的類是抽象類 Uniform 及其具體的子類 Restlet,該類的子類是專用類,比如 Application、Filter、Finder、Router 和 Route 。這些子類能夠一起處理驗證、過濾、安全、數(shù)據(jù)轉(zhuǎn)換以及將傳入請求路由到相應(yīng)資源等操作 。Resource 類生成客戶端的表示形式 。JSR-311是 Sun Microsystems 的規(guī)范,可以為開發(fā) RESTful Web 服務(wù)定義一組 Java API 。Jersey是對 JSR-311 的參考實現(xiàn) 。JSR-311 提供一組注釋,相關(guān)類和接口都可以用來將 Java 對象作為 Web 資源展示 。該規(guī)范假定 HTTP 是底層網(wǎng)絡(luò)協(xié)議 。它使用注釋提供 URI 和相應(yīng)資源類之間的清晰映射,以及 HTTP 方法與 Java 對象方法之間的映射 。API 支持廣泛的 HTTP 實體內(nèi)容類型,包括 HTML、XML、JSON、GIF、JPG 等 。它還將提供所需的插件功能,以允許使用標準方法通過應(yīng)用程序添加其他類型 。RESTful的實現(xiàn):構(gòu)建 RESTful Web 服務(wù)的多層架構(gòu)RESTful Web 服務(wù)和動態(tài) Web 應(yīng)用程序在許多方面都是類似的 。有時它們提供相同或非常類似的數(shù)據(jù)和函數(shù),盡管客戶端的種類不同 。例如,在線電子商務(wù)分類網(wǎng)站為用戶提供一個瀏覽器界面,用于搜索、查看和訂購產(chǎn)品 。如果還提供 Web 服務(wù)供公司、零售商甚至個人能夠自動訂購產(chǎn)品,它將非常有用 。與大部分動態(tài) Web 應(yīng)用程序一樣,Web 服務(wù)可以從多層架構(gòu)的關(guān)注點分離中受益 。業(yè)務(wù)邏輯和數(shù)據(jù)可以由自動客戶端和 GUI 客戶端共享 。惟一的不同點在于客戶端的本質(zhì)和中間層的表示層 。此外,從數(shù)據(jù)訪問中分離業(yè)務(wù)邏輯可實現(xiàn)數(shù)據(jù)庫獨立性,并為各種類型的數(shù)據(jù)存儲提供插件能力 。圖1 展示了自動化客戶端,包括 Java 和各種語言編寫的腳本,這些語言包括 Python、Perl、Ruby、PHP 或命令行工具,比如 curl 。在瀏覽器中運行且作為 RESTful Web 服務(wù)消費者運行的 Ajax、Flash、JavaFX、GWT、博客和 wiki 都屬于此列,因為它們都代表用戶以自動化樣式運行 。自動化 Web 服務(wù)客戶端在 Web 層向 Resource Request Handler 發(fā)送 HTTP 響應(yīng) 。客戶端的無狀態(tài)請求在頭部包含方法信息,即 POST、GET、PUT 和 DELETE,這又將映射到 Resource Request Handler 中資源的相應(yīng)操作 。每個請求都包含所有必需的信息,包括 Resource Request Handler 用來處理請求的憑據(jù) 。從Web 服務(wù)客戶端收到請求之后,Resource Request Handler 從業(yè)務(wù)邏輯層請求服務(wù) 。Resource Request Handler 確定所有概念性的實體,系統(tǒng)將這些實體作為資源公開,并為每個資源分配一個惟一的 URI 。但是,概念性的實體在該層是不存在的 。它們存在于業(yè)務(wù)邏輯層 。可以使用 Jersey 或其他框架(比如 Restlet)實現(xiàn) Resource Request Handler,它應(yīng)該是輕量級的,將大量職責工作委托給業(yè)務(wù)層 。Ajax 和 RESTful Web 服務(wù)本質(zhì)上是互為補充的 。它們都可以利用大量 Web 技術(shù)和標準,比如 HTML、JavaScript、瀏覽器對象、XML/JSON 和 HTTP 。當然也不需要購買、安裝或配置任何主要組件來支持 Ajax 前端和 RESTful Web 服務(wù)之間的交互 。RESTful Web 服務(wù)為 Ajax 提供了非常簡單的 API 來處理服務(wù)器上資源之間的交互 。圖1 中的 Web 瀏覽器客戶端作為 GUI 的前端,使用表示層中的 Browser Request Handler 生成的 HTML 提供顯示功能 。Browser Requester Handler 可以使用 MVC 模型(JSF、Struts 或 Spring 都是 Java 的例子) 。它從瀏覽器接受請求,從業(yè)務(wù)邏輯層請求服務(wù),生成表示并對瀏覽器做出響應(yīng) 。表示供用戶在瀏覽器中顯示使用 。表示不僅包含內(nèi)容,還包含顯示的屬性,比如 HTML 和 CSS 。業(yè)務(wù)規(guī)則可以集中到業(yè)務(wù)邏輯層,該層充當表示層和數(shù)據(jù)訪問層之間的數(shù)據(jù)交換的中間層 。數(shù)據(jù)以域?qū)ο蠡蛑祵ο蟮男问教峁┙o表示層 。從業(yè)務(wù)邏輯層中解耦 Browser Request Handler 和 Resource Request Handler 有助于促進代碼重用,并能實現(xiàn)靈活和可擴展的架構(gòu) 。此外,由于將來可以使用新的 REST 和 MVC 框架,實現(xiàn)它們變得更加容易,無需重寫業(yè)務(wù)邏輯層 。數(shù)據(jù)訪問層提供與數(shù)據(jù)存儲層的交互,可以使用 DAO 設(shè)計模式或者對象-關(guān)系映射解決方案(如 Hibernate、OJB 或 iBATIS)實現(xiàn) 。作為替代方案,業(yè)務(wù)層和數(shù)據(jù)訪問層中的組件可以實現(xiàn)為 EJB 組件,并取得 EJB 容器的支持,該容器可以為組件生命周期提供便利,管理持久性、事務(wù)和資源配置 。但是,這需要一個遵從 Java EE 的應(yīng)用服務(wù)器(比如 JBoss),并且可能無法處理 Tomcat 。該層的作用在于針對不同的數(shù)據(jù)存儲技術(shù),從業(yè)務(wù)邏輯中分離數(shù)據(jù)訪問代碼 。數(shù)據(jù)訪問層還可以作為連接其他系統(tǒng)的集成點,可以成為其他 Web 服務(wù)的客戶端 。數(shù)據(jù)存儲層包括數(shù)據(jù)庫系統(tǒng)、LDAP 服務(wù)器、文件系統(tǒng)和企業(yè)信息系統(tǒng)(包括遺留系統(tǒng)、事務(wù)處理系統(tǒng)和企業(yè)資源規(guī)劃系統(tǒng)) 。使用該架構(gòu),您可以開始看到 RESTful Web 服務(wù)的力量,它可以靈活地成為任何企業(yè)數(shù)據(jù)存儲的統(tǒng)一 API,從而向以用戶為中心的 Web 應(yīng)用程序公開垂直數(shù)據(jù),并自動化批量報告腳本 。什么是REST:結(jié)束語REST 描述了一個架構(gòu)樣式的互聯(lián)系統(tǒng)(如 Web 應(yīng)用程序) 。REST 約束條件作為一個整體應(yīng)用時,將生成一個簡單、可擴展、有效、安全、可靠的架構(gòu) 。由于它簡便、輕量級以及通過 HTTP 直接傳輸數(shù)據(jù)的特性,RESTful Web 服務(wù)成為基于 SOAP 服務(wù)的一個最有前途的替代方案 。用于 web 服務(wù)和動態(tài) Web 應(yīng)用程序的多層架構(gòu)可以實現(xiàn)可重用性、簡單性、可擴展性和組件可響應(yīng)性的清晰分離 。Ajax 和 RESTful Web 服務(wù)本質(zhì)上是互為補充的 。
猜你喜歡
- 涂改帶怎么用
- 自古逢秋悲寂寥 我言秋日勝春朝用了什么修辭手法
- 金槍魚的內(nèi)臟怎么處理
- 衣服滴到油了用洗潔精可以嗎?
- 無線麥克風和接收器不是一廠家能否使用
- 羅卜燉羊肉的做法
- 黑云壓城城欲摧 甲光向日金鱗開 有沒有用借代
- 氮素化肥在茶園中的農(nóng)化特性及其應(yīng)用
- 用友U8V11.0如何生成UFO報表,點完UFO報表后顯示如圖
- 哪有《仙劍2》單機游戲的下載?要能用的....用不成的垃圾別答
