防止丢失更新问题,而不会给我的消费者带来不便

问题描述 投票:1回答:1

我有一套相当简单的API

GET /documents
GET /documents/:id
PATCH /documents/:id

为了防止“丢失更新”问题,我想在Etag上发送一个GET /documents/:id,然后要求在If-Match请求的PATCH头中发送该值。然后,我将查询我的数据库,根据结果生成一个Etag,并检查Etag是否与用户传入的内容相匹配,以确定记录是否未在其下更新。很常见的东西在这里。

我的问题与GET /documents电话有关。如果消费者要求GET /documents获取他们所有的文件,找到他们想要更新的文件,那么他们将不得不发出对GET /documents/:id的调用以获得该记录的Etag,然后他们最终可以发出PATCH /documents/:id调用。

我很好奇其他人做了什么来绕过这个额外的GET /documents/:id呼吁只是为了得到Etag,但仍然阻止“丢失更新”的问题?

rest architecture software-design distributed-system distributed-transactions
1个回答
0
投票

除了在适当时将其包含在标题中之外,还要将Etag作为文档的属性包括在内。这样既可以节省往返次数,又可以让客户在本地持久保存文档超出初始调用范围时更容易访问Etag

© www.soinside.com 2019 - 2024. All rights reserved.