【发布时间】:2011-10-29 20:26:01
【问题描述】:
我正在尝试为我正在处理的网站的愿望清单部分确定一个宁静的 url 结构。这是一个非常简单的模型,一个用户可以有许多愿望清单,每个愿望清单可以包含许多产品。
目前我有明显的 CRUD URL 来操纵愿望清单本身:
GET account/wishlists.json
GET account/wishlists/{id}.json
POST account/wishlists.json?name=My%20Wishlist
POST account/wishlists/{id}.json?name=My%20New%20Name
DELETE account/wishlists/{id}.json
但是,我认为我不知道如何构建将产品添加/删除到愿望清单的 URL :(
这是我目前的选择:
1) 将产品添加为 URL 的一部分并使用 HTTP 动词来定义我的操作
POST account/wishlist/{id}/product/{product_id}.json
DELETE account/wishlist/{id}/product/{product_id}.json
或
2) 将操作作为 URL 的一部分,将产品 ID 作为有效负载的一部分
POST account/wishlist/{id}/add.json?product_id={product_id}
POST account/wishlist/{id}/remove.json?product_id={product_id}
(1) 很干净,据我所知,它非常 RESTful,但不允许轻松添加多个产品等操作。
我也有点担心使用 DELETE 动词 - 我没有删除产品或愿望清单,我只是从另一个中删除一个。
(2) 更明确,但与 REST 不同——我不仅仅指 url 中的资源,我指的是对该资源的操作:(
任何关于上述哪个更正确的建议都会非常有帮助! (如果有比我更好的第三种选择,请随时纠正我!)
【问题讨论】:
-
懒得给出完整的答案,但要明确一点,选项二决不能被视为 REST,因为您在 URI 中有一个操作。