首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过API批量处理Google文档的ACL请求相当慢

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

Stack Overflow用户
提问于 2012-11-15 08:26:45
回答 1查看 220关注 0票数 4

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

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

xml看起来像这样:

代码语言:javascript
运行
复制
<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),它只是一次发送一个请求。我可以看到,如果我直接在google分享对话框中的文本区域添加150个电子邮件地址,则需要8-10秒,如果我添加151个,则需要8-10秒。这告诉我google正在根据现有列表验证新条目。对于直接在线交互,它一次获取全部150个;对于batch,它一次获取一个,并在每次验证之后进行验证-这相当于5+分钟的总时间。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-24 21:48:19

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

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

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

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

组配置应用编程接口调用的文档位于:https://developers.google.com/google-apps/provisioning/#creating_a_group

将成员添加到组API调用在以下位置进行了说明:https://developers.google.com/google-apps/provisioning/#adding_a_member_to_a_group

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13389763

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档