批处理请求

本文档介绍了如何对 API 调用进行批处理以减少客户端必须建立的连接数量。批处理可以减少网络往返次数并提高吞吐量,从而提高应用的效率。

概览

客户端建立的每个连接都会产生一定的开销。 Google 表格 API 支持批处理,这样您的客户端就可以将多个请求对象(每个对象指定一种要执行的请求)放入单个批量请求中。批量请求可以将多个子请求合并为对服务器的单次调用,从而检索单个响应,从而提升性能。

我们建议用户始终将多个请求一起进行批处理。以下是一些可以使用批处理的示例场景:

  • 您刚开始使用该 API,并且需要上传大量数据。
  • 您需要更新多个对象的元数据或属性(例如格式)。
  • 您需要删除多个对象。

限制、授权和依赖项注意事项

下面列出了使用批量更新时需要考虑的其他事项:

  • 每个批量请求(包括所有子请求)都将计为 1 次 API 请求,计入您的用量限额
  • 系统只会对批量请求进行一次身份验证。此一次性身份验证会应用于请求中的所有批量更新对象。
  • 服务器会按子请求在批量请求中的显示顺序处理这些子请求。后续子请求可以取决于在先前子请求期间执行的操作。例如,在同一批量请求中,用户可以将文本插入现有文档,然后为其设置样式。

批量详情

批量请求由一个 batchUpdate 方法调用和多个子请求组成,例如,先添加电子表格,然后设置其格式。

每项请求都会在应用之前进行验证。批量更新中的所有子请求均以原子方式应用。也就是说,如果任何请求无效,则整个更新都将失败,并且系统不会应用任何(可能依赖的)更改。

某些请求会在响应中提供有关已应用请求的信息。 例如,所有用于添加对象的批量更新请求都会返回响应,以便您访问新添加对象的元数据,例如 ID 或标题。

通过这种方法,您可以使用包含多个子请求的单个 API 批量更新请求构建整个 Google 文档。

批量请求的格式

请求是一个包含多个嵌套子请求的单个 JSON 请求,其中包含一个必需的属性:requests。请求会构建为单个请求的数组。每个请求都使用 JSON 来表示请求对象并包含其属性。

批量响应的格式

批量请求的响应格式与请求格式类似。服务器的响应包含单个响应对象的完整回复。

主 JSON 对象的属性名为 replies。响应以数组形式返回,其中每个响应与对应的请求占用相同的索引顺序。某些请求没有响应,并且该数组索引处的响应为空。

示例

以下示例展示了如何将批处理与 Google 表格 API 结合使用。

请求

以下批量请求示例演示了如何:

通过在请求中添加工作表 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
            }
         }
      }
   }
]