空間站

          北極心空

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            15 Posts :: 393 Stories :: 160 Comments :: 0 Trackbacks
          http://hi.baidu.com/zeorliu/blog/item/11147c27cfe03806918f9d5a.html

           

          http://www.aiz8.cn/html/ROR/News/2007-8-20/ZhuanFang-Restlet-KuangJiaShouXiKaiFaZhe-Jrome-Louvel.html 專訪Restlet框架首席開發者Jérome Louvel 發布日期:2007-8-20 0:17:03 來源:ruby-lang.org.cn 作者:Stefan Tilkov譯者 宋瑋

          最近Restlet框架發布了它的1.0版。JéromeLouve是Java框架Restlet的領導開發者,InfoQ的編輯Stefan Tikov有機會和JéromeLouvel進行了一次對話,本次談話的主題討論了Restlet存在的原因、在Java Web服務框架中的REST支持、Ruby onRails、對JSR 311的期望以及Restlet的路線圖。
          InfoQ:你能給我們簡單地介紹下Restlet的目標嗎?
          Jérome Louvel(以下簡稱JL):Restlet是一個Java下的輕量級REST框架。通過擁抱REST(REST是一種Web架構風格)它模糊了Web站點和Web服務之間的界限,從而幫助開發人員構建Web應用。每一個主要的REST概念(REST concept)都有一個對應的Java類。你的REST化的Web設計和你的代碼之間的映射是非常簡單直接的。Restlet是一個以CDDL或GPL發布的開源項目。該項目包含一個Restlet API,一個引用實現(Noelios Restlet引擎)以及一套擴展
          InfoQ:你為什么會覺得有必要創建另一種框架?難道Servlet API還不夠好用嗎?
          JL:Servlet AIP在1998年發布,從那個時候起它的核心設計一直沒有很大的變化。它是JavaEE的眾多API中最成功的一個,但是它的幾個設計缺陷和一些限制損害了它。舉個例子,URI模式和它的處理者(handler)之間的映射是受限制的,而且其配置都集中在一個配置文件中。還有,他把socket流的控制直接交給了應用系統開發人員,Servlet容器阻礙了我們充分使用NIO特性對IO操作進行優化。最后,他對一些HTTP特性,例如緩存、內容協商以及內容壓縮支持的不好。這對開發人員來說是件痛苦的事,因為這阻礙了他們將精力集中在應用系統相關的代碼上。另一個主要問題是,Java EEStack中新的HTTP客戶端API的缺少。JDK的HttpURLConnection類很難用,而且許多HTTP特性都不支持,比如為內容協商而表達的客戶端選擇等。人們經常需要依賴第三方HTTP客戶端API突破這些限制。但是,HttpURLConnection不支持NIO。2005年,我看到了超越這些限制的機會:在REST原則下設計一個新的API。第一次,我們有了統一Web應用客戶端和服務器端的機會,這個API完全支持NIO并能讓開發人員編程控制Web容器、連接器(connector)等,而且不需要經常性的依賴XML描述符就能部署應用系統
          InfoQ:你怎么看在別的框架中對REST的支持(例如Axis2,或者CXF/XFire)?
          JL:我想這些支持非常有效,但是作用非常有限。我的主要觀點是設計這些項目是為了符合WS-*/SOAP Stack,它們與REST世界并不非常契合。在REST世界里,定義了一個全新的范例:面向資源的設計,而非通過遠程方法調用這樣的范例。例如Axis2僅僅支持GET和POST兩種HTTP方法,它需要遠程方法的傳遞需要一個URI參數。這在REST中式不允許的,這種做法也不能被稱之為REST化。XFire1.2不支持REST,但是它發布了一個項目用于將POJO映射到REST化的Web服務。這有點類似最近發布的JSR-311,此JSR試圖基于一套annotation和助手類標準化這種映射。
          InfoQ:你是JSR 311專家組的成員,能否對JSR 311做一下展望?
          JL:我期望它能在REST資源和POJO領域對象之間實現一個完好的映射。就像JPA在關系數據庫和POJO之間實現了很好的映射那樣,我們也希望這個JSR能做到像JPA那樣。我希望以annotation為中心的API能夠相當符合(complimentary)Restlet API,后者已經是一個將REST資源映射到POJO的以類為中心的API了。
          這些annotation也能被像Axis2和XFire這樣的項目實現,我認為這個JSR給了REST和WS-*陣營一個達成和解的機會
          InfoQ:你能告訴我們一些基于Restlet的項目嗎?
          JL:有幾個不同規模的組織已經部署并應用了這樣的應用系統,包括Overstock.com,這是一個在線購物方面的Internet領導者。Restlet項目也被作為支持技術用在覆蓋REST構架風格的不同軟件構架類別中。例如在加州Irvine大學,以及在INSA Rouen工程學院的使用。我們自己的網站也是用Restlet引擎構建的。考慮到我們受到拒絕服務(denial of service)的攻擊量,我們對我們系統的可伸縮性很自信。最近我們還發布了一個公用基準以證明了其性能品質。我們與流行的Servlet容器處在同一水平線上,而且有望在下一個加入完全的NIO優化的連接器(基于Glassfish的Grizzly NIO框架)的版本中比后者表現更為優異。
          InfoQ:在構建REST化的應用系統中,能否比較一下Java和其他語言有何不同?
          JL:流行的REST化技術,例如Rails或者Django這些技術的經驗告訴我們,Java/Restlet這樣的技術在支持REST化的應用中會有更好更高的性能表現。Rails和Django開始的設計并沒有考慮到REST,REST的這些概念只是在后來被加進去的。相比Restlet,這導致了很多做作的(contrived)代碼。以Django為例,它并不天然支持在URI和資源之間映射的URI模板。而Rails強迫在關系數據庫和對數據的CRUD操作間使用一種不自然的映射,REST/HTTP方法導致一種令人不滿意的結果:開發人員不得不在各種限制下工作,或者采用自己的面向資源的設計去迎合Rails。而Restlet不強迫你使用任何持久化技術,它讓你自由的定義你的資源及其特定的表現形式(representation),以及它們怎么被映射到你的領域對象或你的數據庫
          InfoQ:你能更詳細的解釋下你剛才對Rails的批評嗎? 你認為它的CRUD映射什么地方不夠自然?
          JL:除了GET和DETLET這樣的HTTP方法可以很好的映射到SQL的SELECT和DELETE外,我還發現Rails將HTTP的POST方法用來進行創建行為,這很不幸。在REST中,對于創建行為最好的方法是使用PUT,它也可以用于更新。PUT比POST優越的地方是如果操作行為失敗了,它可以很安全的重復操作,而POST不行。還有,資源列表是基于表名和行記錄的數字型id映射的,在實踐中這并不總是可行的。你不想失去對你的URI的控制,而URI既是應用系統用戶界面的一部分,又是REST最基本的概念之一。在Restlet中,我們并不對你的URI強加任何限制,你可以自由的使用任一持久化技術(例如JPA的annotation化POJO,純JDBC調用,對象數據庫等等)在你的資源和表現形式(representation)之間進行映射。我對Rails的另一個小小的批評是,Rails鼓勵使用笨拙的“;edit”后綴訪問一個資源的編輯Web頁面。這有點誤導,REST并不鼓勵使用URI參數的非一致方法,應該使用分隔的Web表單資源,這樣瀏覽器可以使用GET、POST或者PUT方法。
          InfoQ:你好像在Restlet上花了不少時間。這個業余項目占用了你多少時間,你的公司期望能從這個項目中得到多大的商業成就?
          JL:從開始這個項目就不是作為一個業余產品啟動的。當我構建另一個很重要的私人項目是我就感覺到了對它的需要。我相信專業的開源項目,也希望Noelios Consulting能提供的專業服務(如支持計劃,顧問服務)能讓我們繼續投入更多的精力。
          InfoQ:第一版發布之后的路線圖是什么?
          JL:除了維護1.0版修改bug外,我們還將很快啟動1.1版。一些我們曾想過的對WAR包(不再需要XML描述符)的增強將被加進來。用戶可以選擇通過一個XML描述符配置Restlet組件(可移植的應用系統和虛擬主機容器)從而簡化管理員的工作。我們還有幾個連接器原型要實現,一個是基于GrizzlyNIO框架的HTTP服務器連接器,它將帶來更多的可伸縮性和響應(responsiveness)。另外兩個HTTP連接器是基于JXTA的虛擬socket(一個客戶機和一個服務器)。我們還想更深入的支持HTTP特性,例如內容范圍(content range),Digest和WSSE授權。我們還計劃在2008年將Restlet API提交給JCP。這有利于逐漸替代Servlet API。
          InfoQ:謝謝你抽出時間接受我們的采訪。
          查看原文鏈接:Interview: Jérome Louvel about Restlet 作者簡介:Jérome Louvel是一位軟件架構師,它是Noelios Consulting公司的創始人。在軟件版本(Software edition)和咨詢方面有超過8年的工作經驗,它常年工作在歐洲和北美洲。他對Java、REST、語義網以及商業過程集成有濃厚的興趣。

          http://www.matrix.org.cn/resource/article/2007-11-30/1312be72-9f14-11dc-bd16-451eadcf4db4.html
          Restlet指南[Matrix社區試讀版] cleverpig 發表于 2007-11-30 15:15:48
          作者:cleverpig     來源:Matrix 相關資源:http://www.restlet.org/documentation/1.0/tutorial     http://www.restlet.org/about/introduction
          摘要:當復雜核心化模式日趨強大之時,面向對象設計范例已經不總是Web開發中的最佳選擇,Java開發者需要認識到這一點,并且在開發新的Web服務端或是 AJAX Web客戶端時開始思考更加RESTfully的設計。Restlet這個開源項目為那些要采用REST結構體系來構建應用程序的Java開發者提供了一個具體的解決方案。朋友們,下面就讓我們開始Restlet探索之旅吧! 工具箱
          關于本指南
          本指南的翻譯工作經過了Restlet社區的官方授權,cleverpig作為貢獻者完成了本文的翻譯和整理工作。在此發布Matrix社區試讀版的目的是為了讓更多的技術愛好者閱讀并提出翻譯中的不足之處,以提高本指南的質量,以期修改后正式發布。
          Servlet的限制: 在2003年末,Jetty Web容器的作者、Servlet規范的貢獻者:Greg Wilkins在其博客上對Servlet的問題進行了如下總計:
              * 沒有對協議與應用之間的關系進行清洗的劃分
              * 由于在設計Servlet時存在對阻塞IO的假設,因此不能充分利用非阻塞NIO機制
              * 所有的Servlet Web容器對于某些應用來講是過度設計的。

          他提出構思新的API規范,使其能夠真實地脫離協議,并定義能夠暴露內容和元數據的contentlets。這些想法就是Restlet項目創建的靈感源泉。在之后的文章中,Greg Wilkins解釋了為什么當前Servlet API限制非阻塞NIO API得到高效使用的詳細理由:這種傳統的用法針對每個HTTP請求都創建獨立的線程進行處理。并提出了他對下一代Servlet技術的設想。
          另一個主要問題就是Servlet API鼓勵應用開發者在應用或者用戶會話級別直接將session狀態保存于內存中,盡管這看上去不錯,但它造成了Servlet容器擴展性和高可用性的主要問題。為了克服這些問題,就必須實現復雜的負載均衡、session復制、持久化機制。這導致了可擴展性必然成為災難。
          Restlet簡介——當復雜核心化模式日趨強大之時,面向對象設計范例已經不總是Web開發中的最佳選擇,Java開發者需要認識到這一點,并且在開發新的Web服務端或是AJAX Web客戶端時開始思考更加RESTfully的設計。Restlet這個開源項目為那些要采用REST結構體系來構建應用程序的Java開發者提供了一個具體的解決方案。它的非常簡單易用的功能和RESTfully的Web框架,這使其成為了Web2.0開發中的又一利器。好吧,朋友們,下面就讓我們開始Restlet探索之旅吧!

          image

          image

          評論:目前 Restlet 都是建在 Asyncweb, Jetty, Simple 等 webserver 之上, 如果有建在 Grizzly 上的會更好看. 至少希望看到有關的比較. 另外, Restlet 提出的概念和 Grizzly framework 現在所做的都很類似, 特別是 Glassfish V3 版本中提出 Grizzlet 的概念.

          http://www.matrix.org.cn/resource/article/2008-03-04/990c1fb3-e9d0-11dc-91da-b599c3ba16ef.html
          Restlet之AJAX實踐
          摘要:在下面的實踐性指南中,我將以一個簡單的“微型blog”(microblog)為例詳細說明在Restlet中如何使用AJAX技術。。。 工具箱。在下面的實踐性指南中,我將以一個簡單的“微型blog”(microblog)為例詳細說明在Restlet中如何使用AJAX技術。預備知識:在編寫代碼之前,讓我們先來回顧一下有關restlet的知識(如果你不曾了解或者忘記的話):
                   * RESTful是什么?
                   * 了解Restlet
                   * 如何使用Restlet?        
                   * Restlet指南
                   * 如何使用db4o簡化持久化數據存儲?
                   * 如何在Prototype.js中使用JSON?

          微型blog結構:
               * Web client:web瀏覽器通過JSON協議以RESTful的方式((GET/PUT/POST/DELETE))調用后臺服務;
               * 服務器端:利用db4o作為數據存儲服務提供者,并通過Restlet將數據暴露給web服務;
               * 服務端處理過程:在Restlet中,Application接收到Request后將其分配給相應的Router,Router尋找相匹配的Resource類并實例化匹配好的Resource類、將Request傳送給它,Resource類對象處理Request并返回相應的表達法(representation)。
          下載源代碼:microblog_sourcecode (application/x-zip, 2.3 MB, info)
          資源鏈接:           * Router           * Application           * Resource           * db4o

          posted on 2008-11-28 14:44 蘆葦 閱讀(1901) 評論(0)  編輯  收藏 所屬分類: JAVA其他
          主站蜘蛛池模板: 平顶山市| 南漳县| 营山县| 大同市| 顺昌县| 海城市| 丰城市| 襄汾县| 喜德县| 秭归县| 卢龙县| 阳新县| 宝清县| 遵义县| 东乡族自治县| 瑞丽市| 瑞安市| 安乡县| 巧家县| 离岛区| 维西| 甘德县| 玛曲县| 眉山市| 阜宁县| 盘锦市| 焉耆| 龙山县| 卢氏县| 宁德市| 灵武市| 平原县| 屏南县| 大荔县| 商城县| 崇信县| 仙居县| 开远市| 云霄县| 吴旗县| 泾川县|