java rest jax-rs 漫談

rest是什麼

REST是英文RepresentationalState Transfer 的縮寫,有中文翻譯爲「具象狀態傳輸」。REST 這個術語是由 RoyFielding 在他的博士論文《Architectural Styles and the Design ofNetwork-based Software Architectures 》中提出的。REST並不是標準,而是一種開發 Web 應用的架構風格,能夠將其理解爲一種設計模式。REST 基於 HTTP,URI,以及 XML 這些現有的普遍流行的協議和標準,伴隨着 REST,HTTP 協議獲得了更加正確的使用。
相較於基於 SOAP 和 WSDL 的 Web 服務,REST 模式提供了更爲簡潔的實現方案。目前,愈來愈多的 Web 服務開始採用 REST 風格設計和實現,真實世界中比較著名的 REST 服務包括:Google AJAX 搜索 API、Amazon Simple Storage Service (AmazonS3) 等。

基於 REST 的 Web 服務遵循一些基本的設計原則:

1)系統中的每個對象或是資源均可以經過一個惟一的 URI 來進行尋址,URI 的結構應該簡單、可預測且易於理解,好比定義目錄結構式的 URI。
2)以遵循RFC-2616 所定義的協議的方式顯式地使用 HTTP 方法,創建建立、檢索、更新和刪除(CRUD:Create, Retrieve, Update and Delete)操做與 HTTP 方法之間的一對一映射:
若要建立資源,應該使用 POST方法, URI : xxx/book(在服務器端新建圖書信息,需提供該圖書全部信息)
若要檢索某個資源,應該使用 GET 方法, URI:xxx/book/{ID} (從服務器端得到某圖書信息)
若要更改資源狀態或對其進行更新,應該使用 PUT 方法,URI:xxx/book/{ID}(在服務器端更新某已存在的圖書信息,需提供更新的內容)
若要刪除某個資源,應該使用 DELETE 方法, URI :xxx/book/{ID} (從服務器端刪除某圖書信息)
URI 所訪問的每一個資源均可以使用不一樣的形式加以表示(好比 XML 或者 JSON),具體的表現形式取決於訪問資源的客戶端,客戶端與服務提供者使用一種內容協商的機制(請求頭與 MIME 類型)來選擇合適的數據格式,最小化彼此之間的數據耦合。
 

jax-rs是什麼

個人理解

就是基於上面說的那些rest的定義也好,設計原則也好,java本身也想讓使用者按照這樣的風格去使用,因此人家本身定義了一套統一的規範,可讓使用者更加方便的來實現上面的這些個各類好處。大致上就是 人家提供了一些列的標註,你本身有個pojo類,吧這些標註都標註上,而後別人一看就知道訪問路徑,返回信息,參數信息等都是什麼, 可是要想將別人的請求映射到這些個方法裏並執行並返回,仍是須要本身去實現的,由此就產生了不少rest框架,這些框架就是按照人家的這個規範來實現的。

下面是比較好的摘抄。

Java EE 6 引入了對 JSR-311 的支持。JSR-311(JAX-RS:JavaAPI for RESTful Web Services)旨在定義一個統一的規範,使得 Java 程序員可使用一套固定的接口來開發 REST 應用,避免了依賴於第三方框架。同時,JAX-RS 使用 POJO 編程模型和基於標註的配置,並集成了JAXB,從而能夠有效縮短 REST 應用的開發週期。
JAX-RS是一套用java實現REST服務的規範,提供了一些標註將一個資源類,一個POJOJava類,封裝爲Web資源. 這些標註包括如下:
@Path:標註資源類或方法的相對路徑。
@GET,@PUT,@POST,@DELETE:標註方法是用的HTTP請求的類型。
@Produces:標註返回的MIME媒體類型。
@Consumes:標註可接受請求的MIME媒體類型。
@PathParam,@QueryParam,@HeaderParam,@CookieParam,@MatrixParam,@FormParam:分別標註方法的參數來自於HTTP請求的不一樣位置,例如@PathParam來自於URL的路徑,@QueryParam來自於URL的查詢參數,@HeaderParam來自於HTTP請求的頭信息,@CookieParam來自於HTTP請求的Cookie。
更通俗些說若是你用java寫了一套框架,當開發者本身寫的JAVA類使用了JAX-RS定義的這些註解標註過,而後經過你寫的這套框架就能夠將有這些JAX-RS標註的類發佈成web資源,供其餘客戶端程序去調用。那麼你寫的這套框架就是一套RestFul Web Service框架,就是JAX-RS規範的實現者之一,是JAX-RS標準定義的這些標註的解釋執行者。
 

jax-rs實現框架 resteasy

resteasy簡介

RESTEasy是JBoss的一個開源項目,提供一套完整的框架幫助開發人員構建RESTful Web Service和RESTful Java應用程序。它是JAX-RS 2.0規範的一個完整實現並經過JCP認證,經過Http協議對外提供基於Java API的 RestFul Web Service。
RestEasy能夠運行在任何Servlet容器中,做爲JBoss的官方實現它能夠更好的和Jboss服務器緊密融合從而提供更好的用戶體驗。
做爲JAX-RS的標準實現,RestEasy還具備如下亮點特性:
1)不須要配置文件,只要把JARs文件放到類路徑裏面,添加 @Path等標註就能夠了
2)徹底的把 RESTEeasy 配置做爲Seam 組件來看待
3)HTTP 請求由Seam來提供,不須要一個額外的Servlet
4)Resources 和providers能夠做爲Seam components (JavaBean or EJB),具備全面的Seaminjection,lifecycle, interception, 等功能支持
5)支持在客戶端與服務器端自動實現GZIP解壓縮
6)支持異步請求處理
7)支持多種數據傳輸格式: XML, JSON, YAML, Fastinfoset, Multipart, XOP, Atom
……
 
 

resteasy使用方法

大致使用方法就三部,首先,下載相應的框架jar包,而後,按照jax-rs規範編寫本身的service類,最後,在webxml中配置resteasy的兩個類便可。配置好了後,項目啓動的時候,resteasy就會將你寫的service類加載初始化好,而且攔截對應的路徑,按照你的service類jax-rs規範的路徑匹配,尋找對應方法,而且經過反射來執行,並將返回值返回。相似下圖
 

 

 

resteasy原理概述

簡單查閱了網絡的源碼分析和本身的簡單查看,大致上resteasy的工做原理分兩步,正好也就配置兩個類,
項目監聽器ResteasyBootstrap
他主要作的工做就是,在項目啓動的時候,執行本身的方法,將resteasy框架的各類本身的組件都給初始化起來,其中就會將你在web.xml中配置的(或者其餘方法配置的)services類給加載到框架中,解析包裝一下,以便後面使用。
請求分發 HttpServletDispatcher
這個分發器就將過來的請求,進行解析,而且經過第一步加載進來的service的信息,找到匹配的包裝類,找到對應的方法,經過反射就直接執行了,並將執行結果返回回去。
resteasy好像還有另一種配置方法,可是無論咋說,確定都是這麼些個工做,先加載,後使用。
 

dubbox使用resteasy

最近在看dubbox的時候,看到dubbox在dubbo的基礎上加上了rest風格的服務實現,jax-rs規範實現框架就是用的resteasy,看了下配置rest的時候,也得在web.xml中配置以下

 

查看裏面的源碼就知道,裏面也封裝有jboss的那個原聲resteasy實現方式。
相關文章
相關標籤/搜索