2011-05-28 48 views
6

在制作电子书的过程中,用户必须编辑其内容,编辑其元数据,选择营销选项(如定价和分发)并发布。为了保持RESTful,创建无意义的单例资源是否可行? Rails

我开始把书资源内的每个一切(内容元数据,营销方案等)

然后流程(内容元数据,市场营销)的每一步都是内部BooksController中的作用。

但是,在属性和操作方面,书籍开始增长很多。

我想知道,如果它是更好的创造单资源,迫使RESTfulness,每个相关的各自的书。

的路线将是:

  • /电子书/ 12 /内容/编辑
  • /电子书/ 12 /元/编辑
  • /电子书/ 12 /营销/编辑

这看起来更优雅,因为每个“资源”都是RESTful,每个属性都很少。但资源不是物品(市场?)。

你的事没关系,只是创造意义的资源是REST风格,并保持代码的订单?

是否有将类似的属性更好的办法不是创建资源了出来?谢谢。

+2

真是个好问题 - 我一直在想这个问题... – sscirrus 2011-05-28 23:49:32

+0

+1。我宁愿保持他们的安宁,并且在控制器中,但我想看看其他人在做什么。所有的动作也都在控制器中。唯一的例外是嵌套的资源,它们拥有自己的控制器。我目前的项目有一个资源块,有两条收集路线和七条成员路线。 – Preacher 2011-05-29 01:27:50

+0

好奇:你为什么称他们为“毫无意义”(因为他们没有“好”的复数?),你为什么称他们为单身?您是否担心它们与系统内部的对象(例如Book类)不相对应? – 2011-05-29 01:32:31

回答

1

我移植了大量的PHP应用Rails和我们有一个公平一些“临时”的资源,如管理员需要登录与他们权限的其他用户,以纠正问题的能力等我总是会抱怨说,像其他用户一样登录的功能不应该作为动作loginAsUserlogOutOfUserAccount捆绑到一个巨大的单片式AdminController中。在我们的Rails应用程序中,我们尝试尽可能地根据资源进行可视化,所以使用我刚刚给出的示例,我们有一个Admin命名空间,其下有一个UsersController(/ admin/users /:id)和作为子资源的用户,我们有一个UserOverride资源(/ admin/users /:user_id/override)......感觉真的合乎逻辑,我们只是POST和DELETE到这个资源。

于是又回到了你的榜样,是的,我想你应该打破这些部分分解成独立的资源。它看起来像BookContent应该是Book的子资源,而MarketingOptions也是。

resources :books do 
    resource :content 
    resources :marketing_options 
end 

这既是更好跟(模块化)的工作,更容易刚从看着独自路线可视化。您还可以得到真正的可预见的路径佣工的好处:

<%= link_to("Marketing Options", book_marketing_options_path(@book)) %> 

你不能尝试各种可能的途径强行进入一个RESTful资源的思想,但...如果它感觉像它被迫的,那么它可能是。

有一个体面的博客文章,我想链接到(尽管一些语法不好),实际上做了一个相当不错的工作,向你展示如何从资源角度考虑你的应用程序......虽然我找不到它。如果/当我这样做,我会添加评论。

编辑|只需重新阅读你原来的问题,并想澄清:resource!=数据库中的行。资源就是你可以想象成的“事物”......我知道这是一个非常广泛的声明,但就像OOP中的对象不必代表具体/材料,也不需要RESTful设计中的资源。

+0

这里是我所指的博客文章:http://blog.jamesalmond.com/resourceful-routing-with-rails/ – d11wtq 2011-05-29 05:00:25

+0

谢谢d11wtq!我期待着更多的讨论,但你的回答对我的特殊问题非常有帮助。 – Victor 2011-05-31 17:36:25

相关问题