为什么我在 Google API 浏览器中得到的结果与调用 API 时得到的结果不同?

Why do I get different results in the Google API explorer from the ones I get when calling the API?

我想在我的应用程序中使用 Google 驱动器 API。我注册了一个全新的 Gmail 地址,转到开发人员控制台并创建了一个项目,并为该项目创建了一个服务帐户。我下载了凭据 Json 文件,并将其添加到我的项目中。我创建了一个顶级 Test folder 来测试我的代码。

我的代码工作正常,因为我可以获取文件夹和文件的列表、创建新文件夹、上传文件等。

如果我转到 UI for Google Drive,我可以看到文件和文件夹(为了简化调试,删除了两个文件以外的所有文件)。 ..

My Drive
  - Test folder
    - 20,480 byte Word file
    - Subfolder
      - 69 byte text file

如果我从我的代码中查看文件和文件夹(通过 API),我也可以看到它们。

如果我使用About API Explorer查看我使用了多少磁盘space,使用量显示为20480,即Word文件。但是,如果我从我的代码中调用 About API,则使用量为 69 字节,即只是文本文件。我很困惑为什么每种方法只包含一个文件,而不是两种方法都考虑。

一个可能的线索是,如果我查看 About 对象的 User.PermissionId 属性,我会看到从 API 资源管理器调用时和调用时的不同值从我的代码。这让我想知道我是否使用了两个不同的帐户。但是,我不明白这是怎么回事,因为我只有这个 Gmail 帐户的一个服务帐户。如果服务帐户不同于主 Gmail 帐户,那么当我查看驱动器 UI.

时,我不会期望看到我的代码创建的文件和文件夹

谁能解释这里出了什么问题?谢谢

当您使用服务帐户访问驱动器API时,它将使用指向 驱动器 API 的服务帐户 凭据,以便在 服务帐户 驱动器而不是您的驱动器中进行操作。但是还有其他方法可以使用 API:

访问您的云端硬盘
  • 使用 OAuth 客户端 ID 作为凭据。 (此 Quickstart for Drive API 提供了有关如何将 OAuth 客户端 ID 用于桌面应用程序的示例。
  • 如果服务帐户是唯一选项,请在您的用户帐户中创建一个文件夹,移动文件并与您的服务帐户共享。

参考:

服务账号不是你。服务帐户有自己的 google 驱动器帐户,这就是您正在与之交互的帐户。

因此,通过执行 about.get,您可以找到有关服务帐户驱动器帐户的信息。这是space它有多少。

当您将个人驱动器帐户上的文件夹与服务帐户共享时,它会授予对该文件夹的访问权限。它可以从中读取,但它不拥有您所做的那些文件,它们当前驻留在您的个人驱动器帐户中。

如果您在服务帐户驱动器帐户上创建一个文件夹,并向其中上传内容,那么您会在 about.get 中看到变化,因为您正在使用服务帐户存储。