1

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

POST /photos/{photo_id}/comments

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

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

或者

DELETE /comments/{comment_id}

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

想法?

4

3 回答 3

3

您如何为资源建模在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}

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

于 2012-11-14T07:07:13.310 回答
2

GET这个可以吗?

GET /comments/{comment_id}

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

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

于 2012-11-10T19:20:49.017 回答
1

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

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

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

DELETE /comments/{comment_id}

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

于 2012-11-10T17:48:54.107 回答