Rails:如何保持复杂的应用程序RESTful?

时间:2009-05-09 23:37:02

标签: ruby-on-rails ruby

我总是尽量让我的应用程序成为RESTful,但我最近开始研究一个复杂的项目,在我的控制器中需要多个额外的方法。

我通常通过在路线中添加另一个:集合来实现这一点,但它似乎是一种解决方法,并且在场景中我有5个。

是否有处理控制器中额外方法的最佳实践?它们通常是更新模型的简单形式。

4 个答案:

答案 0 :(得分:6)

另一个解决方案,就是我所做的,每次你发现自己创建的动作都不适合RESTful动作,例如搜索,所以你可能会发现自己在文章控制器上做了一个搜索动作,您可以执行而不是创建此操作,而是创建一个Search控制器,并在其中使用RESTful操作。没有规则说您需要使用所有操作,您可能只需要一两个,但它会使您的API保持RESTful并且您的代码有条理。

这不是一个严格的规则,但当我尝试决定把东西放在哪里时,我当然觉得它很有帮助。

答案 1 :(得分:3)

我认为Rails社区中有一些关于如何以及在何处使用“RESTful”这个词的混淆。严格来说,唯一可以是RESTful的是你的 web API (正如railsninja已经提到的那样)。符合REST约定的应用程序代码(使用REST API的应用程序)通常可以组织成一组控制器(与资源匹配)和这些控制器中的方法(与HTTP协议的四个动词相匹配)只不过是一个如何保持你的应用程序干净整洁的暗示。

如果我们想谈谈RESTful Rails应用程序,我们不能只讨论RESTful控制器 - 关于控制器本身没有任何RESTful。有一个复杂的Web应用程序可能只有一个控制器(和无数的方法)代表许多资源,并且完全是RESTful。

也就是说,向控制器添加更多方法是可以的。有时,最好提取一些额外的方法并创建一个全新的控制器 - 在你感觉良好的时候做这个(拇指规则:只要你能用一些自给自足的资源识别它,就创建新的控制器,即一种可以单独存在的资源。但有时候,将一些资源提取到不同的控制器是很愚蠢的。假设您有一个具有status属性的资源。将此状态属性本身视为资源并对其执行至少一个操作(更新)是有意义的,但将其提取到不同的控制器不会有任何好处。

答案 2 :(得分:1)

Railscast about this topic,向其他RESTful控制器添加自定义操作。

编辑:我看到你已经在Railscast中提到了一种解决方法。 :-)我相信处理它的唯一其他“纯”方法是根据需要添加额外的控制器来支持你想要的动作。

答案 3 :(得分:1)

“我通常通过在路线上添加另一个:集合来实现这一目标,但它似乎是一种解决方法,在场景中我有5个。”

这听起来对我很好。 REST并不是关于crud操作,你的担忧似乎源于你做的不仅仅是基本的crud操作,而且没有任何问题。