這裡不准備討論REST的細節內容,但是總體上,REST是讓客戶端與服務器段的交互通過發送和接收展示資源的方式來進行,在這裡有必要說明:
Fielding是http協議和apache web server的核心作者之一。舉個例子:
一個http get request可以接收到一個資源
一個http post request可以生成一個資源。
如此描述,對JAVA開發者來講也許過於底層了,事實上絕大多數的J2EE 應用程序,尤其javaserver faces應用程序是不允許REST這樣的風格框架的,所以後面我們會仔細比較JavaServer Faces與REST應用之間的區別。JSR311描述了如何在JAVA中實踐REST的架構風格。
實現JSR311的框架已經有一些了,比如今天要介紹的Jersey. Jersey目前看是比較成熟,在開發中應用最廣泛,而且被oracle提供支持的開源框架。
一,使用 NetBeans JavaServer Faces,來建立一個例子應用程序
這個例子是關於文章投票的系統,一篇文章,需要有文章內容,作者,投票三個實體,實際上就是我們前面說的資源(針對REST)。
需要說明的這裡的文章內容,作者,和投票實體在代碼層面都是映射成類的哦。
在這個測試應用中,我們僅在三個實體上生成一個CRUD(create,read,update,delete)基礎功能,雖然簡單,但是基礎可用。
但是這樣的程序有個比較大的問題:
程序的VIEW層只能使用JavaServer Faces,而REST風格的程序,可以使用多種格式來展示應用資源的狀態信息,例如XML,PDF,JavaScript Object Notation (JSON)等。
二,建立基於REST的客戶端
NetBeans,可以幫助你自動整個建立過程。
1,右鍵你的項目,然後進行如下選擇 New > RESTful Web Services from Entity Classes
2,選中前面所建立好的但個實體
3,對於轉換選擇包 fr.responcia.otn.articleevaluator.rest.converter
對於資源選擇包fr.responcia.otn.articleevaluator.rest.resource
4,選擇Create default REST servlet adaptor in web.xml
NetBeans事實上生成兩組類,一組類用來映射實體類到XML文檔,通過使用JAXB技術。
另一組是資源,每個資源包括了一類實體的所有實例。以方便客戶端的操作和在服務器及客戶端進行交換。
我們可以使用REST的接口來對實體進行操作,在resource包中,你可以通過查看類,可以發現URLS和針對每個實體的顯示層是如何進行
構建的。
因為在前面我們實現了兩個作者的實體實例,所以當你訪問如下地址http://localhost:8080/ArticleEvaluator/resources/authors的時候,你
可以看到如下界面:
你會看到兩個作者的列表信息(圖片省略了),當然你也可以通過如下的地址訪問具體的某一個作者:
http://localhost:8080/ArticleEvaluator/resources/authors/1/
測試REST應用
只使用WEB浏覽器是不能全面測試REST應用的,因為我們還使用了JSON對象,JSON對象被廣泛的應用到REST的應用中。
JSON比純粹的XML格式更好,可以被JS腳本訪問。可以結合jquery使用。
測試REST應用,可以使用兩種方法來進行:
1,使用Jsersey提供的測試框架
2,使用底層的庫,例如Apache Commons HttpClient ,來手工處理HTTP Request.
通常第一種方法,比較有效率,因為是框架,但是想知道更多的細節則需要使用方法2,你可以到 http://hc.apache.org/httpclient-3.x/ 下載
HttpClient.
測試方法通常包括三個:
createArticle() --生成Article
testResourceAsXml()--測試XML的格式
testResourceAsJson()
比較下 JavaServer Faces and a REST 兩中不同類型的客戶端:
1,兩種客戶端都可以使用NetBeans幫助生成。
2,兩種前端都使用了實體對象的概念。
3,兩種前端可以同時使用,不會有什麼沖突。
下面是比較有區別的地方:
1,JSF的應用狀態保存在了服務器端,用戶的操作狀態都保存到了HttpSession 而REST則是把狀態保存到了客戶端。
使用 REST URLs 來跟資源進行交互,這也是為什麼JSF比較容易編碼的原因。
2,JSF提供了豐富的用戶界面組件,如果你的應用中需要界面,那麼使用JSF則比較有效率,後者沒有界面組件,只能結合JQUERY等來使用。
3,REST擁有better-looking URLs這樣可以被用戶進行書簽收藏,也方便搜索引擎收錄。
4,REST提供了對同一資源進行多格式顯示的可能,例如XML,PDF,JDON等。