google-drive-api - 处理传入的 Google Drive 更改的 404 错误

标签 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

    经过一些认真的挖掘,似乎如果我们从 watch 通知中传入的“changeId”数字中减去 1,我们就能够从 API 中检索到一个有效的通知,该通知具有我们期望的确切更改。嗯...

    更新 3

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

    最佳答案

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

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

    关于google-drive-api - 处理传入的 Google Drive 更改的 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33683867/

    相关文章:

    javascript - 在XMLHttpRequest中遵循重定向(302)

    google-drive-api - google docs/drive resource_id 是全局唯一的吗?

    google-apps-script - 谷歌驱动器 API 对每个帐户或项目有限制吗?

    android - 如何在 Google Drive SDK v2 中定义文件条目是文件还是文件夹?

    c# - 没有浏览器的谷歌驱动 OAuth2

    android - 获取 Android 应用程序中的文件夹,该文件夹不是通过此应用程序创建的

    java - 将文件保存为 http 响应错误中收到的 .pdf

    android - 如何将文件夹中的选定文件从 Android 设备同步到 Google 云端硬盘,反之亦然

    java - 列出文件并从谷歌驱动器获取公共(public)文件夹的信息

    javascript - 如何通过网络表单匿名上传文件到 Google Drive