REST合并资源-PUT上的多个更新

Bro*_*ski 5 rest merge

我认为这篇文章无法完全回答问题。

情况

  • 端点公开单个资源,Id是唯一的。
  • 名称是唯一的,但可以更改。
  • 外部应用程序可以并且确实存储对资源ID的引用。

问题

有时会创建重复的资源并最终被引用。

公开允许资源“合并”的端点。这将执行以下操作:

  1. 将“ xyz”(正在淘汰的资源)标记为“ abc”(正在保留的资源)的副本。
  2. 更新“ abc”,使其成为合并资源的外观。
  3. 检索“ xyz”的任何GET都会导致302重定向到“ abc”

问题

一个人如何做到这一点呢?我想做类似的事情:

PUT http://endpoint/resource/{id1}/merge/{id2}

{
    //new merged resource
}
Run Code Online (Sandbox Code Playgroud)

id1 =资源在哪里保存,id2 =资源在哪里。另外,如果更有意义,也可以反之亦然。

但是,我担心的是,合并的行为会更新PUT上的两种资源。这是否违反规则,是否有更好的规定方法?

Ell*_*son 5

在我看来,RESTful 范式非常适合为人们提供有关您的 API 可能行为方式的指导,但将您所能做的一切都强加于其中并不会带来更好的开发人员体验。

除了标准的四个动词之外,我更愿意看到记录良好的 POST 操作。这是我的投票:

POST http://endpoint/resources/{id1}/merge
  {
     "merge_id": {id2}
  }
Run Code Online (Sandbox Code Playgroud)

这也让您可以自由地支持多 ID 版本,如果这很常见的话。

POST http://endpoint/resources/{id1}/merge
  {
    "merge_ids": [
      {id2}, {id3}, {id4}
    ]
  }
Run Code Online (Sandbox Code Playgroud)

  • 这与我昨晚想到的非常相似,也与@Lutz 的答案相似。我要做的唯一更改是使用 PUT 而不是 POST,因为该命令不会生成新资源并且它是幂等的。 (2认同)