我使用的是版本3(是的,我知道有google驱动器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个,但需要一段时间。如果我直接在谷歌共享对话框的文本区域添加150个电子邮件地址,则需要更短的时间(8-10)。
我是否未正确使用API?API没有模仿谷歌共享用户界面吗?
更新:从这个角度来看,批处理api实际上只是在"跨线"为您节省时间,但在服务器端(谷歌),它只是一次发送一个请求。我可以看到,如果我直接在谷歌共享对话框的文本区域添加150个电子邮件地址,需要8-10秒,如果我添加151,则需要8-10秒。这告诉我,谷歌正在根据现有列表验证新条目。通过直接的在线互动,它一次就需要150个;对于批处理,它一次处理一个,然后在每次处理后进行验证,总共需要5分钟以上的时间。
如果您正在对大量文件进行这些更改,并且要添加的用户列表至少有时是相同的,那么您应该考虑将用户放入Google组。然后,您可以简单地将google组添加到文件ACL中,从而显著减少API调用的次数和所需的时间。
因此,如果需要与150个用户共享2个文件,使用当前方法将需要相当于150个API调用(即使网络流量是成批的)。这导致大约300个API调用。
如果使用组方法共享2个文件,共享第一个文件将需要152个API调用(1个API调用用于提供组,150个API调用用于将用户添加为成员,1个API调用用于与组共享文件)。但是共享第二个文件只需要1个API调用。这只会导致153个API调用。
您还可以将文件集中到集合中,并共享集合而不是单独的文件,以减少所需的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