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