私はバージョン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をすべて追加するようですが、時間がかかります。Google共有ダイアログのテキスト領域に150個のメールアドレスを直接追加すると、より短い期間(8〜10)かかります。
APIを正しく使用していませんか?APIはGoogle共有UIインターフェースを模倣していませんか?
更新:これをさらに見ると、バッチAPIは実際には「ネットワークを越えて」時間を節約しているように見えますが、サーバー側(google)では一度に1つずつリクエストを送信しているだけです。Google共有ダイアログのテキスト領域に150個のメールアドレスを直接追加すると8〜10秒かかり、151個を追加すると8〜10秒かかることがわかります。これは、グーグルが既存のリストに対して新しいエントリを検証していることを教えてくれます。直接のオンラインインタラクションでは、一度に150個すべてを使用します。バッチでは、一度に1つずつ取得し、各バッチの後に検証します。これは、合計で5分以上になります。