处理传入的Google云端硬盘更改中的404错误

时间:2015-11-13 00:17:18

标签: google-drive-api

我正在开发一个应用程序,该应用程序使用watch endpoint监视用户帐户的更改。在每次传入更改时,我们的应用程序将使用get endpoint检索更改,以便可以正确处理。

但是,在某些情况下,检索更改的请求会返回404错误。通过将文件从计算机拖到驱动器UI中进行上传,我们已经能够通过图像文件(特别是png和jpeg)可靠地重现此问题。奇怪的是,大多数文件类型都没有出现此问题(据我们所见)。

我们尝试使用指数退避重试,但似乎变化根本不存在。这是我通过API文档中的工具获取的示例响应,用于检索具有此问题的特定更改。

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "notFound",
    "message": "Change not found: 18061",
    "locationType": "other",
    "location": "change"
   }
  ],
  "code": 404,
  "message": "Change not found: 18061"
 }
}

我们正在考虑使用的一个潜在解决方法是使用modifiedDate参数对所有用户的文件执行查询,以查找最近10秒左右的文件,但直接处理更改是一种更好的操作方式

更新

我们一直在玩这个,并且发现了一些其他情况,其中更改可靠地返回404错误:

  • 将任何类型的文件移动到废纸篓时(如果您在废纸篓内打开它,则会发生有效更改)
  • 从垃圾箱中删除任何类型的文件时

更新2

经过一番严肃的挖掘后,如果我们从手表通知中输入的“changeId”数字中减去1,我们就可以从API中检索出具有我们预期的确切更改的有效通知。嗯...

更新3

当删除垃圾箱中的文件时,我们收到的“changeId”号码必须递减2才能收到正确的事件。

1 个答案:

答案 0 :(得分:0)

可能发生的情况是,您收到通知的更改与之后发生的另一个类似更改合并,并被删除。一般来说,直接获取通知中的更改ID并不是一个好主意,因为网络状况和其他问题可能会阻止您的应用程序收到每个更改的通知。

相反,当您收到并推送通知时,您应该将其用作您需要同步上次执行同步时发生的所有更改的信号。在这种情况下,使用Changes.list()端点并将startChangeId设置为您先前同步到的上次更改的ID。