2009-05-09 65 views
1

我總是儘可能將應用程序設置爲RESTful,但最近我開始研究一個複雜的項目,該項目需要在控制器中使用多個附加方法。Rails:如何讓複雜的應用程序保持RESTful?

我通常通過添加另一個實現這一目標:收集到的路線,但它似乎是一個解決辦法,並在場景中我有5

是否有處理控制器中的額外的方法的最佳做法?它們通常是更新模型的簡單形式。

+0

你可以添加一些細節?什麼是控制器/資源以及您要添加的額外方法是什麼?我通常會發現有一個很好的方法來處理它RESTfully它只需要獲得一些外部視角。 – 2009-05-10 01:10:32

回答

6

另一個解決方案就是我所做的每次發現自己創建的行爲不適合RESTful行爲,例如搜索,因此您可能會發現自己在文章控制器上執行搜索操作,你可以做什麼而不是創建這個動作,而是創建一個Search控制器,並在其中使用RESTful動作。沒有規則說你需要使用所有的操作,你可能只需要一兩個操作,但它會保持你的API RESTful和你的代碼組織。

這不是一條堅硬而快速的規則,但是當我嘗試決定放置東西的位置時,我確實發現它很有幫助。

+0

作爲一個很好的例子(甚至包括搜索!)看看railscast:http://railscasts.com/episodes/111-advanced-search-form – 2009-07-08 12:31:29

1

有一個Railscast about this topic,將自定義操作添加到其他RESTful控制器。

編輯:我看到你已經提到Railscast中的方法已經成爲一種解決方法。 :-)我相信唯一的另一種「純粹」的方式來處理它,就是根據需要添加額外的控制器來支持你想要的動作。

1

「我通常通過添加另一個實現這一目標:收集到的路線,但它似乎是一個解決辦法,並在場景中我有5.」

這聽起來完全沒有給我。 REST不是關於粗暴操作,而你的擔憂似乎源於這樣一個事實,即你正在做的不是基本的粗暴操作,而是沒有任何問題。

3

我認爲Rails社區對於如何以及在何處使用「RESTful」這個詞有些困惑。嚴格地說,唯一可以RESTful的是你的網絡API(正如railsninja已經提到過的那樣)。符合REST約定(具有REST API的應用程序)的應用程序的代碼通常可以組織爲一組控制器(匹配資源)和這些控制器中的方法(匹配HTTP協議的四個動詞)不過是如何保持應用程序清潔和有組織的暗示。

如果我們想談論一個RESTful Rails應用程序,我們不能只談論RESTful控制器 - 沒有什麼RESTful關於控制器本身。只有一個控制器的複雜Web應用程序(以及衆多的方法)可以代表很多資源,並且完全可以實現RESTful。

也就是說,將更多方法添加到控制器是相當不錯的。有時候,提取一些額外的方法並創建一個全新的控制器是很好的 - 只要你感覺良好就可以做到這一點(拇指規則:只要你能夠用一些自給自足的資源來識別它,即一個資源可以僅靠它自己存在)。有時候,將一些資源提取到不同的控制器是愚蠢的。假設你有一個具有狀態屬性的資源。將此狀態屬性作爲資源本身並對其執行至少一個操作(更新)是有意義的,但是將其提取到不同的控制器將無濟於事。

相關問題