HTTP 請(qǐng)求( Request)與 HTTP 動(dòng)作 ( Verb)
一般網(wǎng)頁(yè)的運(yùn)作原理是這樣的:
- 使用者在瀏覽器輸入了某個(gè)網(wǎng)址,點(diǎn)擊了某個(gè)連結(jié)霉颠。這都叫發(fā)出 HTTP 請(qǐng)求 ( Request)。
- 而瀏覽器回應(yīng)之后:產(chǎn)生頁(yè)面碉碉,或者是重新導(dǎo)向试幽。這都叫 HTTP 回應(yīng)( Response)究西。
一般來(lái)說(shuō),使用者最常使用的是兩種類型 / 動(dòng)作 ( Verb )的請(qǐng)求: GET 與 POST图云。
- GET :輸入網(wǎng)址惯悠,點(diǎn)擊某些網(wǎng)址。這都是 GET竣况。
- POST:送出表單克婶。這叫做 POST
RESTful 的基礎(chǔ)概念
因?yàn)?CRUD 是常見(jiàn)的操作行為,但是大家實(shí)作的方式帕翻、與網(wǎng)址設(shè)計(jì)方式不一樣鸠补。造成很多維護(hù)上的困擾。
后來(lái)就有人發(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 初期最大障礙泉蝌。
在本篇盡量用淺顯易懂的方式解釋。如果看不懂也沒(méi)關(guān)系揩晴,用背的Q恪!
一定要背起來(lái)硫兰!
以下例子以 第三章诅愚, 做出 CRUD 功能的討論版來(lái)解釋:
- 討論版有個(gè)群組叫: groups。在 Restful 的概念里把這個(gè) groups 叫做 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 張頁(yè)面。
- 首頁(yè)( index ):用來(lái)列出所有的討論版耍目,可以選擇-各個(gè)單版 (使用 GET )
- 各個(gè)討論版專屬頁(yè)面(show):顯示討論版版名跟簡(jiǎn)介 (使用 GET )
- 新增頁(yè)面(new):里面會(huì)有表單膏斤,填完以后可以送出 (使用 GET )
- 產(chǎn)生數(shù)據(jù)(create) :new 送出來(lái)的表單到 create 這個(gè) action,新增一筆數(shù)據(jù) ( 使用 POST )
- 編輯頁(yè)面(edit):里面會(huì)有表單呈現(xiàn)現(xiàn)有數(shù)據(jù)來(lái)制妄,填完數(shù)據(jù)后可以送出 (使用 GET )
- 更新數(shù)據(jù)(update):edit 送出來(lái)的表單可以到 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 (路由) 只需要簡(jiǎn)單一行:
config/routes.rb
resources :groups
這樣不管瀏覽器端跑來(lái)什么樣的請(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與頁(yè)面來(lái)說(shuō)
- /groups/ 一定就是 index哄尔,首頁(yè)毅糟,對(duì)應(yīng)Routes路徑: groups_path
- /groups/123 一定就是 show,名字為123的討論版?zhèn)€版頁(yè)面弛饭,對(duì)應(yīng)Routes路徑: group_path(123)
- /groups/123/edit 一定就是 edit冕末,編輯討論版123的表單頁(yè)面,對(duì)應(yīng)Routes路徑:edit_group_path(123)
- /groups/new 一定就是 new侣颂,新增討論版的表單頁(yè)面档桃,對(duì)應(yīng)Routes路徑(或稱為helper):new_group_path
總結(jié)
所以制作一個(gè) RESTful 風(fēng)格的討論版,我們僅需在Routes設(shè)定一行代碼即可