替换 REST 中的不可变资源 API

Replace immutable resource in REST API

我有一个 REST API,它允许创建和更新一些资源,比方说汽车。

POST /cars
POST /cars/:id

汽车有一个 ID 字段,由服务器在创建时生成。

我想允许一些使用这些汽车的业务流程将每辆汽车 "revision" 视为不可变的,但允许通过 REST API 更改汽车,以便新的 "revision" 被创建。这些修订是按时间表进行的,并且取决于何时进行更改,业务流程将使用或不使用它。

我想听听对此的一些想法以及如何去做。

一个有点老套的解决方案当然是让汽车保持不变,ID 可以说是 "revision" 句柄。更新会产生具有不同 ID 的新车。当然,用一个 ID 调用 API 并取回另一个 ID 有点奇怪。

有什么想法和建议?谢谢!

更新

好的,在查看了查看修订的建议以及 StackExchange 如何使用这些修订来跨问题和答案进行修订之后,我想知道如何根据哪个对象实际处理 carsrevisions有哪些字段以及如何找到例如ID.

标识的特定汽车的最新版本

例如,一辆汽车有:

car:
  id: 1
  brand: Toyota
  model: Yaris
  price: 1000

假设价格会随着时间的推移而变化,这应该通过汽车的修改来体现,例如:

revision:
  car_id: 1
  revision: 1
  price: 900

假设我想要 ID 为 1 的最新车,它应该给我现在售价 900 而不是 1000 的 Toyota Yaris。这些是数据库中现在的预期值吗,即两行和最新的修订版(如果找到)会覆盖另一个吗?这是如何工作的?

更新2

好的,所以修订只是为了跟踪历史,最新信息在 cars 条目本身。 IE。发生更新时,除了更新汽车条目外,还会使用以前的值创建新修订版。两者都在交易中完成。

您为什么不以与 Stack Exchange 类似的方式处理它 API?

GET /posts/{ids}/revisions

还有一个端点仅用于检索修订:

GET /revisions/{ids}

文档:


除了 静态映射,例如 /revisions/1/revisions/2,您的 API 可以提供指向 current/latest 修订版,例如 /revisions/current/revisions/latest.

资源可以有一个 mapping whose value changes over time,这是 current/latest 修订版的标识符。