Google api 通过API批量处理Google文档的ACL请求相当慢

Google api 通过API批量处理Google文档的ACL请求相当慢,google-api,acl,google-docs-api,batch-processing,Google Api,Acl,Google Docs Api,Batch Processing,我使用的是版本3(是的,我知道有谷歌驱动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/bat

我使用的是版本3(是的,我知道有谷歌驱动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>

https://docs.google.com/feeds/default/private/full/document:1111/acl/user:owner@example.com
1.
2.
....
150
处理此过程需要>60秒,然后响应返回500个错误。它似乎把所有的150个都加起来了,但这需要一段时间。如果我直接在google共享对话框的文本区域添加150个电子邮件地址,则需要更短的时间(8-10)

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


更新:进一步来看,批处理api似乎真的只是“跨线”为您节省了时间,但在服务器端(google),它只是一次发送一个请求。我可以看到,如果我直接在谷歌共享对话框的文本区域添加150个电子邮件地址,需要8-10秒,如果我添加151个,则需要8-10秒。这告诉我google正在根据现有列表验证新条目。通过直接的在线互动,一次就要花掉所有的150个;批处理一次一个,每次验证一次,总共5分钟。

如果你对大量文件进行了这些改动,添加的用户列表至少有时是相同的,你应该考虑把用户放到谷歌组中。然后,您可以简单地将google组添加到文件ACL中,大大减少API调用的数量和所花费的时间

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

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

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

组配置API调用记录在:

将成员添加到组API调用记录在:

谢谢您的回复。我正在处理一个非常动态的应用程序,其中来自不同域的用户需要动态地添加到文档(ACL)中。大多数情况下,它是一个单独的文档,可以添加任意数量的人(即,没有可预测的组)。例如,用户A创建一个文档并邀请10人共享,然后用户B创建一个文档并邀请120人共享(其中一些是第一个文档中的10人)。我想这些组值得一试。我的建议是以非交互方式执行ACL更新。换句话说,立即回复用户,告诉用户将在5-10分钟内添加条目。然后分10-20批执行ACL更新(无论您需要多低,以确保您几乎总能在合理的时间内获得成功响应代码)。是的,警告用户是我们现在所能做的一切。我希望我遗漏了什么。