【问题标题】:Restful resources rails宁静的资源轨道
【发布时间】:2018-02-11 22:25:16
【问题描述】:

让这个 api 'restful' 的正确方法是什么

我有一个位置,

GET location/:id
PUT location/:id

规范已更改,现在此位置可以具有客户端可以更新的某些“类型”。一个要求是客户端获得所有位置的允许类型(可以是固定列表中的其中一种 - 即['urban'、'wilderness'、'private'等])。这不是嵌套资源,它是位置表上的一列。我已经实现了,

GET location/types_allowed

有更好的RESTFUL方式吗?

另一个例子,一个位置可以有邻居,所以我做了 GET locations/neighbors。除了 CRUD 和嵌套资源之外,我无法理解 REST 的细微差别。谢谢!

【问题讨论】:

    标签: ruby-on-rails rest


    【解决方案1】:

    创建type资源,而不是types_allowed的列,关系可以像

    location.rb
      belongs_to :type
    
    type.rb
      has_many :locations
    

    这样你的路由文件就是

    resources :type do
      resources :location
    end
    

    【讨论】:

    • 有趣,所以如果我想在位置上做一个 PUT,我会做 PUT type/:id/location/:id 吗?此外,一个位置可以有多种类型或只有一种,类型是枚举并且不会改变
    • 是的,您将使用该 url 进行 PUT,在上面的示例中,location 将只有一个 type,如果 location 需要属于多个类型,则你应该在两边都使用 has_many,看看这里的指南guides.rubyonrails.org/…
    • @whoaaallamapajama 几乎但不完全...将指定的资源视为事物的集合,例如您的位置资源是位置的集合。因此,如果您要创建一个新位置,您就是在 PUT 将一个新位置放入集合中。与您的 type 资源相同。因此,如果您要创建一个新的type,您将使用:PUT types, type_params。如果您随后拥有特定 type 的位置集合,则您会将位置放置到该特定类型的位置......因此 PUT types/:id/locations, location_params
    • 我想我明白你在说什么,我觉得谈话有点偏离原始问题的轨道。位置具有属性,客户端需要知道允许更新该属性的哪些选项。假设属性 A 只能是 [2,3,4]。客户获得属性 A 的选项给客户@Subash Taryn East 有什么好处
    【解决方案2】:

    我强烈建议不要将模型/列命名为“类型”。这往往会破坏在您尝试之前您甚至不知道存在的铁轨内的神奇事物。这是那些“未记录的功能”之一:P

    我建议阅读“单表继承”或“多态性”,以确定其中任何一个是否适合您。

    如果不是...然后命名为“种类”而不是“类型”,因为这样会更好。

    至于 RESTful 资源...你真的不能超越 Rails 指南。如果您关注routing guide:(以及所有其他人),您将了解如何使用 RESTful 资源

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-30
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多