如何RESTful-ize复杂的控制器

时间:2009-06-29 17:51:43

标签: ruby-on-rails rest

我有一个带动作的控制器:

class GameController < ApplicationController
before_filter :set_titles

def prestart
end

def wait
end

def play (game)
end


def button
end

def finish
end


def set_titles
end

set_titles将获取页面标题(以及所有操作的其他常规属性) 所有其他操作都会检查某些内容并呈现视图。

如何RESTful-ize这个。 我只能想到创建一个Wait_player控制器,一个play_game控制器等,所有这些只会有一个show动作。但这看起来很笨拙,更难以在同一个控制器中跟踪所有这些相关的动作。

3 个答案:

答案 0 :(得分:5)

首先,我会考虑RESTful设计是否是此控制器的最佳选择。有些域名并不能很好地适应REST,如果你试图将它们插入其中,那么就会增加工作和混乱。我不太清楚你的应用程序可以回答这个问题,但这是值得思考的问题。

如上所述,REST涉及名词。看看你发布的内容,我看到的主要名词是游戏。因此,要使其成为RESTful,您所谓的“预启动”可能是new,而您的“播放”可能是create。 “完成”可以是destroy。 “等待”可能只是“等待”。并非RESTful控制器中的每个操作都必须是标准的七个操作之一。我认为没有任何RESTful等同于“等待”。

您还有按钮。如果不了解更多关于你的应用程序的话,很难说,但也许应该得到自己的控制器。通常使用RESTful Rails应用程序,每个不同的实体都可以使用七个标准操作中的一个或多个获得自己的控制器。

“如何RESTful-ize这个。我只能考虑创建一个Wait_player控制器play_game控制器等。”

这种方法更像是考虑为你想要做的每个动作创建一个控制器。 Intead,尝试为你想要采取行动的每个事物考虑一个控制器。例如,代替WaitPlayer控制器,将其设为Player控制器shownewcreate等等(标准RESTful操作),然后另外可能是wait动作。

答案 1 :(得分:2)

这不仅仅是看起来笨拙而且更加困难,确实如此。 REST不适用于所有内容

但你可以绑定pre_start来创建,完成删除,播放更新并等待显示, 然后你仍然把按钮动作放在某处(我建议发明一个更好的名字)

PS:set_titles应为private

答案 2 :(得分:1)

您需要考虑系统中的名词,而不是动词。 REST处理名词 - 创建,阅读,更新和删除事物。你系统中有什么东西?

看起来你有标题和游戏等。

RESTful API需要采用不同的方式来解决问题。

这个link讨论了RESTful WCF服务,但是关于以RESTful方式思考的内容也应该适用于您的域。