RESTful Design 雜談

看了上一篇可能會有些混淆: 整個 Wide World Web 可以概觀看成 REST 架構,但是微觀看 Web 就不完全是了。來看看 Rails 的 URL routes 設計: 指定Controller之後指定action,基本上它是個程序性(procedural)的框架,我們利用URI syntax來決定執行什麼動作。然而 Web 基本上不是個 procedural 環境,而是 RESTful 的,但是就像你在物件導向的環境中仍然可以寫 procedural code,你也可以在 RESTful 環境中作 procedural,只是很不幸的會失去一些RESTful的優點而已。

不過這不表示Rails不夠好,事實上目前任何 web application 框架要成功,都必須支援 procedural 的開發,這是因為基本上目前存在的主流框架都是 procedural 的,人們也都習慣於procedural開發。目前的潮流只有在部分需要做 web service 的地方,會在SOAP之外另外提供REST方法(提供XML格式),在整個網站上使用RESTful仍不多見。因此除非看到有人率先做出成功的RESTful 網站吧,雖說 RESTful is right way,但是它的觀念與大家已經會的 procedural 有著根本上的差異,所以這種改變跟限制到底能提供多少實際好處呢? anyway… 走在時代尖端的 Ruby on Rails 註定會走這對的一步 (事實上是併行: 你可以用本來的方法設計,也可以用RESTful方式)。 

RESTful 的設計方法是如何呢?有幾篇文章可以參考:

重點是了解 resources 觀念: 為每個 resource 用單一 URI 定位,忘記用不同URL syntax來觸發不同動作的傳統思維吧(別用 ?action=somepage 之類的東西),URL應該是名詞而不是動詞。設計這個 resource 使用哪種 (HTTP) verb,設計有哪些 content types。

還有一部份我還不是很了解,就是 cookie 跟 session 怎麼辦?要怎麼看? 我們知道 session 不是 RESTful,因為它 stateful 把狀態存到sever上。至於 cookie 則有一些爭議。… so… 我們該如何處理登入之類的問題? 使用 HTTP authentication 機制嗎?有條件的使用cookie? 相關的討論:

  • Tonic FAQ 一個 RESTful PHP framework,裡面的FAQ提到session跟cookie。我發現裡面的文件介紹還不錯,值得參考,比如說裡面這樣解釋MVC: resources (model), representations (view), and HTTP methods on a resource (controller)。我相信過不久 Rails 圈也應該也會為 RESTful 的開發方式做好的介紹。
  • REST, HTTP, Sessions and Cookies
  • REST wiki FAQ

Update: 發現 Restful Authentication Plugin 提供 Rails 的登入實作,看了一下有用 Session 也有提供 HTTP Basic Authorization 機制,下幾篇再來深入研究。

其它參考文章:

2 thoughts on “RESTful Design 雜談

Leave a Reply