我有一套相当简单的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
,但仍然阻止“丢失更新”的问题?
除了在适当时将其包含在标题中之外,还要将Etag
作为文档的属性包括在内。这样既可以节省往返次数,又可以让客户在本地持久保存文档超出初始调用范围时更容易访问Etag
。