本文档介绍了如何对 API 调用进行批处理,以减少客户端必须建立的连接数。批处理可以通过减少网络往返次数和提高吞吐量来提高应用效率。
概览
客户端建立的每个连接都会产生一定的开销。 Google Sheets API 支持批处理,让您的客户端可以将多个请求对象(每个对象指定要执行的单个请求类型)放入单个批处理请求中。通过将多个子请求合并为对服务器的单个调用,并检索单个响应,批量请求可以提高性能。
我们建议用户始终将多个请求一起进行批处理。以下是一些可以使用批处理的情况示例:
- 您刚开始使用该 API,并且需要上传大量数据。
- 您需要更新多个对象的元数据或属性(例如格式)。
- 您需要删除多个对象。
限制、授权和依赖项注意事项
以下是采用批量更新时需要考虑的其他事项:
- 每个批处理请求(包括所有子请求)都算作一次 API 请求,计入您的用量限额。
- 批量请求只需进行一次身份验证。此单一身份验证适用于请求中的所有批量更新对象。
- 服务器会按子请求在批处理请求中的显示顺序处理这些子请求。后面的子请求可以依赖于在前面的子请求期间采取的操作。例如,在同一批处理请求中,用户可以将文本插入现有文档,然后设置其样式。
批量详情
批量请求包含一个 batchUpdate 方法调用,其中包含多个子请求,例如,用于添加电子表格并设置其格式。
每项请求都会在应用之前进行验证。批处理更新中的所有子请求均以原子方式应用。也就是说,如果任何请求无效,则整个更新都会失败,并且不会应用任何(可能相关的)更改。
某些请求会提供包含有关已应用请求的信息的响应。 例如,所有用于添加对象的批量更新请求都会返回响应,以便您访问新添加对象的元数据,例如 ID 或标题。
借助此方法,您可以使用一个包含多个子请求的 API 批量更新请求来构建整个 Google 文档。
批量请求的格式
请求是一个包含多个嵌套子请求的 JSON 请求,其中包含一个必需属性:requests。请求以单个请求的数组形式构建。每个请求都使用 JSON 来表示请求对象并包含其属性。
批量响应的格式
批量请求的响应格式与请求格式类似。服务器的响应包含单个响应对象的完整答复。
主要 JSON 对象的属性名为 replies。响应以数组形式返回,其中每个响应都与相应请求的索引顺序相同。某些请求没有响应,因此相应数组索引处的响应为空。
示例
以下示例展示了如何将批处理与 Sheets API 结合使用。
请求
此批量请求示例演示了如何执行以下操作:
- 使用
AddSheetRequest将 工作表添加到具有sheetId12345 的现有电子表格。 - 使用
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
}
}
}
}
]