鉴于带有评论的照片的典型嵌套资源,创建评论的路径如下所示:
POST /photos/{photo_id}/comments
现在,为了删除评论,你还会使用“嵌套”路线吗?例如:
DELETE /photos/{photo_id}/comments/{comment_id}
或
DELETE /comments/{comment_id}
嵌套路由的优点是它镜像创建URL,并且不需要routes.rb中的任何其他条目。使用顶级网址的专家是,从技术上讲,您不需要photo_id来删除评论。
思想?
答案 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_id
和comment_id
组合键中的唯一ID 。我建议不要让数据库模型泄漏到资源模型,并寻找适合您对资源的概念理解的模型。
答案 2 :(得分:1)
就个人而言,我只是使用嵌套路由进行删除,意味着我使用了:
DELETE /photos/{photo_id}/comments/{comment_id}
删除照片的评论。如果我使用:
DELETE /comments/{comment_id}
所以我必须为此创建一条路线?我没有找到任何理由为删除创建单独的路由,我认为没有必要。嵌套资源为我们创建了url和路径,它们遵循惯例,为什么我们不使用它们呢?我只是想保持简单,不会为现有的东西做额外的工作。