http - REST URL 结构建议

标签 http url rest

我正在尝试为我正在处理的网站的心愿单部分确定一个 Restful url 结构。这是一个非常简单的模型,一个用户可以有很多愿望 list ,每个愿望 list 可以包含很多产品。

目前我有明显的 CRUD URL 来操纵愿望 list 本身:

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 中的资源,我会指对该资源的操作 :(

关于以上哪项更正确的任何建议都将非常有帮助! (如果有第三种选择比我的更好,请随时纠正我!)

最佳答案

(1) 是 REST 的唯一有效方法,使用 HTTP 动词进行操作。

(2) 将方法名称编码到 URI 中,这更像 RPC,当然不是 RESTful。

关于第一种方法的缺点:

  • DELETE 动词很好,因为您的资源是愿望 list 中的项目,而不是项目本身。
  • 您可以支持批量请求。例如,您可能希望允许将项目列表POST 到愿望 list 资源,从而导致多次添加。

PS:优先使用 HTTP 内容协商(Accept 和 Content-Type header ),而不是 URI 中编码的表示格式。

关于http - REST URL 结构建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7108932/

相关文章:

web-services - 什么是 REST API 错误处理最佳实践?

WooCommerce 属性的 WordPress URL 重写

docker - SEO URL 在带有 Docker 的 OpenCart 2.3 中给出 404 错误

c# - Web API Controller 不适用于 ASP.NET Web 窗体中的 POST/PUT/DELETE

java - 使用 Spring-Data-Rest 以 XML 而不是 JSON 的形式返回响应

angularjs - typescript :数据未分配给类变量

http - 使用 HTTP 流水线的缺点是什么?

ruby-on-rails - 即时更改 http_basic_authenticate_with 凭据,rails

javascript - 单个正则表达式获取页面 URL 但从完整 URL 中排除端口号

rest - RESTful API路由设计:嵌套与非嵌套