本文說明如何批次處理 API 呼叫,以減少用戶端必須建立的連線數量。批次處理可減少網路往返次數並提高總處理量,進而提升應用程式效率。
總覽
用戶端建立的每個連線都會造成一定程度的負擔。 Google Sheets API 支援批次處理,可讓用戶端將多個要求物件放入單一批次要求,每個物件都會指定要執行的單一要求類型。批次要求可將多個子要求合併為單一伺服器呼叫,並擷取單一回應,藉此提升效能。
建議使用者一律批次處理多個要求。以下列舉幾個可使用批次作業的狀況範例:
- 您剛開始使用 API,且有大量資料要上傳。
- 您需要更新多個物件的中繼資料或屬性,例如格式。
- 您需要刪除大量物件。
限制、授權和依附關係考量
以下是採用批次更新時應考量的其他項目:
- 每個批次要求 (包括所有子要求) 都會計為一次 API 要求,並計入用量限制。
- 批次要求只需驗證一次。這項單一驗證會套用至要求中的所有批次更新物件。
- 伺服器會按照子要求在批次要求中的順序處理這些要求。後續子要求可能會視先前子要求期間採取的動作而定。舉例來說,使用者可以在同一個批次要求中,將文字插入現有文件,然後設定樣式。
批次詳細資料
批次要求包含一項 batchUpdate 方法呼叫,以及多項子要求,例如新增試算表,然後格式化試算表。
系統會先驗證每項要求,再套用要求。系統會以不可分割的形式套用批次更新中的所有子要求。也就是說,如果任何要求無效,整個更新就會失敗,且不會套用任何 (可能相依的) 變更。
部分要求會提供回應,內含已套用要求相關資訊。 舉例來說,所有新增物件的批次更新要求都會傳回回應,因此您可以存取新加入物件的中繼資料,例如 ID 或標題。
採用這種做法,您可以使用一個 API 批次更新要求和多個子要求,建構完整的 Google 文件。
批次要求的格式
要求是單一 JSON 要求,其中包含多個巢狀子要求,以及一個必要屬性:requests。要求會建構在個別要求的陣列中。每個要求都會使用 JSON 代表要求物件,並包含其屬性。
批次回應的格式
批次要求的回應格式與要求格式類似。伺服器的回應包含單一回應物件的完整回覆。
主要 JSON 物件的屬性名為 replies。回應會以陣列形式傳回,每個要求的回應會佔用與對應要求相同的索引順序。部分要求沒有回應,且該陣列索引處的回應為空白。
範例
以下範例顯示如何搭配使用批次作業和 Google 試算表 API。
要求
這個批次要求範例說明如何:
- 使用
AddSheetRequest,在現有試算表中新增 工作表,並將sheetId設為 12345。 - 使用
UpdateCellsRequest,從 A1 儲存格開始,將資料新增至新工作表。 - 在新工作表中新增
namedRange或篩選器檢視畫面。
在要求中加入工作表 ID 後,使用者就能在同一個 API 呼叫中,將工作表 ID 用於其他子要求。這樣可避免寫入/讀取/寫入週期,進而提升效能。
如需依類別分組的批次更新要求類型清單,請參閱「批次更新作業」下方的表格。
{
"requests":[
{
"addSheet":{
"properties":{
"sheetId":123456
}
}
},
{
"updateCells":{
"start":{
"sheetId":123456
},
"rows":[
{
"values":[
{
"userEnteredValue":{
"stringValue":"hello"
}
}
]
},
{
"values":[
{
"userEnteredValue":{
"stringValue":"world"
}
}
]
}
],
"fields":"userEnteredValue"
}
},
{
"addNamedRange":{
"namedRange":{
"name":"newRange",
"range":{
"sheetId":123456,
"endRowIndex":2
}
}
}
}
]
}回應
這個批次回應範例會顯示批次要求中每個子要求的套用方式。請注意,UpdateCellsRequest 不包含回應,因此 [1] 的陣列索引值包含空白的大括號。
"replies":[
{
"addSheet":{
"properties":{
"sheetId":123456,
"title":"Sheet3",
"index":2,
"sheetType":"GRID",
"gridProperties":{
"rowCount":1000,
"columnCount":26
}
}
}
},
{
},
{
"addNamedRange":{
"namedRange":{
"namedRangeId":"2104325079",
"name":"newRange",
"range":{
"sheetId":123456,
"startRowIndex":0,
"endRowIndex":2,
"startColumnIndex":0,
"endColumnIndex":26
}
}
}
}
]