4

私はバージョン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分以上になります。

4

1 に答える 1

0

多数のファイルにこれらの変更を加え、追加するユーザーのリストが少なくとも時々同じである場合は、ユーザーをGoogleグループに入れることを検討する必要があります。次に、GoogleグループをファイルACLに追加するだけで、API呼び出しの数と所要時間を大幅に削減できます。

したがって、2つのファイルを150人のユーザーと共有する必要がある場合、現在の方法を使用すると、(ネットワークトラフィックがバッチ処理されている場合でも)150回のAPI呼び出しに相当します。これにより、約300のAPI呼び出しが発生します。

groupメソッドを使用して2つのファイルを共有する場合、最初のファイルを共有するには152のAPI呼び出しが必要です(グループをプロビジョニングするための1つのAPI呼び出し、ユーザーをメンバーとして追加するための150のAPI呼び出し、およびファイルをグループと共有するための1つのAPI呼び出し)。ただし、2番目のファイルを共有するには、API呼び出しが1回だけ必要です。これにより、153回のAPI呼び出しのみが発生します。

また、ファイルをコレクションにまとめて、個々のファイルの代わりにコレクションを共有して、必要なAPI呼び出しの数を減らすこともできます。

Group Provisioning 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で文書化されています。

于 2012-11-24T13:48:18.700 に答える