REST 合并资源 - PUT 上的多个更新
REST Merge Resources - Multiple updates on PUT
我不相信这个 post 完全回答了这个问题。
情况
- 端点公开单个资源,ID 是唯一的。
- 名称是唯一的,但可以更改。
- 外部应用程序可以并且确实存储对资源 ID 的引用。
问题
有时会创建重复的资源并最终被引用。
解决方案
公开允许资源的端点"merged"。这将执行以下操作:
- 将 'xyz'(被淘汰的资源)标记为 'abc'(被保留的资源)的副本。
- 将 'abc' 更新为合并资源的外观。
- 任何检索 'xyz' 的 GET 都会导致 302 重定向到 'abc'
问题
如何才能安心地做到这一点?我想做类似的事情:
PUT http://endpoint/resource/{id1}/merge/{id2}
{
//new merged resource
}
其中 id1 =
被保留的资源和 id2 =
被保留的资源。或者,如果更有意义的话,反之亦然。
但是我担心的是合并行为会更新 PUT 上的两个资源。这是否违反了规则,是否有更好的规定方法来做到这一点?
在我看来,RESTful 范式非常适合为人们提供关于您的 API 可能行为方式的指南,但是强制您尽一切可能投入其中并不会带来更好的开发人员体验。
我更愿意看到除了标准的四个动词之外的所有内容都有详细记录的 POST 动作。这是我的投票:
POST http://endpoint/resources/{id1}/merge
{
"merge_id": {id2}
}
这也让您可以自由地支持多 ID 版本,如果这很常见的话。
POST http://endpoint/resources/{id1}/merge
{
"merge_ids": [
{id2}, {id3}, {id4}
]
}
"merge" 资源怎么样?
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"
}
对主要资源的请求将 return 它,对任何辅助(合并)资源的请求将 return 301
和 Location
header 的主要资源。
我不相信这个 post 完全回答了这个问题。
情况
- 端点公开单个资源,ID 是唯一的。
- 名称是唯一的,但可以更改。
- 外部应用程序可以并且确实存储对资源 ID 的引用。
问题
有时会创建重复的资源并最终被引用。
解决方案
公开允许资源的端点"merged"。这将执行以下操作:
- 将 'xyz'(被淘汰的资源)标记为 'abc'(被保留的资源)的副本。
- 将 'abc' 更新为合并资源的外观。
- 任何检索 'xyz' 的 GET 都会导致 302 重定向到 'abc'
问题
如何才能安心地做到这一点?我想做类似的事情:
PUT http://endpoint/resource/{id1}/merge/{id2}
{
//new merged resource
}
其中 id1 =
被保留的资源和 id2 =
被保留的资源。或者,如果更有意义的话,反之亦然。
但是我担心的是合并行为会更新 PUT 上的两个资源。这是否违反了规则,是否有更好的规定方法来做到这一点?
在我看来,RESTful 范式非常适合为人们提供关于您的 API 可能行为方式的指南,但是强制您尽一切可能投入其中并不会带来更好的开发人员体验。
我更愿意看到除了标准的四个动词之外的所有内容都有详细记录的 POST 动作。这是我的投票:
POST http://endpoint/resources/{id1}/merge
{
"merge_id": {id2}
}
这也让您可以自由地支持多 ID 版本,如果这很常见的话。
POST http://endpoint/resources/{id1}/merge
{
"merge_ids": [
{id2}, {id3}, {id4}
]
}
"merge" 资源怎么样?
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"
}
对主要资源的请求将 return 它,对任何辅助(合并)资源的请求将 return 301
和 Location
header 的主要资源。