我找到了使用eTag有条件地更新数据或将数据写入数据库的方法。但我想要的是从数据库中读取(GET)已更改的数据,如果数据已更改,则使用REST API而不是更新数据
我正在尝试实现数据库的服务器端缓存,我想更新缓存(如果它已经过时)(eTag已更改)。
使用REST API执行条件更新是一个多步骤的过程:
ETag
的X-Firebase-ETag
标头来请求true
。ETag
标头,例如ETag: ViJFJowpbyRvgGNPzPJdGeN+mCY=
ETag
存储在存储数据的相同位置。现在,当您要发送条件更新时,您:
ETag
。ETag
标头中的if-match
传递给您的新数据写入请求,如下所示:-H 'if-match: ViJFJowpbyRvgGNPzPJdGeN+mCY='
此时,Firebase实时数据库服务器会将您的ETag
值与当前数据的ETag
进行比较。有两种可能性:
ETag
值相同(即如果数据未被修改),则写入将持久存储。ETag
值不同(即如果服务器上的数据已更新),则拒绝写入,并在响应中返回更新的数据和ETag
。此时,您应该将新数据和ETag
写入缓存,然后根据这些值重试更新。有关详细信息,请参阅:
没有支持将ETag
传递给GET
电话。这听起来像一个合理的功能要求,所以我建议你file a feature request。但是不确定是否/何时实施。