2012-11-15 43 views
4

我使用的是版本3(是的,我知道有谷歌驅動器API),我試圖根據here批量分配ACL請求。通過API爲Google文檔分配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:[email protected]</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="[email protected]"/></entry> 
<entry><batch:id>2</batch:id><batch:operation type="insert"/><gAcl:role value="writer"/><gAcl:scope type="user" value="[email protected]"/></entry> 
.... 
<entry><batch:id>150</batch:id><batch:operation type="insert"/><gAcl:role value="writer"/><gAcl:scope type="user" value="[email protected]"/></entry> 
</feed> 

處理這需要> 60秒,然後將響應返回與500錯誤。它似乎增加了所有150,但它需要一段時間。如果我要直接在Google共享對話框的文本區域中添加150個電子郵件地址,則需要更短的時間(8-10)。

我不正確使用API​​嗎? API是否不模仿google共享UI界面?

更新:在更進一步的看來,它看起來像批處理API真的只是節省你的時間「穿越電線」,但在服務器端(谷歌)它只是發送一個請求一次。我可以看到,如果我直接在google共享對話框的文本區域中添加150個電子郵件地址,則需要8-10秒,然後如果我添加了151個郵件地址,則需要8-10秒。這告訴我,谷歌正在驗證新的條目對現有的列表。通過直接的在線互動,它可以一次完成150個項目;使用批次時,它會一次一個地進行驗證,並在每個驗證一次之後進行驗證 - 總計時間超過5分鐘。

回答

0

如果您要對大量文件進行這些更改,並且要添加的用戶列表至少有時是相同的,則應考慮將用戶放入Google羣組。然後,您可以簡單地將Google組添加到文件ACL中,從而大大減少API調用次數和時間。

因此,如果2個文件需要與150個用戶共享,則使用當前方法將需要150個API調用(即使網絡流量已批量調用)。這導致約300個API調用。

如果使用group方法共享2個文件,共享第1個文件將需要152個API調用(1個API調用來調配組,150個API調用將用戶添加爲成員,1個API調用共享文件羣組)。但共享第二個文件只需要1個API調用。這隻會導致153個API調用。

您也可以將文件集中到集合中,並共享集合而不是單個文件,以減少所需的API調用次數。 https://developers.google.com/google-apps/provisioning/#adding_a_member_to_a_group

+0

謝謝你的迴應: https://developers.google.com/google-apps/provisioning/#creating_a_group

添加成員到組API調用的記載:

集團供應API調用在被記錄在案。我正在處理一個非常動態的應用程序,在這個應用程序中,來自不同域的用戶需要隨時添加到文檔(ACL)中。大多數情況下,這是一個單一的文件,可以添加任意數量的人員(即沒有可預測的組)。例如,用戶A創建一個文檔並邀請10個人共享,然後用戶B創建一個並邀請120個人共享(其中一些人是來自第一個文檔的10人)。 –

+0

那麼我猜這個團隊值得一試。我的建議然後是非交互式地執行ACL更新。換句話說,立即迴應用戶告訴用戶將在5-10分鐘內添加條目。然後執行10-20批次的ACL更新(需要多少時間才能確保您幾乎總能在合理的時間內獲得成功響應代碼。) –

+0

是的,警告用戶是我們現在所有的東西。希望我錯過了一些東西。 –