我不相信这post完全回答了这个问题。
场合
问题
有时会创建重复的资源并最终被引用。
解决方案
公开允许资源合并的端点"合并"。这将执行以下操作:
问题
怎么会这样做呢?我想做类似的事情:
PUT http://endpoint/resource/{id1}/merge/{id2}
{
//new merged resource
}
保留资源id1 =
,资源id2 =
。或者,如果它更有意义,反之亦然。
然而,我担心的是合并行为会更新PUT上的两种资源。这是否违反了规则并且有更好的规定方法吗?
答案 0 :(得分:3)
在我看来,RESTful范例非常适合为人们提供有关API可能行为方式的指导,但是将所有内容强加到其中并不会带来更好的开发人员体验。
我更愿意看到记录良好的POST动作,超出标准的四个动词。这是我的投票:
POST http://endpoint/resources/{id1}/merge
{
"merge_id": {id2}
}
如果这种情况很常见,这也让您可以自由支持多ID版本。
POST http://endpoint/resources/{id1}/merge
{
"merge_ids": [
{id2}, {id3}, {id4}
]
}
答案 1 :(得分:1)
“合并”资源怎么样?
POST http://endpoint/merges/
{
"merge_ids": [
11, 12, 13, 14
]
}
201 Created
Location: http://endpoint/merges/486C23F8-A5FD-11E4-A65F-14CD89BEA664
此资源将具有可以查询的单独状态:
GET http://endpoint/merges/486C23F8-A5FD-11E4-A65F-14CD89BEA664
200 OK
{
"merge_ids": [
11, 12, 13, 14
],
"state": "merged"
}
对主要资源的请求将返回它,对任何辅助(合并)资源的请求将返回带有301
主要资源标头的Location
。