Restful是一種架構style,目前常說的有restful web service, resultful http。現在熱搜榜的微服務,大多數會採用Restful方式。 JAX-RS 作為一個Restful 風格WebService規範,目前已發展到了2.0版本,目前比較常用的兩個版本是JAX- ...
Restful是一種架構style,目前常說的有restful web service, resultful http。現在熱搜榜的微服務,大多數會採用Restful方式。
JAX-RS 作為一個Restful 風格WebService規範,目前已發展到了2.0版本,目前比較常用的兩個版本是JAX-RS1.1(jsr-311)、 JAX-RS2.0(jsr-339) 。
規範地址:https://jax-rs-spec.java.net/ 。現在已有很多實現:
Jersey:是jax-rs的標準實現,對規範的支持自然是最快的(JAX-RS1.1、 JAX-RS2.0)。它支持多種Servlet容器、並可以與Grizzly、Netty等結合使用,性能也是很不錯的。網上有人說它是一個參考實現,但它真的不僅僅是一個參考實現而已,Kafka Connect採用了它。 支持與Spring 集成。
https://jersey.java.net/
CXF:apache下的一個開源的services框架,支持多種協議( SOAP, XML/HTTP, RESTful HTTP, or CORBA),同時也支持多種傳輸協議:(HTTP, JMS or JBI)。
支持的Java規範(jsr)有:JAX-WS、JAX-RS、SAAJ 。 對於JAX-RS,支持目前JAX-RS1.1、 JAX-RS2.0。 支持與Spring集成。
http://cxf.apache.org/docs/restful-services.html
http://cxf.apache.org/docs/overview.html
RestEasy:它是JBoss社區的一個開源項目,已支持2.0規範。據說是性能最好的,我沒有測試過。
http://docs.jboss.org/resteasy/docs/3.1.1.Final/userguide/html/index.html
Restlet:支持JAX-RS,支持與Spring集成。
https://restlet.com/open-source/features
這裡有一篇網友的性能測試博客:http://www.tuicool.com/articles/UziAZ3u
這裡是一篇網友的8個restful框架對比的博客:http://developer.51cto.com/art/201511/497863.htm
題外話說了這麼多,言歸正傳,既然他們都實現了jax-rs規範,那麼我們只需要學習了標準規範,並使用規範中的API來編程,那麼我們的程式就可以與這些實現結合使用。
為了快速學習規範:我們可以參考: 1)標準規範 2)入門教程:Java Restful WebService 實戰 3) API Docs
下麵提供前兩者的下載鏈接:
鏈接:http://pan.baidu.com/s/1kVkb7CF 密碼:vrln
Jersey2.x用戶指南:https://github.com/waylau/Jersey-2.x-User-Guide
下麵總結瞭如何學習JAX-RS,進行Restful WebService編程:
第一步: 瞭解規範中各個組件、API處理流程
JAX-RS中組件:
1)Resource :代表資源,用於在接收到資源請求後,調用相應的方法處理。
資源分類:Resource、SubResouce。如何編寫一個Resource Class、Resource Method?如何定位一個Resource?Resource的生命周期如何?等等問題都將在jsr手冊里提到。
2)AOP:包括Filter、Interceptor。用於在Client、Container中讀寫請求之前做一些處理。
3)Provider:Provider提供某種東西的。有下列Provider:
MessageBodyReader:從InputStream中讀取數據轉換成Java對象。也就是常說的反序列化。
MessageBodyWriter:把Java對象寫到OutputStream中,也就是常說的序列化。
ExceptionMapper:把指定的Exception映射到一個Response對象。
ContextResolver:用於解析Resource中需要用的上下文。參見:@Context
這些介面的實現,註冊到JAX-RS容器里,通常有兩種方法:1)使用@Provider讓容器自動掃描,2)通過編程的方式註冊。
4)Client:發起請求,處理響應。
每一種JAX-RS實現都要遵循的處理流程:
第二步:結合DI容器,並採用分層思想(Resource、Service、DAO)進行業務系統編寫。
目前流行的DI容器有:Spring、Guice、HK2等等。
第三步:和其他容器結合,部署項目。
譬如說Servlet容器、Grizzly等。