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

在使用firebase REST API时,如何检查从firebase数据库接收的eTag是否已更改?,firebase,firebase-realtime-database,Firebase,Firebase Realtime Database,我找到了使用eTag有条件地更新或向数据库写入数据的方法。但是我想要的是从数据库中读取(获取)已更改的数据,如果数据已更改,则使用REST API和不更新数据 我正在尝试实现数据库的服务器端缓存,如果缓存是旧的(eTag已更改),我希望更新缓存。使用REST API执行条件更新是一个多步骤的过程: 无论何时从数据库读取数据,您都需要通过传递值为true的X-Firebase-ETag标题来确保您也请求ETag Firebase随后将在响应中使用数据和ETag标题进行响应,如ETag:ViJFJ

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


我正在尝试实现数据库的服务器端缓存,如果缓存是旧的(eTag已更改),我希望更新缓存。

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

  • 无论何时从数据库读取数据,您都需要通过传递值为
    true
    X-Firebase-ETag
    标题来确保您也请求
    ETag
  • Firebase随后将在响应中使用数据和
    ETag
    标题进行响应,如
    ETag:ViJFJowpbyRvgGNPzPJdGeN+mCY=
  • 您需要将
    ETag
    存储在存储数据的同一位置
现在,如果要发送条件更新,请执行以下操作:

  • 从缓存中读取该位置的现有
    ETag
  • if match
    头中的
    ETag
    与新数据一起传递给写入请求,如下所示:
    -H'if match:ViJFJowpbyRvgGNPzPJdGeN+mCY='
此时,Firebase实时数据库服务器将您的
ETag
值与当前数据的
ETag
进行比较。有两种可能性:

  • 如果
    ETag
    值相同(即,如果未修改数据),您的写入将保留到存储器中
  • 如果
    ETag
    值不同(即,如果服务器上的数据已更新),您的写入将被拒绝,您将在响应中返回更新的数据和
    ETag
    。此时,您应该将新数据和
    ETag
    写入缓存,然后根据这些值重试更新
有关这方面的更多信息,请参见:

  • 这个
  • 这个

不支持将
ETag
传递到
GET
调用中。这听起来是一个合理的功能要求,所以我推荐你。但无法保证是否/何时实现此功能。

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

  • 无论何时从数据库读取数据,您都需要通过传递值为
    true
    X-Firebase-ETag
    标题来确保您也请求
    ETag
  • Firebase随后将在响应中使用数据和
    ETag
    标题进行响应,如
    ETag:ViJFJowpbyRvgGNPzPJdGeN+mCY=
  • 您需要将
    ETag
    存储在存储数据的同一位置
现在,如果要发送条件更新,请执行以下操作:

  • 从缓存中读取该位置的现有
    ETag
  • if match
    头中的
    ETag
    与新数据一起传递给写入请求,如下所示:
    -H'if match:ViJFJowpbyRvgGNPzPJdGeN+mCY='
此时,Firebase实时数据库服务器将您的
ETag
值与当前数据的
ETag
进行比较。有两种可能性:

  • 如果
    ETag
    值相同(即,如果未修改数据),您的写入将保留到存储器中
  • 如果
    ETag
    值不同(即,如果服务器上的数据已更新),您的写入将被拒绝,您将在响应中返回更新的数据和
    ETag
    。此时,您应该将新数据和
    ETag
    写入缓存,然后根据这些值重试更新
有关这方面的更多信息,请参见:

  • 这个
  • 这个

不支持将
ETag
传递到
GET
调用中。这听起来是一个合理的功能要求,所以我推荐你。但无法保证是否/何时实施此操作。

我不想更新数据(PUT、POST等)。我只想知道数据是否已更改,并使用简单的GET请求读取更改的数据。不支持将
ETag
传递到
GET
调用中。这听起来是一个合理的功能要求,所以我推荐你。但这是否/何时实施还没有保证。我不想更新数据(PUT、POST等)。我只想知道数据是否已更改,并使用简单的GET请求读取更改的数据。不支持将
ETag
传递到
GET
调用中。这听起来是一个合理的功能要求,所以我推荐你。但无法保证是否/何时实施。