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

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

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