2011-04-23 72 views
0

我是Rails 3的新手,我試圖理解以RESTful方式設計應用程序的優點。我不需要API/Web服務。不需要XML或JSON。Rails 3 RESTful設計首選?

我正在構建的應用程序完全不使用CRUD。它是一款通過套接字連接收集交易數據並以多種不同方式將其顯示給用戶的應用程序。

我想可視化的行業以不同的方式,如:

  • 最近
  • 由國家最高產的
  • 交易
  • 活躍交易
  • 數百萬美元的交易
  • 屬於一般責任債券的交易
  • etc ...

在「Rails方式」中,似乎我會有一個非常重載的索引操作。或者我可以違背慣例,只是在交易控制器中創建像most_recent,highest_yielding,most_active等方法。但是這似乎違背了在Rails 3中設計應用程序的整個理念。

這似乎只是想法在Rails中採用REST風格的方法基於CRUD,並且在不涉及CRUD的情況下不會出現。除了遵循約定之外,將應用設計爲「RESTful」還有什麼好處嗎?我並沒有真正看到這裏的優勢。

另外,如果我確實需要一個API,我會想象,設計一個帶有API的API會好得多。我的API不會是我的網站的直接1對1比賽,這是爲人類消費而設計的。

我很感謝這方面的任何見解。也許我在這裏錯過了一些東西?

+0

涉及到CRUD - 您列出的「可視化」交易的所有方式均包含在CRUD的「R」部分,即「讀取」。 – 2011-04-23 22:38:39

+0

我想問這個問題的更好的方法是:處理「閱讀」沉重的資源的最佳方式是什麼?他們是否都指向帶有許多IF語句的單一索引操作?這似乎很混亂。這更多的是我得到的。 – Dan 2011-04-23 22:51:28

回答

1

當涉及到資源時,CRUD實際上涉及到。而且由於實際上每個應用程序都有資源CRUD可以參與,並且通常(如果你問我)是最好的方式。

這個想法是資源有某些行爲。您查看資源,編輯資源,刪除資源等等。諸如most_recent(或此範圍的範圍)的方法應該用於模型而不是控制器。然後,如果您需要使用該集合,則只需調用如下內容:

@recent_posts = Post.most_recent 

在您的控制器中。你的控制器不應該有太多的代碼,實際上根本就沒有業務邏輯。

RESTful非常好,因爲它自然處理資源。控制器實際上應該處理資源。如果您認爲某些東西可以編輯或創建,那麼它應該由控制器處理。

一般來說,我強烈建議你深入瞭解一下,你一定會看到你自己的優勢。

1

我有想法如何做到這一點。代碼沒有測試,我只是寫它沒有運行。

控制器:

# trades_controller.rb 
def index 
    # all scopes defined in model will be allowed here 
    # not good idea if you don't want it 
    if Trade.scopes.has_key?(params[:scope].to_sym) 
    @trades = Trade.send(:params[:scope]) 
    else 
    # render error or what you want 
    end 
end 

型號

# trade.rb 
    scope :most_recent, order(:created_at) 
    # more scopes 

查看

# index.html.erb 
link_to 'Most recent', trades_path(:scope => 'most_recent') 
+0

這很有道理。我想我可以根據範圍來決定渲染哪個視圖。 – Dan 2011-04-23 22:54:54

0

你的設計應該時刻考慮到應用程序的要求,第一和框架第二的理念。

如果哲學不符合您的要求或者您認爲是開發應用程序的最佳方式,那麼要麼忽略它,要麼如果框架使得構建起來太困難,您認爲應該在Rails imho中不是這樣),切換到另一個框架。

所有這些與REST沒有多大關係。有關爲什麼REST被認爲是一個好主意(對於某些而非全部事物)的更多信息,請參閱以下SO Q & A:Why would one use REST instead of Web servicesWhat exactly is RESTful programming