使用firebase REST API时,如何检查从firebase数据库收到的eTag是否已更改?

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

我找到了使用eTag有条件地更新数据或将数据写入数据库的方法。但我想要的是从数据库中读取(GET)已更改的数据,如果数据已更改,则使用REST API而不是更新数据

我正在尝试实现数据库的服务器端缓存,我想更新缓存(如果它已经过时)(eTag已更改)。

firebase firebase-realtime-database
1个回答
2
投票

使用REST API执行条件更新是一个多步骤的过程:

  • 每当您从数据库中读取数据时,您需要确保通过传入值为ETagX-Firebase-ETag标头来请求true
  • 然后,Firebase会响应响应中的数据和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。但是不确定是否/何时实施。

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