关于删除嵌套资源的RESTful路由的意见?

时间:2012-11-10 16:48:51

标签: ruby-on-rails rest

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

POST /photos/{photo_id}/comments

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

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

DELETE /comments/{comment_id}

嵌套路由的优点是它镜像创建URL,并且不需要routes.rb中的任何其他条目。使用顶级网址的专家是,从技术上讲,您不需要photo_id来删除评论。

思想?

3 个答案:

答案 0 :(得分:2)

你可以GET吗?

GET /comments/{comment_id}

我猜不是。但是,如果你不能GET资源,那么你也不能DELETE

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

答案 1 :(得分:2)

您对comments资源进行建模的方式很大程度上取决于您如何看待资源comments

如果评论可能没有照片而且可以与0到N资源(例如photo)相关联,那么您应该像这样建立评论

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在所有评论中都是唯一的,而不仅仅是photo_idcomment_id组合键中的唯一ID 。我建议不要让数据库模型泄漏到资源模型,并寻找适合您对资源的概念理解的模型。

答案 2 :(得分:1)

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

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

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

DELETE /comments/{comment_id}

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