昨天,,David H. Hansson在 www.rubyonrails.org 上發(fā)布了Rails 1.2
RC1。之前Rails的版本在1.1.6上停留了4個(gè)月,,有人已經(jīng)不耐煩地在討論組上質(zhì)問Rails
1.2為何拖了這么久,。拖這么久當(dāng)然是有原因的,Rails
1.2是一個(gè)重大的升級,,可以說其核心思想發(fā)生了巨大的,、根本性的變化,以至于著名的《敏捷Web開發(fā)》第二版,,在臨近脫稿之時(shí),,不得不進(jìn)行大幅度的調(diào)
整,從而把出版日期一拖再拖,。
Rails 1.2的主要亮點(diǎn)是REST,。可以這樣說,,經(jīng)過這次升級,,Rails成為第一個(gè)把REST作為核心思想的主流Web框架,從而把其他的競爭性的敏捷Web 開發(fā)框架又一次拋在了身后,。在RIA的曙光已經(jīng)從地平線下面露出來的時(shí)候,,Web的全面service化已經(jīng)不是個(gè)遙不可及的事情,。記得2000- 2001年,以微軟為首的一些大公司鼓吹Web Services,,當(dāng)時(shí)有人認(rèn)為2003年各大網(wǎng)站就會急急忙忙地向Web Services遷徙,。但歷史證明,公眾互聯(lián)網(wǎng)站根本不認(rèn)同這個(gè)方向,,預(yù)見中的Web Services大躍進(jìn)沒有出現(xiàn),。Web Services使得網(wǎng)站的服務(wù)既可以通過頁面來發(fā)布,也可以通過可編程的Web Services API形式發(fā)布,,這本身是很好的事情,,為什么人們不接受呢?原因固然是多方面的,,但是互聯(lián)網(wǎng)社群不接受為企業(yè)應(yīng)用量身定做的,、笨重累贅的 SOAP/WSDL/UDDI,是不可忽略的因素,。這個(gè)時(shí)候,,一種新的Web Services模型就開始引起人們的注意。2000年,,著名的Web技術(shù)專家,、HTTP等諸多Web協(xié)議的主要起草人Roy Fielding從加州大學(xué)Irvine分校獲得博士學(xué)位,其博士學(xué)位論文中 描述了一種分布式軟件的體系結(jié)構(gòu)風(fēng)格,,被稱為REST,。這種風(fēng)格完全符合已經(jīng)建立起來的Web體系結(jié)構(gòu),并且具有天然的簡單性,、可延展性,。自此之后, REST成為SOAP之外另一種主流的Web Services實(shí)現(xiàn)模型,。很快,,人們發(fā)現(xiàn),開發(fā)者更加偏愛REST模型.eBay,、Amazon等巨型網(wǎng)站早在2004年就發(fā)現(xiàn),,大約有60%的Web Service客戶通過REST來使用它們所提供的網(wǎng)絡(luò)服務(wù),,此后這個(gè)比例一直在增加,。那么,REST到底是什么東西呢,? 簡而言之,,REST代表“具備表像的狀態(tài)遷移(REpresentational State Transfer)。注意,,我把representation翻譯為表像,,是為了更好地表達(dá)其本意,,如果按字面翻譯,應(yīng)為“表現(xiàn)”,。REST這樣理解 Web:Web是資源的集合,,每一個(gè)資源都有一個(gè)或多個(gè)URI無疑義地引用。REST軟件構(gòu)件可以獲得某項(xiàng)資源的一個(gè)“表像”,,從這個(gè)表像中,,REST構(gòu) 件可以了解到該資源的當(dāng)前狀態(tài),從而在該項(xiàng)資源上實(shí)施恰當(dāng)?shù)牟僮?,并且可以把這個(gè)表像傳遞給其他的REST構(gòu)件,。當(dāng)REST構(gòu)件在該資源上實(shí)施了某些操作 之后,將導(dǎo)致該資源的狀態(tài)發(fā)生遷移,,從而獲得新狀態(tài)的表像,。這種解釋當(dāng)然是比較晦澀的了。但換一種說法大家就會非常清楚,。當(dāng)我們在瀏覽Web頁面的時(shí)候,, 這個(gè)Web頁面就是Web應(yīng)用當(dāng)前狀態(tài)的表像,而我們和我們的瀏覽器一起構(gòu)成了一個(gè)REST構(gòu)件,。當(dāng)你在Web頁面上執(zhí)行某項(xiàng)操作(點(diǎn)擊鏈接,、提交表單, 等等),,你就是“在某個(gè)資源上實(shí)施了一個(gè)操作”,,就會導(dǎo)致系統(tǒng)的狀態(tài)發(fā)生遷移,遷移到另一個(gè)狀態(tài)中,,而新的狀態(tài)以新的表像(頁面)展示給你,。這不正是我們 每天都重復(fù)幾百上千次的事情嗎?所以我們用REST已經(jīng)十多年了,。只不過,,Roy Fielding在其論文中表明,REST其實(shí)是一種分布式軟件的通用風(fēng)格,,可以被用來構(gòu)建相當(dāng)廣泛的互聯(lián)網(wǎng)應(yīng)用,。 Roy Fielding對REST的深刻理解直接影響到HTTP協(xié)議的制定。在1999年完成的HTTP 1.1(RFC2616)中,,HTTP增加了PUT,、DELETE兩個(gè)命令,從而使HTTP的主要命令擴(kuò)充為四個(gè)(GET,、POST,、PUT、 DELETE,未將次要命令如OPTION,、HEAD等計(jì)入),。Roy Fielding認(rèn)為,這四個(gè)命令不多不少恰恰能完成REST風(fēng)格的應(yīng)用,。換言之,,只要有這四個(gè)動詞,就可以在REST范圍內(nèi)做出任何想要的分布式應(yīng)用,。 這是多么令人驚訝的結(jié)論,!我們在平時(shí)的面向?qū)ο笤O(shè)計(jì)中,通常要給每一個(gè)對象定義的動作(方法)都不少于四個(gè),,而REST卻斷言,,四個(gè)就夠了,多一個(gè)浪費(fèi),, 少一個(gè)不行,。如果Fielding博士是對的,那么互聯(lián)網(wǎng)上的編程工作就可以大大簡化,,HTTP體系下天生的輕便,、靈活、簡單,、可擴(kuò)展的特性都唾手可得,。 然而,遺憾的是,,盡管HTTP很流行,,四個(gè)動詞的語義清清楚楚地寫在RFC2616里面,但真正很好地理解了其中含義的人卻非常少,。世界上充滿了不求甚解 就擼起袖子蠻干的聰明人,,所以瀏覽器出現(xiàn)已經(jīng)十多年了,卻還是只支持GET和POST兩個(gè)方法,,這使得REST的推行不能一帆風(fēng)順,。 Ajax的出現(xiàn)標(biāo)志著RIA時(shí)代逐漸走來,客戶端將不再是清一色的HTML頁面,,也可以是一個(gè)Ajax的程序,,通過XMLHttp向服務(wù)器發(fā)起PUT和 DELETE請求。這樣,,就要求服務(wù)器端在四動詞的背景下重新思考應(yīng)用的構(gòu)造,。傳統(tǒng)上,服務(wù)器端應(yīng)用只是通過REST風(fēng)格將部分服務(wù)暴露出來,。而 Rails 1.2則直接將REST直接作為構(gòu)建整個(gè)Web應(yīng)用的中心,,這才是Rails 1.2的獨(dú)特之處,也是張顯Rails社群離經(jīng)叛道和卓爾不群的地方,。為了要采納REST風(fēng)格,,Rails 1.2革新了Web應(yīng)用的構(gòu)造思想,整個(gè)領(lǐng)域建模的思想都有所變化?,F(xiàn)在整個(gè)Rails社群都應(yīng)當(dāng)準(zhǔn)備向REST時(shí)代遷移,。 今年7月份舉行的RailsConf 2006上,David Heinemeier Hasson作了一個(gè)主題演講,,很清楚地講了Rails 1.2中對于REST的設(shè)計(jì),,以及REST風(fēng)格給Web應(yīng)用設(shè)計(jì)思想所帶來的革新。我第一次看到這個(gè)視頻,,就認(rèn)為這可能是對Web服務(wù)端開發(fā)具有歷史意義 的一次演講,。當(dāng)時(shí)有一點(diǎn)時(shí)間,就一邊聽一邊記,,把這個(gè)演講的開頭翻譯出將近3000字的內(nèi)容,,大約占整個(gè)演講篇幅的1/4。后來我忙了起來,,就沒有時(shí)間把 這個(gè)翻譯做完,。這個(gè)稿件在我硬盤上爬了兩個(gè)多月,扔掉也不是,,放出來又不完整?,F(xiàn)在Rails 1.2已經(jīng)發(fā)布了,我想越來越多的Web開發(fā)者都會回過頭關(guān)心這個(gè)演講的內(nèi)容,,所以突然生出一個(gè)想法,,能不能把這個(gè)不完整的翻譯稿放到自己的blog上, 請有時(shí)間和精力的網(wǎng)友把翻譯工作接力下去,? 所以,,我已經(jīng)將自己翻譯完成的開頭部分放到了blog上,請有興趣和熱情的朋友對照錄像內(nèi)容把翻譯接力下去,,為國內(nèi)的Web開發(fā)者介紹關(guān)于Web開發(fā)思想的這一重大革新,。 Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1413937 |
|