Rest應用及其常規實現

##前言
知其然也要知其所以然,寫代碼更是如此。在本週開發過程中,很多開發基本上都是搬磚,同事實現過的功能自己再實現一邊,即使是新功能自己也可以根據官方參考文檔實現新的功能。飄飄然後必敗:一直使用Spring框架進行Rest應用開發,第一次看到公司代碼裏面的javax.ws.rs竟然猜測是walle自己開發的一套註解。。。基於錯誤的思想,在開發新的文件上傳功能是遇到了困難。特總結rest應用及其實現-- 在我遇到未知不知所措時,師兄一頓操作帥呆了我:先進行服務器登陸查看錯誤日誌,發現沒有。。。直接在線debug,查看註解是什麼技術進行支持(glass fish 和javax.ws.rs)定位後查看除了都有哪些註解可以用,不能確定的情況下 包名 + 錯誤 直接定位到官方教程。
##REST 簡介
REST 表徵狀態轉移(Representational State Transfer)
SOAP:簡單對象訪問協議(Simple Object Access Protocol)
REST 是英文 Representational State Transfer 的縮寫,有中文翻譯爲“具象狀態傳輸”。REST 這個術語是由 Roy Fielding 在他的博士論文 《 Architectural Styles and the Design of Network-based Software Architectures 》中提出的。REST 並非標準,而是一種開發 Web 應用的架構風格,可以將其理解爲一種設計模式。REST 基於 HTTP,URI,以及 XML 這些現有的廣泛流行的協議和標準,伴隨着 REST,HTTP 協議得到了更加正確的使用。

相較於基於SOAP 和 WSDLWeb 服務,REST 模式提供了更爲簡潔的實現方案。目前,越來越多的 Web 服務開始採用 REST 風格設計和實現,JAX-RS 定義的 API 位於 javax.ws.rs 包中。JAX-RS 的具體實現由第三方提供,例如 Sun 的參考實現 Jersey、Apache 的 CXF 以及 JBoss 的 RESTEasy。

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 中涉及 Resource 方法參數的標註包括:@PathParam、@MatrixParam、@QueryParam、@FormParam、@HeaderParam、@CookieParam、@DefaultValue 和 @Encoded。這其中最常用的是 @PathParam,它用於將 @Path 中的模板變量映射到方法參數,模板變量支持使用正則表達式,變量名與正則表達式之間用分號分隔。例如對 清單 1中所示的 BookkeepingService 類,如果使用 Get 方法請求資源”/person/jeffyin”,則 readPersonByName 方法將被調用,方法參數 name 被賦值爲”jeffyin”;而如果使用 Get 方法請求資源”/person/123”,則 readPerson 方法將被調用,方法參數 id 被賦值爲 123。要了解如何使用其它的參數標註 , 請參考 JAX-RS API。

JAX-RS 規定 Resource 方法中只允許有一個參數沒有打上任何的參數標註,該參數稱爲實體參數,用於映射請求體。eg:

    @POST
    @Path("queryList")
    public void queryList(JSONObject param) {

標註包括:

  • @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。

##JAX-RS的實現
Apache CXF, 開源的Web服務框架。
Jersey, 由Sun提供的JAX-RS的參考實現。
RESTEasy, JBoss的實現。
Restlet, 由Jerome Louvel和Dave Pawson開發,是最早的REST框架,先於JAX-RS出現。
Apache Wink, 一個Apache軟件基金會孵化器中的項目,其服務模塊實現JAX-RS規範

實現的對比

附錄:

Spring MVC 與 JAX-RS 比較與分析

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章