Google Calendar API 設有配額,確保所有使用者都能公平使用。 使用 Calendar API 時,請注意以下三項重要限制:
- 系統會針對每個專案和每位使用者強制執行 API 使用配額。詳情請參閱下一節。
- 一般日曆使用上限:請避免超出日曆使用上限。
- 作業限制:系統隨時可能限制速率。舉例來說,如果您嘗試快速連續寫入單一日曆。
Google Calendar API 用量配額類型
系統會強制執行兩種配額:
- 每項專案每分鐘:這是指 Google Cloud 專案發出的要求數量。
- 每位使用者在每個專案中每分鐘的要求數:這是指 Cloud 專案中任何一位特定使用者發出的要求數。這項限制旨在協助您確保使用者能公平分配用量。
配額是使用滑動視窗每分鐘計算一次,因此如果流量在某分鐘內快速爆增,導致超過每分鐘配額,系統會在下一個視窗期間進行速率限制,確保平均用量維持在配額內。
如果超出任一配額,系統就會限制查詢頻率,並傳回 403 usageLimits
狀態碼或 429 usageLimits
狀態碼。如果發生這種情況,請按照下列步驟操作:
- 請務必遵循所有最佳做法:使用指數輪詢、隨機產生流量模式、使用推播通知。
- 如果專案規模擴大,使用者人數增加,可以要求增加每個專案的配額。
- 如果達到每位使用者的配額上限,可以採取下列做法:
要求提高配額
如要查看或變更專案的用量限制,或是想申請更多配額,請進行以下步驟:
- 確認您的專案已設有帳單帳戶。如果沒有,請先建立一個。
- 開啟 API 控制台並前往 API 程式庫「已啟用的 API」頁面,從清單中選取 API。
- 如要查看及變更配額相關設定,請點選「配額」。如要查看用量統計資料,請點選「用量」。
使用指數輪詢
如果我們希望您降低要求頻率,會傳回 403「usageLimits」回應或 429 回應 (請參閱完整錯誤說明文件)。這不是嚴重錯誤,我們希望您在短時間間隔後重試要求。如果要求仍以過快的速度傳送,我們會再次詢問,依此類推。為確保這項功能正常運作,請務必隨著時間增加要求之間的延遲。
一般而言,您應使用截斷指數輪詢;Cloud Storage 說明文件清楚說明瞭這項機制和偏好的演算法。如果您使用 Google 用戶端程式庫,系統通常會為您處理這項作業;請參閱程式庫說明文件。一般來說,您應該使用程式庫實作,而非自行編寫。
隨機產生流量模式
多個用戶端同時執行作業時,日曆用戶端容易出現流量尖峰模式。舉例來說,日曆用戶端常見的不良做法是在午夜執行完整同步作業。這幾乎肯定會導致您超出每分鐘配額,並導致速率限制和退避。
為避免這種情況,請盡可能將流量分散到一天中的不同時段。如果客戶需要每天同步處理,請客戶決定隨機時間 (每個客戶的時間都不同)。如果需要定期執行作業,請將間隔時間調整 +/- 25%。這樣一來,流量分配會更平均,使用者體驗也會大幅提升。
使用推播通知
常見的用途是想在使用者日曆中的內容變更時執行動作。這裡的反模式是重複輪詢每個感興趣的日曆。這樣很快就會用盡所有配額。舉例來說,如果應用程式有 5,000 名使用者,且每分鐘輪詢每位使用者的日曆一次,即使尚未完成任何工作,每分鐘配額也至少需要 5,000。
伺服器端應用程式可以註冊接收推播通知,讓我們在發生感興趣的事件時通知您。雖然設定這些功能需要更多時間,但可大幅提升配額使用效率,並提供更優質的使用者體驗。請務必指定要接收通知的 eventType
。詳情請參閱推播通知。
使用服務帳戶進行適當的會計作業
如果應用程式使用網域範圍授權發出要求,系統預設會根據「每位使用者每分鐘每個專案」配額,向服務帳戶收費,而非您模擬的使用者。也就是說,即使服務帳戶可能在多位使用者的日曆上運作,配額也可能用盡,並受到速率限制。如要避免這種情況,請使用 quotaUser
網址參數 (或 x-goog-quota-user
HTTP 標頭) 指出要向哪位使用者收費。這項資訊僅用於計算配額。詳情請參閱 Cloud 說明文件中的「限制每位使用者的要求數」。
測試配額限制處理方式
為確保應用程式能妥善處理達到配額上限的情況 (例如使用指數輪詢重試),並盡量減少對使用者造成的干擾,我們強烈建議您在實際環境中測試這個情境。
為避免這類測試干擾實際應用程式的使用情形,建議您在 Google API 控制台中註冊僅供測試的專案,並設定該專案,使其與正式版專案類似。接著,您可以為這個專案設定人為低配額,並觀察應用程式的行為。
定價
使用 Google Calendar API 不需額外付費。超出配額要求限制不會產生額外費用,也不會向您的帳戶收費。