替换 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 如何使用这些修订来跨问题和答案进行修订之后,我想知道如何根据哪个对象实际处理 cars
和 revisions
有哪些字段以及如何找到例如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 修订版的标识符。
我有一个 REST API,它允许创建和更新一些资源,比方说汽车。
POST /cars
POST /cars/:id
汽车有一个 ID
字段,由服务器在创建时生成。
我想允许一些使用这些汽车的业务流程将每辆汽车 "revision" 视为不可变的,但允许通过 REST API 更改汽车,以便新的 "revision" 被创建。这些修订是按时间表进行的,并且取决于何时进行更改,业务流程将使用或不使用它。
我想听听对此的一些想法以及如何去做。
一个有点老套的解决方案当然是让汽车保持不变,ID 可以说是 "revision" 句柄。更新会产生具有不同 ID 的新车。当然,用一个 ID 调用 API 并取回另一个 ID 有点奇怪。
有什么想法和建议?谢谢!
更新
好的,在查看了查看修订的建议以及 StackExchange 如何使用这些修订来跨问题和答案进行修订之后,我想知道如何根据哪个对象实际处理 cars
和 revisions
有哪些字段以及如何找到例如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 修订版的标识符。