railsontrack創(chuàng)建開發(fā)和測試的數(shù)據(jù)庫。>mysql-urails-pEnterpassword:*****mysql>createdatabaseontrack_development;mysql>createdatabaseontrac" />

黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

應(yīng)用Rails進行REST 開發(fā)(二)

系統(tǒng) 1891 0

實例應(yīng)用
??? 我們以《RapidWeb Development mit Ruby on Rails》中的一個例子“項目管理應(yīng)用”來描述Rails的REST方面的特性。
??? 首先創(chuàng)建一個rails的應(yīng)用:(原書中的rails為1.2)
> rails ontrack
??? 創(chuàng)建 開發(fā) 和 測試 的數(shù)據(jù)庫。
> mysql -u rails -p
Enter password: *****
mysql> create database ontrack_development;
mysql> create database ontrack_test;
mysql> quit

基于REST的rails 應(yīng)用可以使用新的腳手架(scaffold)命令 scaffold_resource 來方便的創(chuàng)建。可以傳遞給生成器這樣一些參數(shù):在本例中,就是資源的名字 “project”, 和 這個model 的字段名字以及類型。字段的類型是必須的,因為我們要使用migration,以及在視圖中顯示這些字段。
> cd ontrack
> ruby script/generate scaffold_resource project name:string desc:text


生成器不僅生成了 model, controller, view, 還生成了完整的migration腳本,以及在 routes.rb 里生成了一個映射:map.resources :projects ,對于新生成controller來說,這是用于REST方面的最后一個映射項目。

創(chuàng)建表:
> rake db:migrate

如果我們來看看剛才生成的ProjectController,會發(fā)現(xiàn)其實并沒有什么新鮮的東西,無非也就是這么一些操作:創(chuàng)建(create),讀取 (retrieve),更新(update),刪除(delete)這些操作。需要強調(diào)注意:這些操作都是針對Project這個資源的。 Controller 和 Action 看起來都很普通,但是仔細看一下,每個Action 都會有一些注釋,這些注釋表明了 url 和 http 所使用的動作。這些注釋所體現(xiàn)的,就是 REST風(fēng)格的 URL。接下來的章節(jié),我們會仔細分析一下這些URL的內(nèi)容。


REST 風(fēng)格的 URL
REST風(fēng)格的URL,并不像以往的Rails 應(yīng)用一樣,是由 controller/action/model id 所組成的,例如 /projects/show/1 。相反,REST風(fēng)格的URL僅僅由 controller 和資源的id 所組成,例如/projects/1。
注意:我們一直再強調(diào)“資源”這個詞。URL中沒有了 action,我們也就看不到該對資源進行什么操作了。
“/projects/1”這個URL到底應(yīng)該是顯示一個資源,還是應(yīng)該刪除一個資源?答案來自我們之前提到的 http 協(xié)議的4個動作。

下面的列表可以展示 http 協(xié)議的4個動作是如何和REST風(fēng)格的URL所關(guān)聯(lián)的,并且什么樣的組合,對應(yīng)什么樣的action:

我們可以看出來,除了 POST 動作,其他三個URL都是相同的,原因很簡單,因為要創(chuàng)建的那個資源還不存在呢。既然有三個URL都是相同的,那該怎么區(qū)分呢?其實是 http 協(xié)議的4個動作決定該調(diào)用哪個action。我們沒有使用action,這就使得 我們不會寫多余的 URL 和資源了。現(xiàn)在我們只需要2個URL: /projects/1 和 /projects ,如果是傳統(tǒng)的方式,我們需要 /projects/new , /projects/show/1 , /projects/delete/1,/projects/update/1 4個URL.

有一點需要注意,之前我們也提到過,瀏覽器只能理解 POST 和 Get 兩個動作,所以,當輸入 http://localhost:3000/projects/1 的時候,會調(diào)用 show這個Action.所以,Rails 提供了一個輔助的方案來聲稱一個用于刪除一個資源的鏈接:Delete 這個動作被放在一個隱藏的提交字段里(hidden field)提交給服務(wù)器;在創(chuàng)建新的資源的時候,也是適用相同的方法。這些內(nèi)容都會在以下的章節(jié)里介紹。


在Action 中使用 respond_to
我們已經(jīng)知道,我們可以通過一個 指定資源id的URL 和http協(xié)議的動作的組合,來調(diào)用一個 action。這使得一個URL看起來非常簡潔:一個URL就指定了哪個資源要被操作,而不像以往那樣去指定一個Action。

那么到底有什么樣的需求,會讓我們?nèi)ナ褂眠@種風(fēng)格的URL呢?一個 REST的action可以應(yīng)付不同的客戶端所需要的不同的信息格式。對于一個WEB迎來說,典型的客戶端當然就是瀏覽器了,但是別忘了,對于一個web service 來說,它需要的則是 xml 格式的信息;對于一個RSS閱讀器來說,它需要的則是 RSS格式的信息。對于客戶端的請求,我們已經(jīng)使用 scaffold 生成器生成了 CRUD 4個方法來處理。下面的代碼片斷展示了 “show” 這個 action 中 respond_to 的使用方法:
Listing 1.2: ontrack/app/controllers/projects controller.rb
??? # GET /projects/1
??? # GET /projects/1.xml
??? def show
??? ??? @project = Project.find(params[:id])
??? ??? respond_to do |format|
??? ??? format.html # show.rhtml
??? ??? format.xml { render :xml => @project.to_xml }
??? ??? end
??? end
respond_to 方法是用了代碼塊(block)技術(shù),在這個例子中,代碼塊(block)部分處理了2種格式的信息:html 和 xml。針對客戶端不同的請求,會執(zhí)行代碼塊(block)中不同的部分。例如如果客戶端請求的是html 信息,那么會執(zhí)行“format.html”,如果客戶端請求的是xml 信息,那么會執(zhí)行“format.xml”部分。

如果 format.html 代碼塊里是空的,那么默認就顯示 show.rhtml。
控制 respond_to 可以通過2種方式:一是在 http-header 里面;二是在URL后面追加一些東西,也就是改變URL的樣式。

改變URL的樣式
第二種控制 action 返回不同格式的信息的方法,就是改變URL的樣式。假設(shè)我們沒有刪除 id=1 這個資源project,那么我們通過以下這個方式來在瀏覽器里顯示這個資源:http://localhost:3000/projects/1.xml
這里MAC的用戶要注意,這種情況下 firefox 表現(xiàn)的不錯,但是Safari就差些,因為Safari 會忽略xml 格式的信息。甚至 firefox 會把xml 顯示的非常漂亮!到這里,我們已經(jīng)知道一個controller 和 URL是如何工作的,在接下來的2個章節(jié)里,我們會學(xué)習(xí)如何在 controller 和 view 里使用和構(gòu)造這種REST風(fēng)格的URL。

好了,今天我們就介紹到這里,到現(xiàn)在為止都還是理論上的東西,下節(jié)將開始說view、controller中的rest風(fēng)格。

應(yīng)用Rails進行REST 開發(fā)(二)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論