前言
??? ??? Http協(xié)議除了 get 和 post ,還可以做更多的事情,一直以來(lái),很多的開(kāi)發(fā)
人員都忘了這一點(diǎn)。
??? ??? 但是,如果你知道瀏覽器其實(shí)只支持 get 和 post, 那么你就不會(huì)感到驚奇
了。
??? ??? get 和 post 是http請(qǐng)求從客戶端傳到服務(wù)器端的兩個(gè)方法。除了這兩個(gè),
http協(xié)議還知道 put和delete 方法,這兩個(gè)方法告訴服務(wù)器創(chuàng)建或者刪除一個(gè)
WEB的資源。
??? ??? 這個(gè)教程的目的,就是擴(kuò)展開(kāi)發(fā)人員的視線,去了解http協(xié)議的 put 和
delete 方法。我們常說(shuō)的 REST 這個(gè)術(shù)語(yǔ),精華就是 http 協(xié)議中 get, post,
put, delete 四個(gè)方法。Rails 從1.2版本開(kāi)始,就支持 REST 這個(gè)技術(shù)了。
這個(gè)教程一開(kāi)始會(huì)簡(jiǎn)短的介紹REST的背景和概念,接著介紹為什么要開(kāi)發(fā)
REST風(fēng)格的Rails應(yīng)用。
??? ??? 使用 scaffolding,這是可以幫助我們產(chǎn)生 controller 和 model 細(xì)節(jié)的工
具,對(duì)我們的進(jìn)行REST應(yīng)用的開(kāi)發(fā)很有幫助。REST的應(yīng)用中作用非常重大的路由
技術(shù),將會(huì)在接下來(lái)的章節(jié)介紹。“嵌套的資源”這個(gè)章節(jié),會(huì)介紹一下REST的
高級(jí)應(yīng)用,告訴大家資源如何以 父 - 子(繼承關(guān)系)的關(guān)系組合在一起,同時(shí)不
違反的REST 風(fēng)格的路由設(shè)計(jì)。教程的后面,還會(huì)介紹一些REST的內(nèi)容,AJAX,
REST風(fēng)格的應(yīng)用的測(cè)試方法,還有“ActiveResource”-- REST的客戶端部分。
??? ??? 在我們開(kāi)始之前,再啰嗦最后一句:要讀這個(gè)教程,最少你要懂一點(diǎn)Rails開(kāi)
發(fā)的基本知識(shí),否則的話,先去學(xué)習(xí)學(xué)習(xí)吧:)
什么是REST?
??? ??? REST這個(gè)術(shù)語(yǔ),是Roy Fielding 在Ph.D.論文中提出來(lái)的,它的全稱是
“Representational State Transfer.”
??? ??? REST描述了這么一個(gè)架構(gòu):利用標(biāo)準(zhǔn)的http 協(xié)議中的 get, post, put,
delete 來(lái)請(qǐng)求和操作網(wǎng)絡(luò)上的資源。
??? ??? 在REST中,資源的意思就是一個(gè) 基于URL實(shí)體,客戶端可以通過(guò) http協(xié)
議來(lái)和它進(jìn)行交互。這個(gè)資源可以用各種形式來(lái)展示給客戶端,如 HTML,XML,
RSS,主要依賴于客戶端的調(diào)用方式。并不像以往的Rails開(kāi)發(fā)那樣,用REST方
式,一個(gè) url 不是指定一個(gè) model 或者 action, 一個(gè) url 僅僅是資源的本身而
已。

來(lái)保證這三個(gè)是不同的資源。
??? ??? 注意:URL并沒(méi)有表明要對(duì)這三個(gè)資源進(jìn)行什么操作。
??? ??? Rails 應(yīng)用中,一個(gè)資源是由 controller 和 model 組成的。那么從
技術(shù)的角度來(lái)看,圖 1.1中的3個(gè)資源"project",就是針對(duì)3個(gè)請(qǐng)求,而表現(xiàn)出
來(lái)的 Project model(也就是ActiveRecord類了)的3個(gè)實(shí)例形式。
為什么使用REST
??? ??? REST所帶給我們的,是Rails 的理論上的提升,下面的一些特性,將會(huì)使
我們清晰地了解這一點(diǎn)。
??? ??? a) 簡(jiǎn)明的Url. REST 風(fēng)格的URL是為了定位一個(gè)資源,而并不是調(diào)用一
個(gè)action. 在REST中,URL經(jīng)常以這種方式出現(xiàn):先是controller的名稱,然后
是資源的id。請(qǐng)求的操作隱藏在URL 里,并且通過(guò) http 協(xié)議來(lái)表示(get, post,
put, delete 四個(gè)動(dòng)作)。
??? ??? b) 傳回給客戶端不同格式的內(nèi)容。我們通過(guò)一種方式來(lái)編寫(xiě) controller,
其中的action應(yīng)該都可以返回給客戶端不同的格式的結(jié)果。對(duì)于同一個(gè) action,
即可以返回給客戶端 html, 也可以返回給xml,也可以返回給 RSS,這依賴于客戶
端想要什么。REST應(yīng)用就好像變得能處理客戶端好多的命令。
??? ??? c) 更少的代碼。因?yàn)橐粋€(gè)action 可以返回客戶端的各種需要格式,這就
減少了(DRY don’t repeat yourself),這也就讓 controller 里的代碼減少了。
??? ??? d) 面向 CRUD 的controller. 所謂CRUD 就是Create,Retrieve,Update,Delete.
controller 和 model 融合到一起,每個(gè)controller都會(huì)響應(yīng)某個(gè)
model的操作。
??? ??? e) 讓系統(tǒng)設(shè)計(jì)更簡(jiǎn)單。REST風(fēng)格的開(kāi)發(fā)方式,會(huì)使系統(tǒng)結(jié)構(gòu)更加清晰,而
且容易維護(hù)。為什么使用REST?
新玩意
??? ??? 如果你覺(jué)得 REST 讓你之前所有的開(kāi)發(fā)經(jīng)驗(yàn)變得毫無(wú)作用,別擔(dān)心,那是
不可能的~ 因?yàn)镽EST仍然是基于 MVC 風(fēng)格的。從技術(shù)角度來(lái)看,REST中的“新
玩意”可以歸納為以下幾點(diǎn):
??? ??? a) 在 controller 中的 respond_to 的用法。
??? ??? b) 對(duì)于 link 和 form 的新的 helper 方法。
??? ??? c) 在 controller redirect 中的 url 方法。
??? ??? d) 在 routes.rb 文件中,新的路由定義方法。
好了,今天就到這了,明天以實(shí)例說(shuō)明。
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
