我是Rails 3的新手,我正在尝试理解以RESTful方式设计应用程序的优势。我不需要API / Web服务。不需要XML或JSON。
我正在构建的应用程序根本不使用CRUD。它是一个应用程序,通过套接字连接收集交易数据,并以多种不同的方式将其显示给用户。
我想以不同的方式可视化交易,例如:
在“Rails方式”中,我似乎会有一个非常重载的索引操作。或者我可以反对约定,只是在交易控制器中创建方法,如most_recent,highest_yielding,most_active等。但这似乎违背了在Rails 3中设计应用程序的整个哲学。
看起来Rails中RESTful方法背后的想法是基于CRUD的,并且当不涉及CRUD时就会失败。除了遵循惯例之外,将应用程序设计为“RESTful”真的有优势吗?我真的没有看到这里的优势。
另外,如果我确实需要API,我会想到设计一个带有API的API要好得多。我的API不会是我的网站的直接1对1匹配,它是为人类消费而不是机器而构建的。
我很欣赏这方面的任何见解。也许我在这里错过了什么?
答案 0 :(得分:1)
当涉及资源时,实际涉及CRUD。而且由于几乎每个应用程序都有资源可以参与CRUD,并且通常(如果你问我),这是最好的方法。
这个想法是资源有某些行动。您可以查看资源,编辑资源,删除资源等等。像most_recent(或这个范围)的方法应该在模型而不是控制器中使用。然后,如果您需要使用该集合,您只需调用类似:
@recent_posts = Post.most_recent
在您的控制器中。您的控制器不应该有太多代码,实际上根本没有业务逻辑。
RESTful非常好,因为它自然地处理资源。控制器实际上应该处理资源。如果您认为可以编辑或创建某些内容,则应由控制器处理。
一般来说,我强烈建议你深入了解一下,你肯定会看到自己的优势。
答案 1 :(得分: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')
答案 2 :(得分:0)
您的设计应始终首先考虑您的应用程序的要求和框架的理念。
如果哲学不符合您的要求或您认为是开发应用程序的最佳方式,那么要么忽略它,要么如果框架使您构建的内容太难以按照您认为的那样(这不是在Rails imho的情况下,切换到另一个框架。
所有这些与REST没有多大关系。有关为什么REST被认为是一个好主意(对于某些事物而非所有事情)的更多信息,请参阅以下SO Q& A:Why would one use REST instead of Web services和What exactly is RESTful programming。