天天看點

REST式架構,Roy的博士論文,了解,RESTlet-

轉載位址

http://www.javaeye.com/topic/369729

1 REST式架構

這個詞彙目前已經流行到瘋了。。。但凡商業項目都想跟REST粘點邊吧! 首先了解一下那篇傳說中的博士學位論文:位址: http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm 您可以随時取拜讀或者下載下傳PDF! 

3 轉載下文以幫助新手了解:

在RIA的曙光已經從地平線下面露出來的時候,Web的全面service化已經不是個遙不可及的事情。記得2000-2001年,以微軟為首的一些大公 司鼓吹Web Services,當時有人認為2003年各大網站就會急急忙忙地向Web Services遷徙。但曆史證明,公衆網際網路站根本不認同這個方向,預見中的Web Services大躍進沒有出現。Web Services使得網站的服務既可以通過頁面來釋出,也可以通過可程式設計的Web Services API形式釋出,這本身是很好的事情,為什麼人們不接受呢?原因固然是多方面的,但是網際網路社群不接受為企業應用量身定做的、笨重累贅的 SOAP/WSDL/UDDI,是不可忽略的因素。這個時候,一種新的Web Services模型就開始引起人們的注意。2000年,著名的Web技術專家、HTTP等諸多Web協定的主要起草人Roy Fielding從加州大學Irvine分校獲得博士學位,其博士學位論文 中 描述了一種分布式軟體的體系結構風格,被稱為REST。這種風格完全符合已經建立起來的Web體系結構,并且具有天然的簡單性、可延展性。自此之 後,REST成為SOAP之外另一種主流的Web Services實作模型。很快,人們發現,開發者更加偏愛REST模型.eBay、Amazon等巨型網站早在2004年就發現,大約有60%的Web Service客戶通過REST來使用它們所提供的網絡服務,此後這個比例一直在增加。那麼,REST到底是什麼東西呢?

簡而言之,REST代表“具備表像的狀态遷移(REpresentational State Transfer)。注意,我把representation翻譯為表像,是為了更好地表達其本意,如果按字面翻譯,應為“表現”。REST這樣了解 Web:Web是資源的集合,每一個資源都有一個或多個URI無疑義地引用。REST軟體構件可以獲得某項資源的一個“表像”,從這個表像中,REST構 件可以了解到該資源的目前狀态,進而在該項資源上實施恰當的操作,并且可以把這個表像傳遞給其他的REST構件。當REST構件在該資源上實施了某些操作 之後,将導緻該資源的狀态發生遷移,進而獲得新狀态的表像。這種解釋當然是比較晦澀的了。但換一種說法大家就會非常清楚。當我們在浏覽Web頁面的時候, 這個Web頁面就是Web應用目前狀态的表像,而我們和我們的浏覽器一起構成了一個REST構件。當你在Web頁面上執行某項操作(點選連結、送出表單, 等等),你就是“在某個資源上實施了一個操作”,就會導緻系統的狀态發生遷移,遷移到另一個狀态中,而新的狀态以新的表像(頁面)展示給你。這不正是我們 每天都重複幾百上千次的事情嗎?是以我們用REST已經十多年了。隻不過,Roy Fielding在其論文中表明,REST其實是一種分布式軟體的通用風格,可以被用來建構相當廣泛的網際網路應用。Roy Fielding對REST的深刻了解直接影響到HTTP協定的制定。在1999年完成的HTTP 1.1(RFC2616)中,HTTP增加了PUT、DELETE兩個指令,進而使HTTP的主要指令擴充為四個(GET、POST、PUT、 DELETE,未将次要指令如OPTION、HEAD等計入)。Roy Fielding認為,這四個指令不多不少恰恰能完成REST風格的應用。換言之,隻要有這四個動詞,就可以在REST範圍内做出任何想要的分布式應用。 這是多麼令人驚訝的結論!我們在平時的面向對象設計中,通常要給每一個對象定義的動作(方法)都不少于四個,而REST卻斷言,四個就夠了,多一個浪費, 少一個不行。如果Fielding博士是對的,那麼網際網路上的程式設計工作就可以大大簡化,HTTP體系下天生的輕便、靈活、簡單、可擴充的特性都唾手可得。

然而,遺憾的是,盡管HTTP很流行,四個動詞的語義清清楚楚地寫在RFC2616裡面,但真正很好地了解了其中含義的人卻非常少。世界上充滿了不求甚解 就撸起袖子蠻幹的聰明人,是以浏覽器出現已經十多年了,卻還是隻支援GET和POST兩個方法,這使得REST的推行不能一帆風順。

Ajax的出現标志着RIA時代逐漸走來,用戶端将不再是清一色的HTML頁面,也可以是一個Ajax的程式,通過XMLHttp向伺服器發起PUT和 DELETE請求。這樣,就要求伺服器端在四動詞的背景下重新思考應用的構造。傳統上,伺服器端應用隻是通過REST風格将部分服務暴露出來。而 Rails 1.2則直接将REST直接作為建構整個Web應用的中心,這才是Rails 1.2的獨特之處,也是張顯Rails社群離經叛道和卓爾不群的地方。為了要采納REST風格,Rails 1.2革新了Web應用的構造思想,整個領域模組化的思想都有所變化。現在整個Rails社群都應當準備向REST時代遷移。

4 RESTlet :Lightweight REST framework 

位址: http://www.restlet.org/