HTTP 請(qǐng)求( Request)與 HTTP 動(dòng)作 ( Verb)
一般網(wǎng)頁的運(yùn)作原理是這樣的:
1.使用者在瀏覽器輸入了某個(gè)網(wǎng)址欠气,點(diǎn)擊了某個(gè)連結(jié)。這都叫發(fā)出 HTTP 請(qǐng)求 ( Request)。
2.而瀏覽器回應(yīng)之后:產(chǎn)生頁面对竣,或者是重新導(dǎo)向难衰。這都叫 HTTP 回應(yīng)( Response)。
一般來說丛忆,使用者最常使用的是兩種類型 / 動(dòng)作 ( Verb )的請(qǐng)求: GET 與 POST祠汇。
GET :輸入網(wǎng)址,點(diǎn)擊某些網(wǎng)址熄诡。這都是 GET可很。
POST:送出表單。這叫做 POST
HTTP 請(qǐng)求( Request)與 HTTP 動(dòng)作 ( Verb)
因?yàn)?CRUD 是常見的操作行為粮彤,但是大家實(shí)作的方式根穷、與網(wǎng)址設(shè)計(jì)方式不一樣。造成很多維護(hù)上的困擾导坟。
后來就有人發(fā)明 RESTful 這個(gè)概念屿良,希望用 HTTP 的動(dòng)作 ( Verb)一起去封裝 CRUD 的行為。所以又多加了兩個(gè)動(dòng)作:
- PUT : 更新 ( update )
- DELETE : 刪除 ( delete)
而 Rails 的 Routing 也是依循這樣的理念去設(shè)計(jì)惫周。
Rails 的基礎(chǔ) RESTful概念
由于RESTful是個(gè)新手不容易一下子理解的概念尘惧,號(hào)稱學(xué) Ruby on Rails 初期最大障礙。
在本篇盡量用淺顯易懂的方式解釋递递。如果看不懂也沒關(guān)系喷橙,用背的I睹础!
一定要背起來贰逾!
以下例子 做出 CRUD 功能的討論版來解釋:
- 討論版這個(gè)功能的名稱: groups悬荣。Restful 的概念里面叫做 resources,“一組資源”疙剑。
為了要控制它的運(yùn)作氯迂,我們會(huì)創(chuàng)建一個(gè)新的 Controller文件 叫做 groups_controller.rb
HTTP Verb 有四種:
- 新增 (create,使用 POST )
- 讀取 (read言缤,使用 GET )
- 更新 (update嚼蚀,使用 PUT )
- 刪除 (destroy,使用 DELETE)
在這組 controller 當(dāng)中管挟,我們會(huì)實(shí)作 7 個(gè) Action 轿曙,4 張頁面。
- 首頁( index ):用來列出所有的討論版僻孝,可以選擇各個(gè)單版 (使用 GET )
- 各個(gè)討論版專屬頁面(show):顯示討論版版名跟簡介 (使用 GET )
- 新增頁面(new):里面會(huì)有表單导帝,填完以后可以送出 (使用 GET )
- 產(chǎn)生數(shù)據(jù)(create) :new 送出來的表單到 create 這個(gè) action,新增一筆數(shù)據(jù) ( 使用 POST )
- 編輯頁面(edit):里面會(huì)有表單呈現(xiàn)現(xiàn)有數(shù)據(jù)來穿铆,填完數(shù)據(jù)后可以送出 (使用 GET )
- 更新數(shù)據(jù)(update):edit 送出來的表單可以到 update 這個(gè) action舟扎,更新該筆數(shù)據(jù) (使用 PUT )
- 刪除數(shù)據(jù):送出刪除請(qǐng)求,刪除該筆數(shù)據(jù)(使用 DELETE)
這七個(gè) action 悴务,是每個(gè)CRUD功能里最基本的動(dòng)作睹限。只要我們?cè)?controller.rb 里定義 (def) 好這七個(gè)方法當(dāng)作動(dòng)作 (action)。其他的部分 Rails 就會(huì)幫我們處理了讯檐。
像是設(shè)定 Routing (路由) 只需要簡單一行:
config/routes.rb resources :groups
這樣不管瀏覽器端跑來什么樣的請(qǐng)求 (request) 羡疗,Routing都會(huì)聰明地幫我們導(dǎo)向正確的 action 去運(yùn)作后續(xù)流程。
網(wǎng)址對(duì)應(yīng)關(guān)系
對(duì)于網(wǎng)址跟對(duì)應(yīng)的Action與頁面來說
- /groups/ 一定就是 index别洪,首頁叨恨,對(duì)應(yīng)Routes路徑: groups_path
- /groups/123 一定就是 show,名字為123的討論版?zhèn)€版頁面挖垛,對(duì)應(yīng)Routes路徑: group_path(123)
- /groups/123/edit 一定就是 edit痒钝,編輯討論版123的表單頁面,對(duì)應(yīng)Routes路徑:edit_group_path(123)
- /groups/new 一定就是 new痢毒,新增討論版的表單頁面送矩,對(duì)應(yīng)Routes路徑(或稱為helper):new_group_path 總結(jié)
所以制作一個(gè) RESTful 風(fēng)格的討論版,我們僅需在Routes設(shè)定一行代碼即可