REST on Rails指南4 路由

2021-08-29 19:16:17 字數 1848 閱讀 2551

通過上一講我們了解到,restful設計的關鍵就是定義系統中的資源,這一講我們將學習在rails中,如何將請求路由到我們的資源,以及我們應該如何來處理它。

不過,有一點需要先說明:rest並不是rails的一部分,在rails出現之前,rest的概念已經存在很多年了,並且rest的應用也並不侷限於web,事實上,它也可以應用到其它各種應用軟體的開發中。

資源就是控制器

在我們正式開始之前,我們需要首先明確,在rails中,資源和model並不總是一對一的關係,有時資源僅僅只是你應用邏輯中的乙個實體的抽象,並不需要對映到你的資料庫。但資源跟控制器總是一對一的,也就是每個資源都必須有乙個與它相對應的控制器,並且你需要重新理解控制器,現在控制器只是rest介面的具體實現,它的全部作用就是根據客戶的請求返回資源的某種表示(html,xml等)。

所以,就像第2章講的,我們不在需要去設計那無窮盡的api了,現在我們的控制器只需要定義7個方法:

rails 會幫助我們將使用者的請求路由到某個合適的方法,當然,你並不需要實現這全部的7個方法,如果你的系統不允許使用者建立和修改資源,那麼你只需要實現 index和show方法就可以了。

不過更有可能的一種情況是你覺得這7個方法根本不夠,你當然可以選擇向控制器新增新的方法,但這其實是因為你的設計遺漏了一些資源,因為我建議,在你向控制器新增新方法之前,最好先重新考慮下你的設計。

map.connect '/airports/:action/:id' ,:controller = 'airports'

這條語句將對映/airports/open/45到airports控制器的open方法,你可以通過params[:id]獲取url中的引數 45。但是rest路由有些特殊,它需要同時考慮url和請求的型別,因此同樣是發往/airports/1的請求,如果是get請求,它需要被路由到 airports的show方法,而delete請求則需要被路由到delete方法。

不過幸運的是,從rails1.2開始,我們不再需要通過map.connect來手動的配置rest路由,map.resources會幫我們搞定一切:

map.resources 'airports'

這句話將建立如下的路由規則:

注意:最後一條逗號分隔的url看起來很醜陋,但它們在rails1.2.3中是合法的,不過不用苦惱,它們將在rails2.0中被去除

現在我們已經完成了url的路由,下面我們需要做的就是實現這些方法:

不過先別著急著碼**,從rails1.2開始,我們有了乙個新的生成器(generator):scaffold_resource,使用它我們可以很輕鬆的生成乙個符合rest規範的rails框架,它包含:

讓我們仍然從第三講的例子開始,首先建立乙個新程式,然後為它新增乙個airport資源:

d:\study>rails rest

d:\study>cd rest

d:\study\rest>ruby script/generate scaffold_resource airport name:string designator:string

d:\study\rest>rake db:migrate

d:\study\rest>ruby script/server

現在定位你的瀏覽器到http://localhost:3000/airports/new,你應該已經可以建立乙個新機場了,是不是很神奇?現在,讓我們來看看airports_controller.rb,所有的東西都在那了。

你應該會在控制器**中看到一些奇怪的respond_to塊,這正是我們整個rest實現的關鍵所在,我們將在下一講詳細**respond_to的細節。

REST on Rails指南2 無窮盡的API

通過上一講,我認為你樹立了這個概念 即web其實是一組資源而不是網頁的集合 如果你還不這麼認為,那請你先返回再次閱讀第一講 這一講我們將從另乙個側面來講解為什麼要有rest?物件導向設計與分析 如果你曾經學習過物件導向程式設計,那麼你很可能會這樣開始構建你的新程式 這看起來不錯,事實上我曾經這麼幹了...

Docker 實踐指南(4)

本節介紹容器的常用操作。前面說過,服務都是跑在容器裡的,容器的底層實質上也是乙個作業系統,能安裝軟體,有程序,只不過這個系統很精簡。容器和虛擬機器一樣有啟動 停止的狀態。使用 ubuntu 14.04 映象執行乙個容器來體驗一下 docker run it ubuntu 14.04 bin bash...

4 路徑資訊

1.絕對路徑和相對路徑 絕對路徑 從根目錄 開始表示的路徑 相對路徑 從當前的目錄開始表示的路徑 2.隱藏目錄.和.當前目錄 當前目錄的上一級目錄 和.可以用指令ls a顯示出來。3.輸入shell指令前的部分代表的意思 例如 xuechao ubuntu desktop study xuechao...