4

我正在使用第 3 版(是的,我知道有 google drive API)并且我正在尝试按照此处批处理 ACL 请求。

我在谷歌游乐场(以及我自己的代码)中运行了一个测试,以将 150 个用户作为“作者”(角色)添加到文档中。

xml 看起来像:

<feed xmlns="http://www.w3.org/2005/Atom"
    xmlns:gAcl="http://schemas.google.com/acl/2007"
    xmlns:batch="http://schemas.google.com/gdata/batch">
  <category scheme="http://schemas.google.com/g/2005#kind"
      term="http://schemas.google.com/acl/2007#accessRule"/>
  <entry>
<id>https://docs.google.com/feeds/default/private/full/document:1111/acl/user:owner@example.com</id>
    <batch:operation type="query"/>
  </entry>
<entry><batch:id>1</batch:id><batch:operation type="insert"/><gAcl:role value="writer"/><gAcl:scope type="user" value="test1@example.com"/></entry>
<entry><batch:id>2</batch:id><batch:operation type="insert"/><gAcl:role value="writer"/><gAcl:scope type="user" value="test2@example.com"/></entry>
....
<entry><batch:id>150</batch:id><batch:operation type="insert"/><gAcl:role value="writer"/><gAcl:scope type="user" value="test150@example.com"/></entry>
</feed>

处理这个需要 60 秒以上,然后响应返回 500 错误。它似乎确实添加了所有 150,但需要一段时间。如果我要直接在 google 共享对话框的文本区域中添加 150 个电子邮件地址,则需要更短的时间(8-10)。

我没有正确使用 API 吗?API 不是模仿 google 分享 UI 界面吗?

更新:在进一步研究中,批处理 api 看起来实际上只是在“通过网络”节省您的时间,但在服务器端(谷歌)它只是一次发送一个请求。我可以看到,如果我直接在 google 共享对话框的文本区域中添加 150 个电子邮件地址,则需要 8-10 秒,然后如果我添加 151,则需要 8-10 秒。这告诉我谷歌正在根据现有列表验证新条目。通过直接的在线互动,它可以一次完成所有 150 个;使用批次,它一次需要一个并在每个之后进行验证 - 总时间为 5 分钟以上。

4

1 回答 1

0

如果您要对大量文件进行这些更改,并且要添加的用户列表至少有时是相同的,那么您应该考虑将用户放入 Google 组。然后,您可以简单地将 google 组添加到文件 ACL 中,从而显着减少 API 调用次数和所用时间。

因此,如果需要与 150 个用户共享 2 个文件,使用您当前的方法将需要 150 次 API 调用(即使网络流量是批处理的)。这会导致大约 300 个 API 调用。

如果使用组方法共享 2 个文件,则共享第一个文件将需要 152 次 API 调用(1 次 API 调用来配置组,150 次 API 调用来将用户添加为成员,1 次 API 调用来与组共享文件)。但是共享第二个文件只需要 1 个 API 调用。这导致只有 153 个 API 调用。

您还可以将文件集中到集合中并共享集合而不是单个文件,以减少所需的 API 调用次数。

Group Provisioning API 调用记录在: https ://developers.google.com/google-apps/provisioning/#creating_a_group

Add Member to Group API 调用记录在: https ://developers.google.com/google-apps/provisioning/#adding_a_member_to_a_group

于 2012-11-24T13:48:18.700 回答