【发布时间】:2010-08-11 12:19:35
【问题描述】:
我们的部分 RESTful API 将允许用户使用序列号注册商品。由于序列号不是全局唯一的,它不能用作资源的标识符,所以我们将使用 POST 到将生成标识符的父资源,例如
POST /my/items
<item serial-number="ABCDEF" />
在项目尚未注册的情况下,HTTP 语义定义良好。我们返回一个 Location 头,并将注册的项目作为实体主体,例如
HTTP 201 Created
Location: /my/items/1234
<item id="1234" serial-number="ABCDEF" />
但是,在项目已经注册的情况下,API 应该是幂等的,并且返回之前注册的项目而不创建新项目。我最好的猜测是它应该返回一个 200 OK 状态码,并使用 Content-Location 标头来指示项目实际来自哪里,例如
HTTP 200 OK
Content-Location: /my/items/1234
<item id="1234" serial-number="ABCDEF" />
这看起来合理吗?我不完全清楚 Location 或 Content-Location 是否更适合第二种情况。
【问题讨论】: