NodeJS 如何判断API调用返回的数据是否比之前拉取的数据新?

klr1opcd  于 2023-06-29  发布在  Node.js
关注(0)|答案(1)|浏览(96)

我正在使用在线物联网服务(TagoIO),并希望定期从API获取数据以存储在平台上。该平台允许您设置一个Analysis,您可以在其中创建代码以从API中提取并存储它,然后您可以设置一个自动化以在给定的时间间隔运行它。
我拉取的API应该每小时更新一次新数据(尽管我不确定每小时的哪一分钟有新数据可用,因此,我目前每30分钟自动拉取一次数据)。还有一种可能性是,给定的一个小时可能没有新的数据,所以如果你拉数据,那么它将返回前一个小时的。
我想确保当我从API拉取数据时,数据比我以前拉取的数据更新。我目前的方法是将检索到的数据的时间戳与最后提取的数据进行比较,但我想知道是否有一种更有效的方法来做到这一点。考虑到不同的格式,比较时间戳通常很麻烦,如果有一个一致的、传统的指示器,我可以快速知道数据是否是新的,那就好得多了。
应该注意的是,我一直在使用NodeJS和Axios从API中拉取数据。

gt0wga4j

gt0wga4j1#

这取决于API的结构。如果它是一个REST API,则API可能会使用etag/if-none-match方法来确定自上次调用以来数据是否发生了更改。
设计良好的REST API会在响应中发送一个etag header,您将其与最后一个数据集一起存储在您的一侧。在下一次服务器查询调用这个资源时,您将在if-none-match头中发送这个存储的etag散列。服务器现在使用此信息来确定他是否有需要发送给您的最新数据,或者您是否已经有可用的最新信息。如果没有新的数据可用,则服务器以304状态码进行响应。如果有新的数据,你就用你的新数据得到200。
我会点击TagoIO支持并询问此行为是否可用。如果没有,检查最后调用的时间戳似乎是唯一的方法。
TagoIO API指出,数据集看起来有点像这样:

{
  "status": true,
  "result": [
    {
      "id": "6143842f561c4e00199f517b",
      "device": "612ea1694035dd0012f6d238",
      "variable": "temperature",
      "value": -11.67,
      "unit": "°C",
      "group": "1631814703672",
      "time": "2021-09-16T17:51:43.672Z",
      "created_at": "2021-09-16T17:51:43.672Z",
      "location": {
        "type": "point",
        "coordinates": [
          -78.677328,
          35.770723
        ]
      }
    }
  ]
}

time和/或created_at属性似乎可以用于JS datetime comparison。也许,在ID中也有一个部分提示创建时间,可以用于轻松比较。
希望能帮上忙,迈克

相关问题