【问题标题】:Replace immutable resource in REST API替换 REST API 中的不可变资源
【发布时间】:2017-09-25 10:18:44
【问题描述】:

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

POST /cars
POST /cars/:id

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

我希望允许使用这些汽车的一些业务流程将汽车的每个“修订版”视为不可变的,但允许通过 REST API 对汽车进行更改,以便创建新的“修订版”。这些修订是在时间线上进行的,并且取决于何时进行更改,业务流程将使用或不使用它。

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

一个有点老套的解决方案当然是保持汽车不可变,ID 就是“修订”句柄。更新会产生具有不同 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。当更新发生时,除了更新汽车条目之外,还会使用以前的值创建一个新修订版。两者都在事务中完成。

【问题讨论】:

    标签: rest api crud


    【解决方案1】:

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

    GET /posts/{ids}/revisions
    

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

    GET /revisions/{ids}
    

    文档:


    除了静态映射,例如/revisions/1/revisions/2,您的API 还可以提供指向当前/最新版本的URI,例如/revisions/current/revisions/latest

    一个资源可以有一个mapping whose value changes over time,它是当前/最新版本的标识符。

    【讨论】:

    • 您能否描述一下流程以及在展示时如何使用修订来找到最新的问题和答案,例如这个页面?
    • @murrekatt 为方便起见,您的 API 可以提供指向最新版本的 URI:/cars/{ids}/revisions/latest
    • 是的,它应该返回最新的,但是,它想知道这是如何完成的,因为最新的是“修订”而不是帖子,以及如何很好地拼凑在一起。你知道吗?
    • @murrekatt 我不明白你的意思。实施问题超出了此答案的范围。但请记住,资源可以有 mapping whose value changes over time 并且是 latest 修订版的标识符的情况。
    • 基本上,看post,如何确定例如title,因为它在 postrevision 中。是不是很简单:“给我发布 p,然后通过post_id 签入修订并获取最高的revision,然后用修订中的值填充帖子”? IE。如果有 N 个修订版,post 字段值来自哪里?帖子,所有修订版或最后修订版或组合? :)
    猜你喜欢
    • 2020-06-07
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    相关资源
    最近更新 更多