2010-01-24 59 views
2

隨着Ruby on Rails的,REST是簡化事情的開發商和製造資源,易於機器准入方面有很大的概念,但它也產生驚人醜陋的網址爲人類。如何使Ruby on Rails REST風格的路線非常友好和人性化?

例如,使用流行的RESTful Authentication插件來處理用戶登錄和認證時,它創建兩個控制器用於認證和授權,用戶和會話。這是因爲用戶表示與用戶關聯的長期資源,例如登錄名和密碼,而會話表示與登錄會話相關的登錄信息,例如cookie資源。因此,網站的登錄網址將爲site.com/sessions/new。

默認情況下,它還會創建一個路由,以幫助這個: map.login '/登錄',:控制器=> '會議',:動作=> '新'

然而,這真的只是因爲在提交路徑才能正常工作時,它創建的表單使用<%form_tag session_path do - %>。這會導致表單的帖子進入SessionsController#create,但是如果表單提交失敗(例如由於憑據錯誤),用戶的瀏覽器將留在site.com/session,這看起來很尷尬。更糟糕的是,如果用戶手動輸入該網址,它將不可用,除非我定義了一個索引方法。如果我改變的form_tag閱讀<%的form_tag login_path做 - %>則會導致職位,以SessionsController#新的,這完全打亂了休息。

我怎麼能與其他公司基本一致,合理的期待網址嗎?總的來說,我真的被使用REST的便利所吸引,但這似乎是錯誤的,因爲這會產生對用戶可見的(負面)變化。

+1

您遇到的衝突是由於這樣的事實:** **純粹的REST是一種無狀態架構(見http://en.wikipedia.org/wiki/Representational_State_Transfer#Constraints)。因此,在純粹的方法中,會話甚至不應該成爲REST實現的一部分。 – 2010-01-24 00:56:00

回答

1

我覺得對整個REST提供一致的,直觀的和用戶友好的URL,尤其是當它涉及到獲取資源(GET),通常是用戶想要做(頁面他們最常書籤)什麼。通常情況下,你正在處理的URL像

/posts/34 
/articles/456/edit 
/companies 

你打在一個孤立的(雖然是不可避免的,因此很煩人)例外,這是我從來沒有見過一個真正令人滿意的解決方案,比使用AJAX等。問題在於,RESTful路線在仔細考慮域的應用程序中大放異彩,後端資源甚至對用戶來說也是有意義的(如上面的例子),而會話管理對用戶來說本質上是模糊的。

如果你對/sessions URL不滿意,爲什麼不把別名/login/submit改爲/ sessions/create?