文章編號(hào):10780時(shí)間:2024-09-29人氣:
REST (REpresentation State Transfer) 描述了一個(gè)架構(gòu)樣式的網(wǎng)絡(luò)系統(tǒng),比如 web 應(yīng)用程序。 它首次出現(xiàn)在 2000 年 Roy Fielding 的博士論文中,他是 HTTP 規(guī)范的主要編寫者之一。 REST 指的是一組架構(gòu)約束條件和原則。 滿足這些約束條件和原則的應(yīng)用程序或設(shè)計(jì)就是 RESTful。 Web 應(yīng)用程序最重要的 REST 原則是,客戶端和服務(wù)器之間的交互在請(qǐng)求之間是無狀態(tài)的。 從客戶端到服務(wù)器的每個(gè)請(qǐng)求都必須包含理解請(qǐng)求所必需的信息。 如果服務(wù)器在請(qǐng)求之間的任何時(shí)間點(diǎn)重啟,客戶端不會(huì)得到通知。 此外,無狀態(tài)請(qǐng)求可以由任何可用服務(wù)器回答,這十分適合云計(jì)算之類的環(huán)境。 客戶端可以緩存數(shù)據(jù)以改進(jìn)性能。 在服務(wù)器端,應(yīng)用程序狀態(tài)和功能可以分為各種資源。 資源是一個(gè)有趣的概念實(shí)體,它向客戶端公開。 資源的例子有:應(yīng)用程序?qū)ο蟆?shù)據(jù)庫(kù)記錄、算法等等。 每個(gè)資源都使用 URI (Universal Resource Identifier) 得到一個(gè)惟一的地址。 所有資源都共享統(tǒng)一的界面,以便在客戶端和服務(wù)器之間傳輸狀態(tài)。 使用的是標(biāo)準(zhǔn)的 HTTP 方法,比如 GET、PUT、POST 和 DELETE。 Hypermedia 是應(yīng)用程序狀態(tài)的引擎,資源表示通過超鏈接互聯(lián)。 另一個(gè)重要的 REST 原則是分層系統(tǒng),這表示組件無法了解它與之交互的中間層以外的組件。 通過將系統(tǒng)知識(shí)限制在單個(gè)層,可以限制整個(gè)系統(tǒng)的復(fù)雜性,促進(jìn)了底層的獨(dú)立性。 當(dāng)REST 架構(gòu)的約束條件作為一個(gè)整體應(yīng)用時(shí),將生成一個(gè)可以擴(kuò)展到大量客戶端的應(yīng)用程序。 它還降低了客戶端和服務(wù)器之間的交互延遲。 統(tǒng)一界面簡(jiǎn)化了整個(gè)系統(tǒng)架構(gòu),改進(jìn)了子系統(tǒng)之間交互的可見性。 REST 簡(jiǎn)化了客戶端和服務(wù)器的實(shí)現(xiàn)。 RESTful的實(shí)現(xiàn):RESTful Web 服務(wù)與 RPC 樣式的 Web 服務(wù)了解了什么是什么是REST,我們?cè)倏纯碦ESTful的實(shí)現(xiàn)。 最近,使用 RPC 樣式架構(gòu)構(gòu)建的基于 SOAP 的 Web 服務(wù)成為實(shí)現(xiàn) SOA 最常用的方法。 RPC 樣式的 Web 服務(wù)客戶端將一個(gè)裝滿數(shù)據(jù)的信封(包括方法和參數(shù)信息)通過 HTTP 發(fā)送到服務(wù)器。 服務(wù)器打開信封并使用傳入?yún)?shù)執(zhí)行指定的方法。 方法的結(jié)果打包到一個(gè)信封并作為響應(yīng)發(fā)回客戶端。 客戶端收到響應(yīng)并打開信封。 每個(gè)對(duì)象都有自己獨(dú)特的方法以及僅公開一個(gè) URI 的 RPC 樣式 Web 服務(wù),URI 表示單個(gè)端點(diǎn)。 它忽略 HTTP 的大部分特性且僅支持 POST 方法。 由于輕量級(jí)以及通過 HTTP 直接傳輸數(shù)據(jù)的特性,Web 服務(wù)的 RESTful 方法已經(jīng)成為最常見的替代方法。 可以使用各種語(yǔ)言(比如 Java 程序、Perl、Ruby、Python、PHP 和 Javascript[包括 Ajax])實(shí)現(xiàn)客戶端。 RESTful Web 服務(wù)通常可以通過自動(dòng)客戶端或代表用戶的應(yīng)用程序訪問。 但是,這種服務(wù)的簡(jiǎn)便性讓用戶能夠與之直接交互,使用它們的 Web 瀏覽器構(gòu)建一個(gè) GET URL 并讀取返回的內(nèi)容。 在REST 樣式的 Web 服務(wù)中,每個(gè)資源都有一個(gè)地址。 資源本身都是方法調(diào)用的目標(biāo),方法列表對(duì)所有資源都是一樣的。 這些方法都是標(biāo)準(zhǔn)方法,包括 HTTP GET、POST、PUT、DELETE,還可能包括 HEADER 和 OPTIONS。 在RPC 樣式的架構(gòu)中,關(guān)注點(diǎn)在于方法,而在 REST 樣式的架構(gòu)中,關(guān)注點(diǎn)在于資源 -- 將使用標(biāo)準(zhǔn)方法檢索并操作信息片段(使用表示的形式)。 資源表示形式在表示形式中使用超鏈接互聯(lián)。 Leonard Richardson 和 Sam Ruby 在他們的著作 RESTful Web Services 中引入了術(shù)語(yǔ) REST-RPC 混合架構(gòu)。 REST-RPC 混合 Web 服務(wù)不使用信封包裝方法、參數(shù)和數(shù)據(jù),而是直接通過 HTTP 傳輸數(shù)據(jù),這與 REST 樣式的 Web 服務(wù)是類似的。 但是它不使用標(biāo)準(zhǔn)的 HTTP 方法操作資源。 它在 HTTP 請(qǐng)求的 URI 部分存儲(chǔ)方法信息。 好幾個(gè)知名的 Web 服務(wù),比如 Yahoo 的 Flickr API 和 API 都使用這種混合架構(gòu)。 RESTful的實(shí)現(xiàn):RESTful Web 服務(wù)的 Java 框架有兩個(gè) Java 框架可以幫助構(gòu)建 RESTful Web 服務(wù)。 erome Louvel 和 Dave Pawson 開發(fā)的 Restlet(見 參考資料)是輕量級(jí)的。 它實(shí)現(xiàn)針對(duì)各種 RESTful 系統(tǒng)的資源、表示、連接器和媒體類型之類的概念,包括 Web 服務(wù)。 在 Restlet 框架中,客戶端和服務(wù)器都是組件。 組件通過連接器互相通信。 該框架最重要的類是抽象類 Uniform 及其具體的子類 Restlet,該類的子類是專用類,比如 Application、Filter、Finder、Router 和 Route。 這些子類能夠一起處理驗(yàn)證、過濾、安全、數(shù)據(jù)轉(zhuǎn)換以及將傳入請(qǐng)求路由到相應(yīng)資源等操作。 Resource 類生成客戶端的表示形式。 JSR-311是 Sun Microsystems 的規(guī)范,可以為開發(fā) RESTful Web 服務(wù)定義一組 Java API。 Jersey是對(duì) JSR-311 的參考實(shí)現(xiàn)。 JSR-311 提供一組注釋,相關(guān)類和接口都可以用來將 Java 對(duì)象作為 Web 資源展示。 該規(guī)范假定 HTTP 是底層網(wǎng)絡(luò)協(xié)議。 它使用注釋提供 URI 和相應(yīng)資源類之間的清晰映射,以及 HTTP 方法與 Java 對(duì)象方法之間的映射。 API 支持廣泛的 HTTP 實(shí)體內(nèi)容類型,包括 HTML、XML、JSON、GIF、JPG 等。 它還將提供所需的插件功能,以允許使用標(biāo)準(zhǔn)方法通過應(yīng)用程序添加其他類型。 RESTful的實(shí)現(xiàn):構(gòu)建 RESTful Web 服務(wù)的多層架構(gòu)RESTful Web 服務(wù)和動(dòng)態(tài) Web 應(yīng)用程序在許多方面都是類似的。 有時(shí)它們提供相同或非常類似的數(shù)據(jù)和函數(shù),盡管客戶端的種類不同。 例如,在線電子商務(wù)分類網(wǎng)站為用戶提供一個(gè)瀏覽器界面,用于搜索、查看和訂購(gòu)產(chǎn)品。 如果還提供 Web 服務(wù)供公司、零售商甚至個(gè)人能夠自動(dòng)訂購(gòu)產(chǎn)品,它將非常有用。 與大部分動(dòng)態(tài) Web 應(yīng)用程序一樣,Web 服務(wù)可以從多層架構(gòu)的關(guān)注點(diǎn)分離中受益。 業(yè)務(wù)邏輯和數(shù)據(jù)可以由自動(dòng)客戶端和 GUI 客戶端共享。 惟一的不同點(diǎn)在于客戶端的本質(zhì)和中間層的表示層。 此外,從數(shù)據(jù)訪問中分離業(yè)務(wù)邏輯可實(shí)現(xiàn)數(shù)據(jù)庫(kù)獨(dú)立性,并為各種類型的數(shù)據(jù)存儲(chǔ)提供插件能力。 圖1 展示了自動(dòng)化客戶端,包括 Java 和各種語(yǔ)言編寫的腳本,這些語(yǔ)言包括 Python、Perl、Ruby、PHP 或命令行工具,比如 curl。 在瀏覽器中運(yùn)行且作為 RESTful Web 服務(wù)消費(fèi)者運(yùn)行的 Ajax、Flash、JavaFX、GWT、博客和 wiki 都屬于此列,因?yàn)樗鼈兌即碛脩粢宰詣?dòng)化樣式運(yùn)行。 自動(dòng)化 Web 服務(wù)客戶端在 Web 層向 Resource Request Handler 發(fā)送 HTTP 響應(yīng)。 客戶端的無狀態(tài)請(qǐng)求在頭部包含方法信息,即 POST、GET、PUT 和 DELETE,這又將映射到 Resource Request Handler 中資源的相應(yīng)操作。 每個(gè)請(qǐng)求都包含所有必需的信息,包括 Resource Request Handler 用來處理請(qǐng)求的憑據(jù)。 從Web 服務(wù)客戶端收到請(qǐng)求之后,Resource Request Handler 從業(yè)務(wù)邏輯層請(qǐng)求服務(wù)。 Resource Request Handler 確定所有概念性的實(shí)體,系統(tǒng)將這些實(shí)體作為資源公開,并為每個(gè)資源分配一個(gè)惟一的 URI。 但是,概念性的實(shí)體在該層是不存在的。 它們存在于業(yè)務(wù)邏輯層。 可以使用 Jersey 或其他框架(比如 Restlet)實(shí)現(xiàn) Resource Request Handler,它應(yīng)該是輕量級(jí)的,將大量職責(zé)工作委托給業(yè)務(wù)層。 Ajax 和 RESTful Web 服務(wù)本質(zhì)上是互為補(bǔ)充的。 它們都可以利用大量 Web 技術(shù)和標(biāo)準(zhǔn),比如 HTML、JavaScript、瀏覽器對(duì)象、XML/JSON 和 HTTP。 當(dāng)然也不需要購(gòu)買、安裝或配置任何主要組件來支持 Ajax 前端和 RESTful Web 服務(wù)之間的交互。 RESTful Web 服務(wù)為 Ajax 提供了非常簡(jiǎn)單的 API 來處理服務(wù)器上資源之間的交互。 圖1 中的 Web 瀏覽器客戶端作為 GUI 的前端,使用表示層中的 Browser Request Handler 生成的 HTML 提供顯示功能。 Browser Requester Handler 可以使用 MVC 模型(JSF、Struts 或 Spring 都是 Java 的例子)。 它從瀏覽器接受請(qǐng)求,從業(yè)務(wù)邏輯層請(qǐng)求服務(wù),生成表示并對(duì)瀏覽器做出響應(yīng)。 表示供用戶在瀏覽器中顯示使用。 表示不僅包含內(nèi)容,還包含顯示的屬性,比如 HTML 和 CSS。 業(yè)務(wù)規(guī)則可以集中到業(yè)務(wù)邏輯層,該層充當(dāng)表示層和數(shù)據(jù)訪問層之間的數(shù)據(jù)交換的中間層。 數(shù)據(jù)以域?qū)ο蠡蛑祵?duì)象的形式提供給表示層。 從業(yè)務(wù)邏輯層中解耦 Browser Request Handler 和 Resource Request Handler 有助于促進(jìn)代碼重用,并能實(shí)現(xiàn)靈活和可擴(kuò)展的架構(gòu)。 此外,由于將來可以使用新的 REST 和 MVC 框架,實(shí)現(xiàn)它們變得更加容易,無需重寫業(yè)務(wù)邏輯層。 數(shù)據(jù)訪問層提供與數(shù)據(jù)存儲(chǔ)層的交互,可以使用 DAO 設(shè)計(jì)模式或者對(duì)象-關(guān)系映射解決方案(如 Hibernate、OJB 或 iBATIS)實(shí)現(xiàn)。 作為替代方案,業(yè)務(wù)層和數(shù)據(jù)訪問層中的組件可以實(shí)現(xiàn)為 EJB 組件,并取得 EJB 容器的支持,該容器可以為組件生命周期提供便利,管理持久性、事務(wù)和資源配置。 但是,這需要一個(gè)遵從 Java EE 的應(yīng)用服務(wù)器(比如 JBoss),并且可能無法處理 Tomcat。 該層的作用在于針對(duì)不同的數(shù)據(jù)存儲(chǔ)技術(shù),從業(yè)務(wù)邏輯中分離數(shù)據(jù)訪問代碼。 數(shù)據(jù)訪問層還可以作為連接其他系統(tǒng)的集成點(diǎn),可以成為其他 Web 服務(wù)的客戶端。 數(shù)據(jù)存儲(chǔ)層包括數(shù)據(jù)庫(kù)系統(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ù)存儲(chǔ)的統(tǒng)一 API,從而向以用戶為中心的 Web 應(yīng)用程序公開垂直數(shù)據(jù),并自動(dòng)化批量報(bào)告腳本。 什么是REST:結(jié)束語(yǔ)REST 描述了一個(gè)架構(gòu)樣式的互聯(lián)系統(tǒng)(如 Web 應(yīng)用程序)。 REST 約束條件作為一個(gè)整體應(yīng)用時(shí),將生成一個(gè)簡(jiǎn)單、可擴(kuò)展、有效、安全、可靠的架構(gòu)。 由于它簡(jiǎn)便、輕量級(jí)以及通過 HTTP 直接傳輸數(shù)據(jù)的特性,RESTful Web 服務(wù)成為基于 SOAP 服務(wù)的一個(gè)最有前途的替代方案。 用于 web 服務(wù)和動(dòng)態(tài) Web 應(yīng)用程序的多層架構(gòu)可以實(shí)現(xiàn)可重用性、簡(jiǎn)單性、可擴(kuò)展性和組件可響應(yīng)性的清晰分離。 Ajax 和 RESTful Web 服務(wù)本質(zhì)上是互為補(bǔ)充的。
REST (REpresentation State Transfer) 描述了一個(gè)架構(gòu)樣式的網(wǎng)絡(luò)系統(tǒng),比如 web 應(yīng)用程序。 它首次出現(xiàn)在 2000 年 Roy Fielding 的博士論文中,他是 HTTP 規(guī)范的主要編寫者之一。 REST 指的是一組架構(gòu)約束條件和原則。 滿足這些約束條件和原則的應(yīng)用程序或設(shè)計(jì)就是 RESTful。 Web 應(yīng)用程序最重要的 REST 原則是,客戶端和服務(wù)器之間的交互在請(qǐng)求之間是無狀態(tài)的。 從客戶端到服務(wù)器的每個(gè)請(qǐng)求都必須包含理解請(qǐng)求所必需的信息。 如果服務(wù)器在請(qǐng)求之間的任何時(shí)間點(diǎn)重啟,客戶端不會(huì)得到通知。 此外,無狀態(tài)請(qǐng)求可以由任何可用服務(wù)器回答,這十分適合云計(jì)算之類的環(huán)境。 客戶端可以緩存數(shù)據(jù)以改進(jìn)性能。 在服務(wù)器端,應(yīng)用程序狀態(tài)和功能可以分為各種資源。 資源是一個(gè)有趣的概念實(shí)體,它向客戶端公開。 資源的例子有:應(yīng)用程序?qū)ο蟆?shù)據(jù)庫(kù)記錄、算法等等。 每個(gè)資源都使用 URI (Universal Resource Identifier) 得到一個(gè)惟一的地址。 所有資源都共享統(tǒng)一的界面,以便在客戶端和服務(wù)器之間傳輸狀態(tài)。 使用的是標(biāo)準(zhǔn)的 HTTP 方法,比如 GET、PUT、POST 和 DELETE。 Hypermedia 是應(yīng)用程序狀態(tài)的引擎,資源表示通過超鏈接互聯(lián)。 另一個(gè)重要的 REST 原則是分層系統(tǒng),這表示組件無法了解它與之交互的中間層以外的組件。 通過將系統(tǒng)知識(shí)限制在單個(gè)層,可以限制整個(gè)系統(tǒng)的復(fù)雜性,促進(jìn)了底層的獨(dú)立性。 當(dāng)REST 架構(gòu)的約束條件作為一個(gè)整體應(yīng)用時(shí),將生成一個(gè)可以擴(kuò)展到大量客戶端的應(yīng)用程序。 它還降低了客戶端和服務(wù)器之間的交互延遲。 統(tǒng)一界面簡(jiǎn)化了整個(gè)系統(tǒng)架構(gòu),改進(jìn)了子系統(tǒng)之間交互的可見性。 REST 簡(jiǎn)化了客戶端和服務(wù)器的實(shí)現(xiàn)。 RESTful的實(shí)現(xiàn):RESTful Web 服務(wù)與 RPC 樣式的 Web 服務(wù)了解了什么是什么是REST,我們?cè)倏纯碦ESTful的實(shí)現(xiàn)。 最近,使用 RPC 樣式架構(gòu)構(gòu)建的基于 SOAP 的 Web 服務(wù)成為實(shí)現(xiàn) SOA 最常用的方法。 RPC 樣式的 Web 服務(wù)客戶端將一個(gè)裝滿數(shù)據(jù)的信封(包括方法和參數(shù)信息)通過 HTTP 發(fā)送到服務(wù)器。 服務(wù)器打開信封并使用傳入?yún)?shù)執(zhí)行指定的方法。 方法的結(jié)果打包到一個(gè)信封并作為響應(yīng)發(fā)回客戶端。 客戶端收到響應(yīng)并打開信封。 每個(gè)對(duì)象都有自己獨(dú)特的方法以及僅公開一個(gè) URI 的 RPC 樣式 Web 服務(wù),URI 表示單個(gè)端點(diǎn)。 它忽略 HTTP 的大部分特性且僅支持 POST 方法。 由于輕量級(jí)以及通過 HTTP 直接傳輸數(shù)據(jù)的特性,Web 服務(wù)的 RESTful 方法已經(jīng)成為最常見的替代方法。 可以使用各種語(yǔ)言(比如 Java 程序、Perl、Ruby、Python、PHP 和 Javascript[包括 Ajax])實(shí)現(xiàn)客戶端。 RESTful Web 服務(wù)通常可以通過自動(dòng)客戶端或代表用戶的應(yīng)用程序訪問。 但是,這種服務(wù)的簡(jiǎn)便性讓用戶能夠與之直接交互,使用它們的 Web 瀏覽器構(gòu)建一個(gè) GET URL 并讀取返回的內(nèi)容。 在REST 樣式的 Web 服務(wù)中,每個(gè)資源都有一個(gè)地址。 資源本身都是方法調(diào)用的目標(biāo),方法列表對(duì)所有資源都是一樣的。 這些方法都是標(biāo)準(zhǔn)方法,包括 HTTP GET、POST、PUT、DELETE,還可能包括 HEADER 和 OPTIONS。 在RPC 樣式的架構(gòu)中,關(guān)注點(diǎn)在于方法,而在 REST 樣式的架構(gòu)中,關(guān)注點(diǎn)在于資源 —— 將使用標(biāo)準(zhǔn)方法檢索并操作信息片段(使用表示的形式)。 資源表示形式在表示形式中使用超鏈接互聯(lián)。 Leonard Richardson 和 Sam Ruby 在他們的著作 RESTful Web Services 中引入了術(shù)語(yǔ) REST-RPC 混合架構(gòu)。 REST-RPC 混合 Web 服務(wù)不使用信封包裝方法、參數(shù)和數(shù)據(jù),而是直接通過 HTTP 傳輸數(shù)據(jù),這與 REST 樣式的 Web 服務(wù)是類似的。 但是它不使用標(biāo)準(zhǔn)的 HTTP 方法操作資源。 它在 HTTP 請(qǐng)求的 URI 部分存儲(chǔ)方法信息。 好幾個(gè)知名的 Web 服務(wù),比如 Yahoo 的 Flickr API 和 API 都使用這種混合架構(gòu)。 RESTful的實(shí)現(xiàn):RESTful Web 服務(wù)的 Java 框架有兩個(gè) Java 框架可以幫助構(gòu)建 RESTful Web 服務(wù)。 erome Louvel 和 Dave Pawson 開發(fā)的 Restlet(見 參考資料)是輕量級(jí)的。 它實(shí)現(xiàn)針對(duì)各種 RESTful 系統(tǒng)的資源、表示、連接器和媒體類型之類的概念,包括 Web 服務(wù)。 在 Restlet 框架中,客戶端和服務(wù)器都是組件。 組件通過連接器互相通信。 該框架最重要的類是抽象類 Uniform 及其具體的子類 Restlet,該類的子類是專用類,比如 Application、Filter、Finder、Router 和 Route。 這些子類能夠一起處理驗(yàn)證、過濾、安全、數(shù)據(jù)轉(zhuǎn)換以及將傳入請(qǐng)求路由到相應(yīng)資源等操作。 Resource 類生成客戶端的表示形式。 JSR-311是 Sun Microsystems 的規(guī)范,可以為開發(fā) RESTful Web 服務(wù)定義一組 Java API。 Jersey是對(duì) JSR-311 的參考實(shí)現(xiàn)。 JSR-311 提供一組注釋,相關(guān)類和接口都可以用來將 Java 對(duì)象作為 Web 資源展示。 該規(guī)范假定 HTTP 是底層網(wǎng)絡(luò)協(xié)議。 它使用注釋提供 URI 和相應(yīng)資源類之間的清晰映射,以及 HTTP 方法與 Java 對(duì)象方法之間的映射。 API 支持廣泛的 HTTP 實(shí)體內(nèi)容類型,包括 HTML、XML、JSON、GIF、JPG 等。 它還將提供所需的插件功能,以允許使用標(biāo)準(zhǔn)方法通過應(yīng)用程序添加其他類型。 RESTful的實(shí)現(xiàn):構(gòu)建 RESTful Web 服務(wù)的多層架構(gòu)RESTful Web 服務(wù)和動(dòng)態(tài) Web 應(yīng)用程序在許多方面都是類似的。 有時(shí)它們提供相同或非常類似的數(shù)據(jù)和函數(shù),盡管客戶端的種類不同。 例如,在線電子商務(wù)分類網(wǎng)站為用戶提供一個(gè)瀏覽器界面,用于搜索、查看和訂購(gòu)產(chǎn)品。 如果還提供 Web 服務(wù)供公司、零售商甚至個(gè)人能夠自動(dòng)訂購(gòu)產(chǎn)品,它將非常有用。 與大部分動(dòng)態(tài) Web 應(yīng)用程序一樣,Web 服務(wù)可以從多層架構(gòu)的關(guān)注點(diǎn)分離中受益。 業(yè)務(wù)邏輯和數(shù)據(jù)可以由自動(dòng)客戶端和 GUI 客戶端共享。 惟一的不同點(diǎn)在于客戶端的本質(zhì)和中間層的表示層。 此外,從數(shù)據(jù)訪問中分離業(yè)務(wù)邏輯可實(shí)現(xiàn)數(shù)據(jù)庫(kù)獨(dú)立性,并為各種類型的數(shù)據(jù)存儲(chǔ)提供插件能力。 圖1 展示了自動(dòng)化客戶端,包括 Java 和各種語(yǔ)言編寫的腳本,這些語(yǔ)言包括 Python、Perl、Ruby、PHP 或命令行工具,比如 curl。 在瀏覽器中運(yùn)行且作為 RESTful Web 服務(wù)消費(fèi)者運(yùn)行的 Ajax、Flash、JavaFX、GWT、博客和 wiki 都屬于此列,因?yàn)樗鼈兌即碛脩粢宰詣?dòng)化樣式運(yùn)行。 自動(dòng)化 Web 服務(wù)客戶端在 Web 層向 Resource Request Handler 發(fā)送 HTTP 響應(yīng)。 客戶端的無狀態(tài)請(qǐng)求在頭部包含方法信息,即 POST、GET、PUT 和 DELETE,這又將映射到 Resource Request Handler 中資源的相應(yīng)操作。 每個(gè)請(qǐng)求都包含所有必需的信息,包括 Resource Request Handler 用來處理請(qǐng)求的憑據(jù)。 從Web 服務(wù)客戶端收到請(qǐng)求之后,Resource Request Handler 從業(yè)務(wù)邏輯層請(qǐng)求服務(wù)。 Resource Request Handler 確定所有概念性的實(shí)體,系統(tǒng)將這些實(shí)體作為資源公開,并為每個(gè)資源分配一個(gè)惟一的 URI。 但是,概念性的實(shí)體在該層是不存在的。 它們存在于業(yè)務(wù)邏輯層。 可以使用 Jersey 或其他框架(比如 Restlet)實(shí)現(xiàn) Resource Request Handler,它應(yīng)該是輕量級(jí)的,將大量職責(zé)工作委托給業(yè)務(wù)層。 Ajax 和 RESTful Web 服務(wù)本質(zhì)上是互為補(bǔ)充的。 它們都可以利用大量 Web 技術(shù)和標(biāo)準(zhǔn),比如 HTML、JavaScript、瀏覽器對(duì)象、XML/JSON 和 HTTP。 當(dāng)然也不需要購(gòu)買、安裝或配置任何主要組件來支持 Ajax 前端和 RESTful Web 服務(wù)之間的交互。 RESTful Web 服務(wù)為 Ajax 提供了非常簡(jiǎn)單的 API 來處理服務(wù)器上資源之間的交互。 圖1 中的 Web 瀏覽器客戶端作為 GUI 的前端,使用表示層中的 Browser Request Handler 生成的 HTML 提供顯示功能。 Browser Requester Handler 可以使用 MVC 模型(JSF、Struts 或 Spring 都是 Java 的例子)。 它從瀏覽器接受請(qǐng)求,從業(yè)務(wù)邏輯層請(qǐng)求服務(wù),生成表示并對(duì)瀏覽器做出響應(yīng)。 表示供用戶在瀏覽器中顯示使用。 表示不僅包含內(nèi)容,還包含顯示的屬性,比如 HTML 和 CSS。 業(yè)務(wù)規(guī)則可以集中到業(yè)務(wù)邏輯層,該層充當(dāng)表示層和數(shù)據(jù)訪問層之間的數(shù)據(jù)交換的中間層。 數(shù)據(jù)以域?qū)ο蠡蛑祵?duì)象的形式提供給表示層。 從業(yè)務(wù)邏輯層中解耦 Browser Request Handler 和 Resource Request Handler 有助于促進(jìn)代碼重用,并能實(shí)現(xiàn)靈活和可擴(kuò)展的架構(gòu)。 此外,由于將來可以使用新的 REST 和 MVC 框架,實(shí)現(xiàn)它們變得更加容易,無需重寫業(yè)務(wù)邏輯層。 數(shù)據(jù)訪問層提供與數(shù)據(jù)存儲(chǔ)層的交互,可以使用 DAO 設(shè)計(jì)模式或者對(duì)象-關(guān)系映射解決方案(如 Hibernate、OJB 或 iBATIS)實(shí)現(xiàn)。 作為替代方案,業(yè)務(wù)層和數(shù)據(jù)訪問層中的組件可以實(shí)現(xiàn)為 EJB 組件,并取得 EJB 容器的支持,該容器可以為組件生命周期提供便利,管理持久性、事務(wù)和資源配置。 但是,這需要一個(gè)遵從 Java EE 的應(yīng)用服務(wù)器(比如 JBoss),并且可能無法處理 Tomcat。 該層的作用在于針對(duì)不同的數(shù)據(jù)存儲(chǔ)技術(shù),從業(yè)務(wù)邏輯中分離數(shù)據(jù)訪問代碼。 數(shù)據(jù)訪問層還可以作為連接其他系統(tǒng)的集成點(diǎn),可以成為其他 Web 服務(wù)的客戶端。 數(shù)據(jù)存儲(chǔ)層包括數(shù)據(jù)庫(kù)系統(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ù)存儲(chǔ)的統(tǒng)一 API,從而向以用戶為中心的 Web 應(yīng)用程序公開垂直數(shù)據(jù),并自動(dòng)化批量報(bào)告腳本。 什么是REST:結(jié)束語(yǔ)REST 描述了一個(gè)架構(gòu)樣式的互聯(lián)系統(tǒng)(如 Web 應(yīng)用程序)。 REST 約束條件作為一個(gè)整體應(yīng)用時(shí),將生成一個(gè)簡(jiǎn)單、可擴(kuò)展、有效、安全、可靠的架構(gòu)。 由于它簡(jiǎn)便、輕量級(jí)以及通過 HTTP 直接傳輸數(shù)據(jù)的特性,RESTful Web 服務(wù)成為基于 SOAP 服務(wù)的一個(gè)最有前途的替代方案。 用于 web 服務(wù)和動(dòng)態(tài) Web 應(yīng)用程序的多層架構(gòu)可以實(shí)現(xiàn)可重用性、簡(jiǎn)單性、可擴(kuò)展性和組件可響應(yīng)性的清晰分離。 Ajax 和 RESTful Web 服務(wù)本質(zhì)上是互為補(bǔ)充的。
REST (REpresentation State Transfer) 描述了一個(gè)架構(gòu)樣式的網(wǎng)絡(luò)系統(tǒng),比如 web 應(yīng)用程序。 它首次出現(xiàn)在 2000 年 Roy Fielding 的博士論文中,他是 HTTP 規(guī)范的主要編寫者之一。 REST 指的是一組架構(gòu)約束條件和原則。 滿足這些約束條件和原則的應(yīng)用程序或設(shè)計(jì)就是 RESTful。 Web 應(yīng)用程序最重要的 REST 原則是,客戶端和服務(wù)器之間的交互在請(qǐng)求之間是無狀態(tài)的。 從客戶端到服務(wù)器的每個(gè)請(qǐng)求都必須包含理解請(qǐng)求所必需的信息。 如果服務(wù)器在請(qǐng)求之間的任何時(shí)間點(diǎn)重啟,客戶端不會(huì)得到通知。 此外,無狀態(tài)請(qǐng)求可以由任何可用服務(wù)器回答,這十分適合云計(jì)算之類的環(huán)境。 客戶端可以緩存數(shù)據(jù)以改進(jìn)性能。 在服務(wù)器端,應(yīng)用程序狀態(tài)和功能可以分為各種資源。 資源是一個(gè)有趣的概念實(shí)體,它向客戶端公開。 資源的例子有:應(yīng)用程序?qū)ο蟆?shù)據(jù)庫(kù)記錄、算法等等。 每個(gè)資源都使用 URI (Universal Resource Identifier) 得到一個(gè)惟一的地址。 所有資源都共享統(tǒng)一的界面,以便在客戶端和服務(wù)器之間傳輸狀態(tài)。 使用的是標(biāo)準(zhǔn)的 HTTP 方法,比如 GET、PUT、POST 和 DELETE。 Hypermedia 是應(yīng)用程序狀態(tài)的引擎,資源表示通過超鏈接互聯(lián)。 另一個(gè)重要的 REST 原則是分層系統(tǒng),這表示組件無法了解它與之交互的中間層以外的組件。 通過將系統(tǒng)知識(shí)限制在單個(gè)層,可以限制整個(gè)系統(tǒng)的復(fù)雜性,促進(jìn)了底層的獨(dú)立性。 當(dāng)REST 架構(gòu)的約束條件作為一個(gè)整體應(yīng)用時(shí),將生成一個(gè)可以擴(kuò)展到大量客戶端的應(yīng)用程序。 它還降低了客戶端和服務(wù)器之間的交互延遲。 統(tǒng)一界面簡(jiǎn)化了整個(gè)系統(tǒng)架構(gòu),改進(jìn)了子系統(tǒng)之間交互的可見性。 REST 簡(jiǎn)化了客戶端和服務(wù)器的實(shí)現(xiàn)。 RESTful的實(shí)現(xiàn):RESTful Web 服務(wù)與 RPC 樣式的 Web 服務(wù)了解了什么是什么是REST,我們?cè)倏纯碦ESTful的實(shí)現(xiàn)。 最近,使用 RPC 樣式架構(gòu)構(gòu)建的基于 SOAP 的 Web 服務(wù)成為實(shí)現(xiàn) SOA 最常用的方法。 RPC 樣式的 Web 服務(wù)客戶端將一個(gè)裝滿數(shù)據(jù)的信封(包括方法和參數(shù)信息)通過 HTTP 發(fā)送到服務(wù)器。 服務(wù)器打開信封并使用傳入?yún)?shù)執(zhí)行指定的方法。 方法的結(jié)果打包到一個(gè)信封并作為響應(yīng)發(fā)回客戶端。 客戶端收到響應(yīng)并打開信封。 每個(gè)對(duì)象都有自己獨(dú)特的方法以及僅公開一個(gè) URI 的 RPC 樣式 Web 服務(wù),URI 表示單個(gè)端點(diǎn)。 它忽略 HTTP 的大部分特性且僅支持 POST 方法。 由于輕量級(jí)以及通過 HTTP 直接傳輸數(shù)據(jù)的特性,Web 服務(wù)的 RESTful 方法已經(jīng)成為最常見的替代方法。 可以使用各種語(yǔ)言(比如 Java 程序、Perl、Ruby、Python、PHP 和 Javascript[包括 Ajax])實(shí)現(xiàn)客戶端。 RESTful Web 服務(wù)通常可以通過自動(dòng)客戶端或代表用戶的應(yīng)用程序訪問。 但是,這種服務(wù)的簡(jiǎn)便性讓用戶能夠與之直接交互,使用它們的 Web 瀏覽器構(gòu)建一個(gè) GET URL 并讀取返回的內(nèi)容。 在REST 樣式的 Web 服務(wù)中,每個(gè)資源都有一個(gè)地址。 資源本身都是方法調(diào)用的目標(biāo),方法列表對(duì)所有資源都是一樣的。 這些方法都是標(biāo)準(zhǔn)方法,包括 HTTP GET、POST、PUT、DELETE,還可能包括 HEADER 和 OPTIONS。 在RPC 樣式的架構(gòu)中,關(guān)注點(diǎn)在于方法,而在 REST 樣式的架構(gòu)中,關(guān)注點(diǎn)在于資源 —— 將使用標(biāo)準(zhǔn)方法檢索并操作信息片段(使用表示的形式)。 資源表示形式在表示形式中使用超鏈接互聯(lián)。 Leonard Richardson 和 Sam Ruby 在他們的著作 RESTful Web Services 中引入了術(shù)語(yǔ) REST-RPC 混合架構(gòu)。 REST-RPC 混合 Web 服務(wù)不使用信封包裝方法、參數(shù)和數(shù)據(jù),而是直接通過 HTTP 傳輸數(shù)據(jù),這與 REST 樣式的 Web 服務(wù)是類似的。 但是它不使用標(biāo)準(zhǔn)的 HTTP 方法操作資源。 它在 HTTP 請(qǐng)求的 URI 部分存儲(chǔ)方法信息。 好幾個(gè)知名的 Web 服務(wù),比如 Yahoo 的 Flickr API 和 API 都使用這種混合架構(gòu)。 RESTful的實(shí)現(xiàn):RESTful Web 服務(wù)的 Java 框架有兩個(gè) Java 框架可以幫助構(gòu)建 RESTful Web 服務(wù)。 erome Louvel 和 Dave Pawson 開發(fā)的 Restlet(見 參考資料)是輕量級(jí)的。 它實(shí)現(xiàn)針對(duì)各種 RESTful 系統(tǒng)的資源、表示、連接器和媒體類型之類的概念,包括 Web 服務(wù)。 在 Restlet 框架中,客戶端和服務(wù)器都是組件。 組件通過連接器互相通信。 該框架最重要的類是抽象類 Uniform 及其具體的子類 Restlet,該類的子類是專用類,比如 Application、Filter、Finder、Router 和 Route。 這些子類能夠一起處理驗(yàn)證、過濾、安全、數(shù)據(jù)轉(zhuǎn)換以及將傳入請(qǐng)求路由到相應(yīng)資源等操作。 Resource 類生成客戶端的表示形式。 JSR-311是 Sun Microsystems 的規(guī)范,可以為開發(fā) RESTful Web 服務(wù)定義一組 Java API。 Jersey是對(duì) JSR-311 的參考實(shí)現(xiàn)。 JSR-311 提供一組注釋,相關(guān)類和接口都可以用來將 Java 對(duì)象作為 Web 資源展示。 該規(guī)范假定 HTTP 是底層網(wǎng)絡(luò)協(xié)議。 它使用注釋提供 URI 和相應(yīng)資源類之間的清晰映射,以及 HTTP 方法與 Java 對(duì)象方法之間的映射。 API 支持廣泛的 HTTP 實(shí)體內(nèi)容類型,包括 HTML、XML、JSON、GIF、JPG 等。 它還將提供所需的插件功能,以允許使用標(biāo)準(zhǔn)方法通過應(yīng)用程序添加其他類型。 RESTful的實(shí)現(xiàn):構(gòu)建 RESTful Web 服務(wù)的多層架構(gòu)RESTful Web 服務(wù)和動(dòng)態(tài) Web 應(yīng)用程序在許多方面都是類似的。 有時(shí)它們提供相同或非常類似的數(shù)據(jù)和函數(shù),盡管客戶端的種類不同。 例如,在線電子商務(wù)分類網(wǎng)站為用戶提供一個(gè)瀏覽器界面,用于搜索、查看和訂購(gòu)產(chǎn)品。 如果還提供 Web 服務(wù)供公司、零售商甚至個(gè)人能夠自動(dòng)訂購(gòu)產(chǎn)品,它將非常有用。 與大部分動(dòng)態(tài) Web 應(yīng)用程序一樣,Web 服務(wù)可以從多層架構(gòu)的關(guān)注點(diǎn)分離中受益。 業(yè)務(wù)邏輯和數(shù)據(jù)可以由自動(dòng)客戶端和 GUI 客戶端共享。 惟一的不同點(diǎn)在于客戶端的本質(zhì)和中間層的表示層。 此外,從數(shù)據(jù)訪問中分離業(yè)務(wù)邏輯可實(shí)現(xiàn)數(shù)據(jù)庫(kù)獨(dú)立性,并為各種類型的數(shù)據(jù)存儲(chǔ)提供插件能力。 圖1 展示了自動(dòng)化客戶端,包括 Java 和各種語(yǔ)言編寫的腳本,這些語(yǔ)言包括 Python、Perl、Ruby、PHP 或命令行工具,比如 curl。 在瀏覽器中運(yùn)行且作為 RESTful Web 服務(wù)消費(fèi)者運(yùn)行的 Ajax、Flash、JavaFX、GWT、博客和 wiki 都屬于此列,因?yàn)樗鼈兌即碛脩粢宰詣?dòng)化樣式運(yùn)行。 自動(dòng)化 Web 服務(wù)客戶端在 Web 層向 Resource Request Handler 發(fā)送 HTTP 響應(yīng)。 客戶端的無狀態(tài)請(qǐng)求在頭部包含方法信息,即 POST、GET、PUT 和 DELETE,這又將映射到 Resource Request Handler 中資源的相應(yīng)操作。 每個(gè)請(qǐng)求都包含所有必需的信息,包括 Resource Request Handler 用來處理請(qǐng)求的憑據(jù)。 從Web 服務(wù)客戶端收到請(qǐng)求之后,Resource Request Handler 從業(yè)務(wù)邏輯層請(qǐng)求服務(wù)。 Resource Request Handler 確定所有概念性的實(shí)體,系統(tǒng)將這些實(shí)體作為資源公開,并為每個(gè)資源分配一個(gè)惟一的 URI。 但是,概念性的實(shí)體在該層是不存在的。 它們存在于業(yè)務(wù)邏輯層。 可以使用 Jersey 或其他框架(比如 Restlet)實(shí)現(xiàn) Resource Request Handler,它應(yīng)該是輕量級(jí)的,將大量職責(zé)工作委托給業(yè)務(wù)層。 Ajax 和 RESTful Web 服務(wù)本質(zhì)上是互為補(bǔ)充的。 它們都可以利用大量 Web 技術(shù)和標(biāo)準(zhǔn),比如 HTML、JavaScript、瀏覽器對(duì)象、XML/JSON 和 HTTP。 當(dāng)然也不需要購(gòu)買、安裝或配置任何主要組件來支持 Ajax 前端和 RESTful Web 服務(wù)之間的交互。 RESTful Web 服務(wù)為 Ajax 提供了非常簡(jiǎn)單的 API 來處理服務(wù)器上資源之間的交互。 圖1 中的 Web 瀏覽器客戶端作為 GUI 的前端,使用表示層中的 Browser Request Handler 生成的 HTML 提供顯示功能。 Browser Requester Handler 可以使用 MVC 模型(JSF、Struts 或 Spring 都是 Java 的例子)。 它從瀏覽器接受請(qǐng)求,從業(yè)務(wù)邏輯層請(qǐng)求服務(wù),生成表示并對(duì)瀏覽器做出響應(yīng)。 表示供用戶在瀏覽器中顯示使用。 表示不僅包含內(nèi)容,還包含顯示的屬性,比如 HTML 和 CSS。 業(yè)務(wù)規(guī)則可以集中到業(yè)務(wù)邏輯層,該層充當(dāng)表示層和數(shù)據(jù)訪問層之間的數(shù)據(jù)交換的中間層。 數(shù)據(jù)以域?qū)ο蠡蛑祵?duì)象的形式提供給表示層。 從業(yè)務(wù)邏輯層中解耦 Browser Request Handler 和 Resource Request Handler 有助于促進(jìn)代碼重用,并能實(shí)現(xiàn)靈活和可擴(kuò)展的架構(gòu)。 此外,由于將來可以使用新的 REST 和 MVC 框架,實(shí)現(xiàn)它們變得更加容易,無需重寫業(yè)務(wù)邏輯層。 數(shù)據(jù)訪問層提供與數(shù)據(jù)存儲(chǔ)層的交互,可以使用 DAO 設(shè)計(jì)模式或者對(duì)象-關(guān)系映射解決方案(如 Hibernate、OJB 或 iBATIS)實(shí)現(xiàn)。 作為替代方案,業(yè)務(wù)層和數(shù)據(jù)訪問層中的組件可以實(shí)現(xiàn)為 EJB 組件,并取得 EJB 容器的支持,該容器可以為組件生命周期提供便利,管理持久性、事務(wù)和資源配置。 但是,這需要一個(gè)遵從 Java EE 的應(yīng)用服務(wù)器(比如 JBoss),并且可能無法處理 Tomcat。 該層的作用在于針對(duì)不同的數(shù)據(jù)存儲(chǔ)技術(shù),從業(yè)務(wù)邏輯中分離數(shù)據(jù)訪問代碼。 數(shù)據(jù)訪問層還可以作為連接其他系統(tǒng)的集成點(diǎn),可以成為其他 Web 服務(wù)的客戶端。 數(shù)據(jù)存儲(chǔ)層包括數(shù)據(jù)庫(kù)系統(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ù)存儲(chǔ)的統(tǒng)一 API,從而向以用戶為中心的 Web 應(yīng)用程序公開垂直數(shù)據(jù),并自動(dòng)化批量報(bào)告腳本。 什么是REST:結(jié)束語(yǔ)REST 描述了一個(gè)架構(gòu)樣式的互聯(lián)系統(tǒng)(如 Web 應(yīng)用程序)。 REST 約束條件作為一個(gè)整體應(yīng)用時(shí),將生成一個(gè)簡(jiǎn)單、可擴(kuò)展、有效、安全、可靠的架構(gòu)。 由于它簡(jiǎn)便、輕量級(jí)以及通過 HTTP 直接傳輸數(shù)據(jù)的特性,RESTful Web 服務(wù)成為基于 SOAP 服務(wù)的一個(gè)最有前途的替代方案。 用于 web 服務(wù)和動(dòng)態(tài) Web 應(yīng)用程序的多層架構(gòu)可以實(shí)現(xiàn)可重用性、簡(jiǎn)單性、可擴(kuò)展性和組件可響應(yīng)性的清晰分離。 Ajax 和 RESTful Web 服務(wù)本質(zhì)上是互為補(bǔ)充的。
Java微服務(wù)框架因其強(qiáng)大的功能和廣泛應(yīng)用而備受開發(fā)者青睞。以下是一些熱門的微服務(wù)框架概述:
1. Spring Boot:作為微服務(wù)開發(fā)的首選框架,2017年超過64%的開發(fā)者選擇它,得益于其一鍵啟動(dòng)和部署的便捷性,簡(jiǎn)化了分布式系統(tǒng)的基礎(chǔ)設(shè)施建設(shè)。
2. Spring Cloud:這一系列框架集合提供了完整的微服務(wù)架構(gòu)技術(shù)生態(tài)鏈,基于HTTP的RETS服務(wù)構(gòu)建服務(wù)體系。
3. Dubbo:阿里巴巴的開源框架,早于Spring Cloud,專為高并發(fā)業(yè)務(wù)設(shè)計(jì),被眾多大型企業(yè)如阿里、京東等采用。
4. Dropwizard:輕量級(jí)框架,擁有簡(jiǎn)單模型和快速啟動(dòng)特性,但缺乏依賴注入,不過現(xiàn)在支持日志記錄等重要功能。
5. Cricket:專注于快速API開發(fā),小巧且易于擴(kuò)展,無需數(shù)據(jù)庫(kù)連接,適合獨(dú)立微服務(wù)構(gòu)建。
6. Play:兼容多種JVM語(yǔ)言,采用現(xiàn)代無狀態(tài)模型,提供異步功能和豐富的網(wǎng)站擴(kuò)展,包括OpenID和文件上傳。
7. Swagger:提供API開發(fā)的簡(jiǎn)單工具,通過OpenAPI規(guī)范實(shí)現(xiàn)接口描述和測(cè)試,支持跨語(yǔ)言API生成。
8. Helidon:輕量級(jí)的Java框架,支持Servlet核心,采用開發(fā)者熟悉的SE和Java程序員熟悉的MP模型。
9. Restlet:集成眾多服務(wù)和庫(kù),支持多種數(shù)據(jù)格式,且允許瀏覽器測(cè)試API,功能強(qiáng)大且不斷更新。
10. Telepresence:為遠(yuǎn)程微服務(wù)提供本地代理,便于調(diào)試,支持在本地設(shè)置斷點(diǎn)。
11. Jersey:實(shí)現(xiàn)RESTful web服務(wù)的Java API,依賴注解進(jìn)行配置,常與Spring Boot結(jié)合使用。
12. Squash:解決微服務(wù)調(diào)試難題,允許在Kubernetes集群中設(shè)置斷點(diǎn),提供本地IDE體驗(yàn)。
13. Eclipse MicroProfile:從Java EE簡(jiǎn)化而來,用于快速構(gòu)建微服務(wù),每季度發(fā)布新版本以保持更新。
14. WildFly Thorntail:Red Hat的微服務(wù)版本,通過Maven構(gòu)建和配置,提供Uber-JAR部署的便利。
15. Zipkin:記錄微服務(wù)事件的監(jiān)控工具,支持多語(yǔ)言,廣泛集成于其他框架中。
REST(REpresentationStateTransfer)描述了一個(gè)架構(gòu)樣式的網(wǎng)絡(luò)系統(tǒng),比如web應(yīng)用程序。 它首次出現(xiàn)在2000年RoyFielding的博士論文中,他是HTTP規(guī)范的主要編寫者之一。 REST指的是一組架構(gòu)約束條件和原則。 滿足這些約束條件和原則的應(yīng)用程序或設(shè)計(jì)就是RESTful。 Web應(yīng)用程序最重要的REST原則是,客戶端和服務(wù)器之間的交互在請(qǐng)求之間是無狀態(tài)的。 從客戶端到服務(wù)器的每個(gè)請(qǐng)求都必須包含理解請(qǐng)求所必需的信息。 如果服務(wù)器在請(qǐng)求之間的任何時(shí)間點(diǎn)重啟,客戶端不會(huì)得到通知。 此外,無狀態(tài)請(qǐng)求可以由任何可用服務(wù)器回答,這十分適合云計(jì)算之類的環(huán)境。 客戶端可以緩存數(shù)據(jù)以改進(jìn)性能。 在服務(wù)器端,應(yīng)用程序狀態(tài)和功能可以分為各種資源。 資源是一個(gè)有趣的概念實(shí)體,它向客戶端公開。 資源的例子有:應(yīng)用程序?qū)ο蟆?shù)據(jù)庫(kù)記錄、算法等等。 每個(gè)資源都使用URI(UniversalResourceIdentifier)得到一個(gè)惟一的地址。 所有資源都共享統(tǒng)一的界面,以便在客戶端和服務(wù)器之間傳輸狀態(tài)。 使用的是標(biāo)準(zhǔn)的HTTP方法,比如GET、PUT、POST和DELETE。 Hypermedia是應(yīng)用程序狀態(tài)的引擎,資源表示通過超鏈接互聯(lián)。 另一個(gè)重要的REST原則是分層系統(tǒng),這表示組件無法了解它與之交互的中間層以外的組件。 通過將系統(tǒng)知識(shí)限制在單個(gè)層,可以限制整個(gè)系統(tǒng)的復(fù)雜性,促進(jìn)了底層的獨(dú)立性。 當(dāng)REST架構(gòu)的約束條件作為一個(gè)整體應(yīng)用時(shí),將生成一個(gè)可以擴(kuò)展到大量客戶端的應(yīng)用程序。 它還降低了客戶端和服務(wù)器之間的交互延遲。 統(tǒng)一界面簡(jiǎn)化了整個(gè)系統(tǒng)架構(gòu),改進(jìn)了子系統(tǒng)之間交互的可見性。 REST簡(jiǎn)化了客戶端和服務(wù)器的實(shí)現(xiàn)。 RESTful的實(shí)現(xiàn):RESTfulWeb服務(wù)與RPC樣式的Web服務(wù)了解了什么是什么是REST,我們?cè)倏纯碦ESTful的實(shí)現(xiàn)。 最近,使用RPC樣式架構(gòu)構(gòu)建的基于SOAP的Web服務(wù)成為實(shí)現(xiàn)SOA最常用的方法。 RPC樣式的Web服務(wù)客戶端將一個(gè)裝滿數(shù)據(jù)的信封(包括方法和參數(shù)信息)通過HTTP發(fā)送到服務(wù)器。 服務(wù)器打開信封并使用傳入?yún)?shù)執(zhí)行指定的方法。 方法的結(jié)果打包到一個(gè)信封并作為響應(yīng)發(fā)回客戶端。 客戶端收到響應(yīng)并打開信封。 每個(gè)對(duì)象都有自己獨(dú)特的方法以及僅公開一個(gè)URI的RPC樣式Web服務(wù),URI表示單個(gè)端點(diǎn)。 它忽略HTTP的大部分特性且僅支持POST方法。 由于輕量級(jí)以及通過HTTP直接傳輸數(shù)據(jù)的特性,Web服務(wù)的RESTful方法已經(jīng)成為最常見的替代方法。 可以使用各種語(yǔ)言(比如Java程序、Perl、Ruby、Python、PHP和Javascript[包括Ajax])實(shí)現(xiàn)客戶端。 RESTfulWeb服務(wù)通常可以通過自動(dòng)客戶端或代表用戶的應(yīng)用程序訪問。 但是,這種服務(wù)的簡(jiǎn)便性讓用戶能夠與之直接交互,使用它們的Web瀏覽器構(gòu)建一個(gè)GETURL并讀取返回的內(nèi)容。 在REST樣式的Web服務(wù)中,每個(gè)資源都有一個(gè)地址。 資源本身都是方法調(diào)用的目標(biāo),方法列表對(duì)所有資源都是一樣的。 這些方法都是標(biāo)準(zhǔn)方法,包括HTTPGET、POST、PUT、DELETE,還可能包括HEADER和OPTIONS。 在RPC樣式的架構(gòu)中,關(guān)注點(diǎn)在于方法,而在REST樣式的架構(gòu)中,關(guān)注點(diǎn)在于資源--將使用標(biāo)準(zhǔn)方法檢索并操作信息片段(使用表示的形式)。 資源表示形式在表示形式中使用超鏈接互聯(lián)。 LeonardRichardson和SamRuby在他們的著作RESTfulWebServices中引入了術(shù)語(yǔ)REST-RPC混合架構(gòu)。 REST-RPC混合Web服務(wù)不使用信封包裝方法、參數(shù)和數(shù)據(jù),而是直接通過HTTP傳輸數(shù)據(jù),這與REST樣式的Web服務(wù)是類似的。 但是它不使用標(biāo)準(zhǔn)的HTTP方法操作資源。 它在HTTP請(qǐng)求的URI部分存儲(chǔ)方法信息。 好幾個(gè)知名的Web服務(wù),比如Yahoo的FlickrAPI和都使用這種混合架構(gòu)。 RESTful的實(shí)現(xiàn):RESTfulWeb服務(wù)的Java框架有兩個(gè)Java框架可以幫助構(gòu)建RESTfulWeb服務(wù)。 eromeLouvel和DavePawson開發(fā)的Restlet(見參考資料)是輕量級(jí)的。 它實(shí)現(xiàn)針對(duì)各種RESTful系統(tǒng)的資源、表示、連接器和媒體類型之類的概念,包括Web服務(wù)。 在Restlet框架中,客戶端和服務(wù)器都是組件。 組件通過連接器互相通信。 該框架最重要的類是抽象類Uniform及其具體的子類Restlet,該類的子類是專用類,比如Application、Filter、Finder、Router和Route。 這些子類能夠一起處理驗(yàn)證、過濾、安全、數(shù)據(jù)轉(zhuǎn)換以及將傳入請(qǐng)求路由到相應(yīng)資源等操作。 Resource類生成客戶端的表示形式。 JSR-311是SunMicrosystems的規(guī)范,可以為開發(fā)RESTfulWeb服務(wù)定義一組JavaAPI。 Jersey是對(duì)JSR-311的參考實(shí)現(xiàn)。 JSR-311提供一組注釋,相關(guān)類和接口都可以用來將Java對(duì)象作為Web資源展示。 該規(guī)范假定HTTP是底層網(wǎng)絡(luò)協(xié)議。 它使用注釋提供URI和相應(yīng)資源類之間的清晰映射,以及HTTP方法與Java對(duì)象方法之間的映射。 API支持廣泛的HTTP實(shí)體內(nèi)容類型,包括HTML、XML、JSON、GIF、JPG等。 它還將提供所需的插件功能,以允許使用標(biāo)準(zhǔn)方法通過應(yīng)用程序添加其他類型。 RESTful的實(shí)現(xiàn):構(gòu)建RESTfulWeb服務(wù)的多層架構(gòu)RESTfulWeb服務(wù)和動(dòng)態(tài)Web應(yīng)用程序在許多方面都是類似的。 有時(shí)它們提供相同或非常類似的數(shù)據(jù)和函數(shù),盡管客戶端的種類不同。 例如,在線電子商務(wù)分類網(wǎng)站為用戶提供一個(gè)瀏覽器界面,用于搜索、查看和訂購(gòu)產(chǎn)品。 如果還提供Web服務(wù)供公司、零售商甚至個(gè)人能夠自動(dòng)訂購(gòu)產(chǎn)品,它將非常有用。 與大部分動(dòng)態(tài)Web應(yīng)用程序一樣,Web服務(wù)可以從多層架構(gòu)的關(guān)注點(diǎn)分離中受益。 業(yè)務(wù)邏輯和數(shù)據(jù)可以由自動(dòng)客戶端和GUI客戶端共享。 惟一的不同點(diǎn)在于客戶端的本質(zhì)和中間層的表示層。 此外,從數(shù)據(jù)訪問中分離業(yè)務(wù)邏輯可實(shí)現(xiàn)數(shù)據(jù)庫(kù)獨(dú)立性,并為各種類型的數(shù)據(jù)存儲(chǔ)提供插件能力。 圖1展示了自動(dòng)化客戶端,包括Java和各種語(yǔ)言編寫的腳本,這些語(yǔ)言包括Python、Perl、Ruby、PHP或命令行工具,比如curl。 在瀏覽器中運(yùn)行且作為RESTfulWeb服務(wù)消費(fèi)者運(yùn)行的Ajax、Flash、JavaFX、GWT、博客和wiki都屬于此列,因?yàn)樗鼈兌即碛脩粢宰詣?dòng)化樣式運(yùn)行。 自動(dòng)化Web服務(wù)客戶端在Web層向ResourceRequestHandler發(fā)送HTTP響應(yīng)。 客戶端的無狀態(tài)請(qǐng)求在頭部包含方法信息,即POST、GET、PUT和DELETE,這又將映射到ResourceRequestHandler中資源的相應(yīng)操作。 每個(gè)請(qǐng)求都包含所有必需的信息,包括ResourceRequestHandler用來處理請(qǐng)求的憑據(jù)。 從Web服務(wù)客戶端收到請(qǐng)求之后,ResourceRequestHandler從業(yè)務(wù)邏輯層請(qǐng)求服務(wù)。 ResourceRequestHandler確定所有概念性的實(shí)體,系統(tǒng)將這些實(shí)體作為資源公開,并為每個(gè)資源分配一個(gè)惟一的URI。 但是,概念性的實(shí)體在該層是不存在的。 它們存在于業(yè)務(wù)邏輯層。 可以使用Jersey或其他框架(比如Restlet)實(shí)現(xiàn)ResourceRequestHandler,它應(yīng)該是輕量級(jí)的,將大量職責(zé)工作委托給業(yè)務(wù)層。 Ajax和RESTfulWeb服務(wù)本質(zhì)上是互為補(bǔ)充的。 它們都可以利用大量Web技術(shù)和標(biāo)準(zhǔn),比如HTML、JavaScript、瀏覽器對(duì)象、XML/JSON和HTTP。 當(dāng)然也不需要購(gòu)買、安裝或配置任何主要組件來支持Ajax前端和RESTfulWeb服務(wù)之間的交互。 RESTfulWeb服務(wù)為Ajax提供了非常簡(jiǎn)單的API來處理服務(wù)器上資源之間的交互。 圖1中的Web瀏覽器客戶端作為GUI的前端,使用表示層中的BrowserrequestHandler生成的HTML提供顯示功能。 BrowserRequesterHandler可以使用MVC模型(JSF、Struts或Spring都是Java的例子)。 它從瀏覽器接受請(qǐng)求,從業(yè)務(wù)邏輯層請(qǐng)求服務(wù),生成表示并對(duì)瀏覽器做出響應(yīng)。 表示供用戶在瀏覽器中顯示使用。 表示不僅包含內(nèi)容,還包含顯示的屬性,比如HTML和CSS。 業(yè)務(wù)規(guī)則可以集中到業(yè)務(wù)邏輯層,該層充當(dāng)表示層和數(shù)據(jù)訪問層之間的數(shù)據(jù)交換的中間層。 數(shù)據(jù)以域?qū)ο蠡蛑祵?duì)象的形式提供給表示層。 從業(yè)務(wù)邏輯層中解耦BrowserRequestHandler和ResourceRequestHandler有助于促進(jìn)代碼重用,并能實(shí)現(xiàn)靈活和可擴(kuò)展的架構(gòu)。 此外,由于將來可以使用新的REST和MVC框架,實(shí)現(xiàn)它們變得更加容易,無需重寫業(yè)務(wù)邏輯層。 數(shù)據(jù)訪問層提供與數(shù)據(jù)存儲(chǔ)層的交互,可以使用DAO設(shè)計(jì)模式或者對(duì)象-關(guān)系映射解決方案(如Hibernate、OJB或iBATIS)實(shí)現(xiàn)。 作為替代方案,業(yè)務(wù)層和數(shù)據(jù)訪問層中的組件可以實(shí)現(xiàn)為EJB組件,并取得EJB容器的支持,該容器可以為組件生命周期提供便利,管理持久性、事務(wù)和資源配置。 但是,這需要一個(gè)遵從JavaEE的應(yīng)用服務(wù)器(比如JBoss),并且可能無法處理Tomcat。 該層的作用在于針對(duì)不同的數(shù)據(jù)存儲(chǔ)技術(shù),從業(yè)務(wù)邏輯中分離數(shù)據(jù)訪問代碼。 數(shù)據(jù)訪問層還可以作為連接其他系統(tǒng)的集成點(diǎn),可以成為其他Web服務(wù)的客戶端。 數(shù)據(jù)存儲(chǔ)層包括數(shù)據(jù)庫(kù)系統(tǒng)、LDAP服務(wù)器、文件系統(tǒng)和企業(yè)信息系統(tǒng)(包括遺留系統(tǒng)、事務(wù)處理系統(tǒng)和企業(yè)資源規(guī)劃系統(tǒng))。 使用該架構(gòu),您可以開始看到RESTfulWeb服務(wù)的力量,它可以靈活地成為任何企業(yè)數(shù)據(jù)存儲(chǔ)的統(tǒng)一API,從而向以用戶為中心的Web應(yīng)用程序公開垂直數(shù)據(jù),并自動(dòng)化批量報(bào)告腳本。 什么是REST:結(jié)束語(yǔ)REST描述了一個(gè)架構(gòu)樣式的互聯(lián)系統(tǒng)(如Web應(yīng)用程序)。 REST約束條件作為一個(gè)整體應(yīng)用時(shí),將生成一個(gè)簡(jiǎn)單、可擴(kuò)展、有效、安全、可靠的架構(gòu)。 由于它簡(jiǎn)便、輕量級(jí)以及通過HTTP直接傳輸數(shù)據(jù)的特性,RESTfulWeb服務(wù)成為基于SOAP服務(wù)的一個(gè)最有前途的替代方案。 用于web服務(wù)和動(dòng)態(tài)Web應(yīng)用程序的多層架構(gòu)可以實(shí)現(xiàn)可重用性、簡(jiǎn)單性、可擴(kuò)展性和組件可響應(yīng)性的清晰分離。 Ajax和RESTfulWeb服務(wù)本質(zhì)上是互為補(bǔ)充的。
內(nèi)容聲明:
1、本站收錄的內(nèi)容來源于大數(shù)據(jù)收集,版權(quán)歸原網(wǎng)站所有!
2、本站收錄的內(nèi)容若侵害到您的利益,請(qǐng)聯(lián)系我們進(jìn)行刪除處理!
3、本站不接受違法信息,如您發(fā)現(xiàn)違法內(nèi)容,請(qǐng)聯(lián)系我們進(jìn)行舉報(bào)處理!
4、本文地址:http://www.lmxpnzry.com/article/28fbacc868d774d54a89.html,復(fù)制請(qǐng)保留版權(quán)鏈接!
單擊下載按鈕是指單擊頁(yè)面上一個(gè)可點(diǎn)擊的元素,該元素觸發(fā)文件下載操作,當(dāng)用戶單擊此按鈕時(shí),瀏覽器將向服務(wù)器發(fā)送請(qǐng)求,服務(wù)器將響應(yīng)文件下載,該文件通常以ZIP、PDF或其他常見格式提供,如何創(chuàng)建下載按鈕要?jiǎng)?chuàng)建下載按鈕,您可以使用以下HTML代碼,<,buttontype=buttononclick=downloadFile,>,...。
互聯(lián)網(wǎng)資訊 2024-09-28 01:39:52
引言NoSQL數(shù)據(jù)庫(kù)在近十年來已成為技術(shù)行業(yè)的一股主要力量,這些非關(guān)系型數(shù)據(jù)庫(kù)提供了一組獨(dú)特的功能和優(yōu)勢(shì),使應(yīng)用程序開發(fā)人員能夠高效地應(yīng)對(duì)現(xiàn)代應(yīng)用程序不斷增長(zhǎng)的需求,在本文中,我們將探討NoSQL數(shù)據(jù)庫(kù)的革命性作用,并重點(diǎn)介紹它們?cè)诟鞣N行業(yè)中帶來的變革性影響,NoSQL數(shù)據(jù)庫(kù)的興起傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù),如MySQL和Oracle,已成為...。
本站公告 2024-09-26 16:40:08
使用HTML創(chuàng)建交互式元素表單元素,input、textarea、select,按鈕,button、submit,鏈接,a,其他元素,如div、span,可以使用CSS屬性來添加交互性使用JavaScript創(chuàng)建交互式元素事件處理程序,如onclick、onkeydown,DOM,文檔對(duì)象模型,方法和屬性AJAX,異步JavaScri...。
互聯(lián)網(wǎng)資訊 2024-09-24 23:26:04
這是一款DiscuzX的插件,可以將附件存儲(chǔ)到阿里云OSS,功能支持阿里云OSS附件存儲(chǔ)支持附件上傳、刪除、下載支持附件縮略圖生成支持自定義附件存儲(chǔ)路徑支持多附件同時(shí)上傳支持附件分片上傳支持附件斷點(diǎn)續(xù)傳安裝下載插件解壓插件將解壓后的文件上傳到論壇根目錄進(jìn)入論壇后臺(tái),點(diǎn)擊插件管理,找到阿里云OSS附件插件,點(diǎn)擊安裝配置插件參數(shù)配置進(jìn)入論...。
互聯(lián)網(wǎng)資訊 2024-09-23 21:07:27
應(yīng)用程序的經(jīng)驗(yàn)良好的溝通和團(tuán)隊(duì)合作能力通過認(rèn)證計(jì)劃、在線課程和動(dòng)手經(jīng)驗(yàn),可以獲得這些技能和資格,結(jié)論數(shù)據(jù)庫(kù)應(yīng)用開發(fā)對(duì)于數(shù)據(jù)管理和分析至關(guān)重要,為組織提供了獲得洞察力和做出明智決策的能力,了解數(shù)據(jù)庫(kù)應(yīng)用開發(fā)的基礎(chǔ)知識(shí)、好處和工具對(duì)于開發(fā)人員和組織來說至關(guān)重要,以最大限度地利用其數(shù)據(jù)資產(chǎn),...。
本站公告 2024-09-13 07:01:57
在線源代碼平臺(tái)已成為軟件開發(fā)領(lǐng)域不可或缺的一部分,它們?yōu)檐浖こ處熖峁┝艘粋€(gè)共享、協(xié)作和維護(hù)項(xiàng)目代碼的中心化平臺(tái),通過利用在線源代碼平臺(tái),您可以獲得許多好處,例如...。
最新資訊 2024-09-12 10:15:52
一、引言在編程中,我們經(jīng)常需要對(duì)數(shù)字進(jìn)行舍入操作,以獲得更精簡(jiǎn)或更易于處理的數(shù)據(jù),JavaScript中的round,函數(shù)便為此提供了簡(jiǎn)單實(shí)用的方法,二、round函數(shù)的語(yǔ)法round,number,number,要舍入的數(shù)字三、round函數(shù)的工作原理round,函數(shù)的工作原理很簡(jiǎn)單,它將給定的數(shù)字舍入到最接近的整數(shù),如果小數(shù)部...。
最新資訊 2024-09-11 08:45:27
什么是大數(shù)據(jù)數(shù)據(jù)庫(kù),大數(shù)據(jù)數(shù)據(jù)庫(kù)是專門為存儲(chǔ)和管理海量數(shù)據(jù)而設(shè)計(jì)的數(shù)據(jù)庫(kù)管理系統(tǒng),DBMS,這些數(shù)據(jù)庫(kù)通常處理超出傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)系統(tǒng)處理能力的數(shù)據(jù)量、速度和多樣性,大數(shù)據(jù)數(shù)據(jù)庫(kù)通常具有以下特點(diǎn),可擴(kuò)展性,能夠處理從數(shù)十億到數(shù)萬億條記錄的數(shù)據(jù)量高性能,能夠快速處理和查詢海量數(shù)據(jù)靈活性,能夠處理不同格式和結(jié)構(gòu)的數(shù)據(jù),包括非結(jié)構(gòu)化數(shù)據(jù)可...。
互聯(lián)網(wǎng)資訊 2024-09-10 02:42:12
刷新當(dāng)前頁(yè)面是一個(gè)常見的任務(wù),但它通常會(huì)給用戶帶來不流暢的體驗(yàn),例如閃爍的屏幕或丟失的狀態(tài),本文將介紹使用JavaScript優(yōu)雅地重新加載頁(yè)面并提供流暢用戶體驗(yàn)的技術(shù),何時(shí)需要刷新頁(yè)面以下是一些需要刷新頁(yè)面的常見場(chǎng)景,當(dāng)服務(wù)器端數(shù)據(jù)發(fā)生更改時(shí),例如,添加新評(píng)論或更新文章,當(dāng)用戶執(zhí)行操作時(shí),例如單擊按鈕或提交表單當(dāng)出現(xiàn)錯(cuò)誤或處理程序需...。
互聯(lián)網(wǎng)資訊 2024-09-09 14:01:31
前言關(guān)系數(shù)據(jù)庫(kù)是現(xiàn)代數(shù)據(jù)管理系統(tǒng)中不可或缺的一部分,它們廣泛應(yīng)用于各種行業(yè)和領(lǐng)域,從電子商務(wù)到金融再到醫(yī)療保健,為了設(shè)計(jì)和維護(hù)高效且健壯的關(guān)系數(shù)據(jù)庫(kù),了解最佳實(shí)踐和模式優(yōu)化技術(shù)至關(guān)重要,最佳實(shí)踐堅(jiān)持關(guān)系模型,設(shè)計(jì)應(yīng)該遵循關(guān)系模型的基本原則,包括實(shí)體、關(guān)系和屬性概念,最小化冗余,通過適當(dāng)?shù)臍w一化技術(shù)消除數(shù)據(jù)冗余,以減少數(shù)據(jù)不一致和存儲(chǔ)空...。
技術(shù)教程 2024-09-08 20:33:38
前言對(duì)于希望通過自學(xué)掌握J(rèn)ava的個(gè)人來說,這是一個(gè)激動(dòng)人心且有益的旅程,Java是一種用途廣泛且功能強(qiáng)大的編程語(yǔ)言,在各種行業(yè)和領(lǐng)域中有著廣泛的應(yīng)用,通過自學(xué)Java,你可以開辟新的職業(yè)道路,提升你的技能,并解鎖個(gè)人和職業(yè)發(fā)展的新機(jī)遇,入門選擇學(xué)習(xí)資源選擇合適的學(xué)習(xí)資源對(duì)于自學(xué)成功至關(guān)重要,以下是推薦的資源,在線課程,Courser...。
最新資訊 2024-09-06 11:52:20
提供發(fā)票以便客戶跟蹤他們的購(gòu)買情況引言向客戶提供發(fā)票是企業(yè)提供透明度和增強(qiáng)客戶滿意度的重要方式,發(fā)票是記錄客戶購(gòu)買詳細(xì)清單的重要文件,它允許客戶輕松跟蹤他們的購(gòu)買記錄和支出,發(fā)票的優(yōu)點(diǎn)提供發(fā)票給客戶提供了以下好處,透明度,發(fā)票為客戶提供了有關(guān)其購(gòu)買的清晰且詳細(xì)的信息,包括商品或服務(wù)的描述、數(shù)量、單價(jià)和總金額,這有助于增強(qiáng)信任并確保客戶...。
最新資訊 2024-09-06 08:31:19