本文說明如何批次處理 API 呼叫,以減少用戶端必須建立的連線數量。批次處理可以減少網路來回行程並提高處理量,藉此提高應用程式的效率。
總覽
用戶端的每個連線都會造成一定程度的負擔。Google Document API 支援批次處理功能,可讓用戶端將多個要求物件放入單一批次要求中,每個物件都指定要執行的要求類型。批次要求可將多個子要求合併成對伺服器的單一呼叫,藉此擷取單一回應,藉此提升效能。
我們建議使用者一律批次處理多個要求。以下列舉幾個適合使用批次處理的情況:
- 您剛開始使用 API,有許多資料需要上傳。
- 您必須更新多個物件的中繼資料或屬性,例如格式設定。
- 您需要刪除多個物件。
限制、授權和依附元件注意事項
進行批次更新時,請注意下列其他事項:
- 每項批次要求 (包括所有子要求) 都會計為一個 API 要求,以免超出用量限制。
- 批次要求會通過驗證一次。這項驗證機制適用於要求中的所有批次更新物件。
- 伺服器會按照子要求在批次要求中的顯示順序處理。延遲子要求取決於先前子要求期間採取的行動。例如,使用者可以在相同的批次要求中,將文字插入現有文件中,然後設定樣式。
批次詳細資料
批次要求是由一個具有多個子要求的 batchUpdate
方法呼叫所組成。舉例來說,將文件加入各個項目後,再設定格式。
每項要求在套用前都經過驗證。系統會以不可分割的形式套用批次更新中的所有子要求。也就是說,如果任何要求無效,整個更新作業都會失敗,且不會套用任何可能依附的變更。
有些要求會在回應中提供已套用要求的相關資訊。 例如,所有新增物件的批次更新要求都會傳回回應,方便您存取新新增物件的中繼資料 (例如 ID 或標題)。
透過這個方法,您可以使用含有多個子要求的單一 API 批次更新要求,建立完整的 Google 文件。
批次要求的格式
要求是單一 JSON 要求,其中包含多個巢狀子要求,其中包含一項必要屬性:requests
。這些要求會以個別要求的陣列為基礎。每個要求都會使用 JSON 代表要求物件並包含其屬性。
批次回應的格式
批次要求的回應格式類似於要求格式。伺服器回應中包含單一回應物件的完整回覆。
主要 JSON 物件的屬性名稱為 replies
。這些回應會透過陣列傳回,其中每個要求的回應都佔用與對應要求相同的索引順序。部分要求沒有回應,且該陣列索引中的回應為空白。
範例
以下程式碼範例顯示如何使用 Document API 進行批次處理。
要求
這個批次要求範例示範如何:
使用
InsertTextRequest
將「Hello World」文字插入現有文件的開頭,並將索引location
設為1
。使用
UpdateTextStyleRequest
更新「Hello」字詞。startIndex
和endIndex
會定義片段中格式化文字的range
。使用
textStyle
,將「Hello」字的字型樣式設為粗體,並將顏色設為藍色。您可以使用
WriteControl
欄位控制寫入要求的執行方式。詳情請參閱「使用 WriteControl 建立狀態一致性」一文。
{ "requests":[ { "insertText":{ "location":{ "index":1 }, "text":"Hello World" } }, { "updateTextStyle":{ "range":{ "startIndex":1, "endIndex":6 }, "textStyle":{ "bold":true, "foregroundColor":{ "color":{ "rgbColor":{ "blue":1 } } } }, "fields":"bold,foreground_color" } } ], "writeControl": { "requiredRevisionId": "REQUIRED_REVISION_ID" } }
將 REQUIRED_REVISION_ID 換成要套用寫入要求的文件修訂版本 ID。
回應
這個批次回應範例顯示了批次要求中各個子要求的套用方式資訊。InsertTextRequest
或 UpdateTextStyleRequest
都不包含回應,因此 [0] 和 [1] 的陣列索引值包含空白大括號。批次要求會顯示 WriteControl
物件,此物件會顯示要求執行的方式。
{ "replies":[ {}, {} ], "writeControl":{ "requiredRevisionId":`REQUIRED_REVISION_ID` }, "documentId":`DOCUMENT_ID` }