【问题标题】:Opinions on RESTful route for DELETEing of nested resources?关于删除嵌套资源的 RESTful 路由的意见?
【发布时间】:2012-11-10 16:48:51
【问题描述】:

给定带有 cmets 的照片的典型嵌套资源,创建评论的路径如下所示:

POST /photos/{photo_id}/comments

现在,为了删除评论,你还会使用“嵌套”路由吗?例如:

DELETE /photos/{photo_id}/comments/{comment_id}

DELETE /comments/{comment_id}

嵌套路由的优点是它反映了创建 URL,并且不需要 routes.rb 中的任何其他条目。使用顶级 URL 的优点在于,从技术上讲,您不需要 photo_id 来获取要删除的评论。

想法?

【问题讨论】:

  • 您的问题得到解答了吗?

标签: ruby-on-rails rest


【解决方案1】:

如何为comments 资源建模很大程度上取决于您如何看待资源comments

如果评论可能存在而没有照片,并且可能与 photo 等 0 到 N 个资源相关联,那么您应该像这样为您的 cmets 建模

GET    /comments/{comment_id}
DELETE /comments/{comment_id}

PUT    /comments/

POST   /comments/{comment_id}/associations/photo/{photo_id}

如果评论总是与资源相关联并且不与资源相关联就无法存在,那么您应该坚持使用

POST   /photos/{photo_id}/comments

DELETE /photos/{photo_id}/comments/{comment_id}

我猜想如何为评论建模的困惑是由数据库模型驱动的,其中每个评论都有一个唯一的 ID,该 ID 在所有 cmets 中是唯一的,而不仅仅是在 photo_idcomment_id 组合键中唯一。我建议不要让数据库模型泄漏到资源模型中,而是选择适合您对资源的概念理解的模型。

【讨论】:

  • +1 表示'不让数据库模型泄漏到资源模型'
【解决方案2】:

你能GET这个吗?

GET /comments/{comment_id}

我猜不是。但如果你不能GET 一个资源,你也不能DELETE 它。

所以只有你的第二个选择是 RESTful。

【讨论】:

    【解决方案3】:

    就个人而言,我只是使用嵌套路由进行删除,意味着我使用过:

    DELETE /photos/{photo_id}/comments/{comment_id}
    

    删除照片的 cmets。如果我使用:

    DELETE /comments/{comment_id}
    

    所以我必须为此再创建一条路线?我没有找到任何理由为删除创建单独的路线,我认为没有必要。嵌套资源已经为我们创建了 url 和 path,它们是遵循约定的,我们为什么不使用它们呢?我只是想保持简单,不会为已有的东西做额外的工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-07
      • 2017-12-17
      • 1970-01-01
      • 2016-04-05
      • 2013-01-31
      • 2015-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多