天天看點

JAX-RS -- Java API for RESTful Web Services

Java EE 6 引入了對 JSR-311 的支援。JSR-311(JAX-RS:Java API for RESTful Web Services)旨在定義一個統一的規範,使得 Java 程式員可以使用一套固定的接口來開發 REST 應用,避免了依賴于第三方架構。同時,JAX-RS 使用 POJO 程式設計模型和基于标注的配置,并內建了 JAXB,進而可以有效縮短 REST 應用的開發周期。

JAX-RS 的具體實作由第三方提供,例如 Sun 的參考實作 Jersey、Apache 的 CXF 、Axis2 以及 JBoss 的 RESTEasy。

  JAX-RS提供了一些标注将一個資源類,一個POJOJava類,封裝為Web資源。标注包括:

  • @Path,注釋被用來描述根資源、子資源方法或子資源的位置。

    value

     值可以包含文本字元、變量或具有定制正規表達式的變量。清單 6 的例子展示了 

    @Path

     注釋的主要應用。
  • @GET,@PUT,@POST,@DELETE,标注方法是用的HTTP請求的類型.您可以使用它們來綁定根資源或子資源内的 Java 方法與 HTTP 請求方法。HTTP GET 請求被映射到由 @GET 注釋的方法;HTTP POST 請求被映射到由 @POST 注釋的方法,以此類推。使用者可能還需要通過使用 

    @HttpMethod

     注釋定義其自己的定制 HTTP 請求方法訓示符。
  • @Produces,注釋代表的是一個資源可以傳回的 MIME 類型。這些注釋均可在資源、資源方法、子資源方法、子資源定位器或子資源内找到。
  • @Consumes,注釋代表的是一個資源可以接受的 MIME 類型。
  • @PathParam,@QueryParam,@HeaderParam,@CookieParam,@MatrixParam,@FormParam,分别标注方法的參數來自于HTTP請求的不同位置,例如@PathParam來自于URL的路徑,@QueryParam來自于URL的查詢參數,@HeaderParam來自于HTTP請求的頭資訊,@CookieParam來自于HTTP請求的Cookie。

在 JAX-RS 規範之前,已經有 Restlet 和 RestEasy 之類的架構,可以幫助您實作 RESTful Web 服務,但是它們不夠直覺。

1)Jersey 是 JAX-RS 的參考實作,它包含三個主要部分。

          核心伺服器(Core Server):通過提供 JSR 311 中标準化的注釋和 API 标準化,您可以用直覺的方式 開發 RESTful Web 服務。

          核心用戶端(Core Client):Jersey 用戶端 API 幫助您與 REST 服務輕松通信。

          內建(Integration):Jersey 還提供可以輕松內建 Spring、Guice、Apache Abdera 的庫。

       2) CXF:Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,現在已經正式更名為 Apache CXF 了,以下簡稱為 CXF。CXF 繼承了 Celtix 和 XFire 兩大開源項目的精華,提供了對 JAX-WS 全面的支援,并且提供了多種 Binding 、DataBinding、Transport 以及各種 Format 的支援,并且可以根據實際項目的需要,采用代碼優先(Code First)或者 WSDL 優先(WSDL First)來輕松地實作 Web Services 的釋出和使用。目前它仍隻是 Apache 的一個孵化項目。

Apache CXF 是一個開源的 Services 架構,CXF 幫助您利用 Frontend 程式設計 API 來建構和開發 Services ,像 JAX-WS 。這些 Services 可以支援多種協定,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在多種傳輸協定上運作,

 功能特性

CXF 包含了大量的功能特性,但是主要集中在以下幾個方面:

  1. 支援 Web Services 标準:CXF 支援多種 Web Services 标準,包含 SOAP、Basic Profile、WS-Addressing、WS-Policy、WS-ReliableMessaging 和 WS-Security。
  2. Frontends:CXF 支援多種“Frontend”程式設計模型,CXF 實作了 JAX-WS API (遵循 JAX-WS 2.0 TCK 版本),它也包含一個“simple frontend”允許用戶端和 EndPoint 的建立,而不需要 Annotation 注解。CXF 既支援 WSDL 優先開發,也支援從 Java 的代碼優先開發模式。
  3. 容易使用: CXF 設計得更加直覺與容易使用。有大量簡單的 API 用來快速地建構代碼優先的 Services,各種 Maven 的插件也使內建更加容易,支援 JAX-WS API ,支援 Spring 2.0 更加簡化的 XML 配置方式,等等。
  4. 支援二進制和遺留協定:CXF 的設計是一種可插撥的架構,既可以支援 XML ,也可以支援非 XML 的類型綁定,比如:JSON 和 CORBA。

繼續閱讀