Solicitudes por lotes

En este documento, se muestra cómo agrupar llamadas a la API para reducir la cantidad de conexiones que debe hacer el cliente. El procesamiento por lotes puede mejorar la eficiencia de una aplicación, ya que disminuye los recorridos de ida y vuelta de la red y aumenta la capacidad de procesamiento.

Descripción general

Cada conexión que realiza tu cliente genera una cierta cantidad de sobrecarga. La API de Hojas de cálculo de Google admite el procesamiento por lotes para permitir que tu cliente coloque varios objetos de solicitud, cada uno de los cuales especifica un solo tipo de solicitud para realizar, en una sola solicitud por lote. Una solicitud por lotes puede aumentar el rendimiento, ya que combina varias solicitudes secundarias en una sola llamada al servidor y recupera una sola respuesta.

Recomendamos a los usuarios que siempre agrupen varias solicitudes. Estos son algunos ejemplos de situaciones en las que puedes usar el procesamiento por lotes:

  • Recién empiezas a usar la API y tienes muchos datos para subir.
  • Si necesitas actualizar metadatos o propiedades, como el formato, en varios objetos.
  • Debes borrar muchos objetos.

Límites, autorizaciones y consideraciones de dependencias

Esta es una lista de otros elementos que se deben considerar cuando se emplee la actualización por lotes:

  • Cada solicitud por lotes, incluidas todas las subsolicitudes, se cuenta como una solicitud a la API respecto de tu límite de uso.
  • Las solicitudes por lotes se autentican una vez. Esta autenticación única se aplica a todos los objetos de actualización por lotes en la solicitud.
  • El servidor procesa las subsolicitudes en el mismo orden en que aparecen en la solicitud por lotes. Las últimas solicitudes secundarias pueden depender de las acciones realizadas durante las solicitudes secundarias anteriores. Por ejemplo, en la misma solicitud por lotes, los usuarios pueden insertar texto en un documento existente y, luego, aplicarle un estilo.

Detalles del lote

Una solicitud por lotes consiste en una llamada al método batchUpdate con varias subsolicitudes, por ejemplo, para agregar una hoja de cálculo y darle formato.

Cada solicitud se valida antes de aplicarse. Todas las solicitudes secundarias de la actualización por lotes se aplican de forma atómica. Es decir, si alguna solicitud no es válida, entonces la actualización completa no se realiza correctamente y no se aplica ninguno de los cambios (potencialmente dependientes).

Algunas solicitudes proporcionan respuestas con información sobre las solicitudes aplicadas. Por ejemplo, todas las solicitudes de actualización por lotes para agregar objetos muestran respuestas a fin de que puedas acceder a los metadatos del objeto recién agregado, como el ID o el título.

Con este enfoque, puedes crear un documento de Google completo mediante una solicitud de actualización por lotes a la API con varias solicitudes secundarias.

Formato de una solicitud por lotes

Una solicitud es una solicitud JSON que contiene varias subsolicitudes anidadas con una propiedad obligatoria: requests. Las solicitudes se construyen en un arreglo de solicitudes individuales. Cada solicitud usa JSON para representar el objeto de la solicitud y contener sus propiedades.

Formato de una respuesta por lotes

El formato de respuesta para una solicitud por lotes es similar al formato de la solicitud. La respuesta del servidor contiene una respuesta completa del único objeto de respuesta.

La propiedad principal del objeto JSON se llama replies. Las respuestas se muestran en un array, y cada respuesta a una de las solicitudes ocupa el mismo orden de índice que la solicitud correspondiente. Algunas solicitudes no tienen respuestas y la respuesta en ese índice del array está vacía.

Ejemplo

En el siguiente ejemplo se muestra el uso del procesamiento por lotes con la API de Hojas de cálculo.

Solicitud

En esta solicitud por lotes de ejemplo, se muestra cómo realizar las siguientes acciones:

Al agregar el ID de la hoja en la solicitud, los usuarios pueden usar el ID de la hoja para otras solicitudes secundarias en la misma llamada a la API. Esto mejora el rendimiento, ya que evita un ciclo de escritura, lectura y escritura.

Para obtener una lista de los tipos de solicitudes de actualización por lotes agrupados en diferentes categorías, consulta la tabla que se encuentra en Operaciones de actualización por lotes.

{
   "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
               }
            }
         }
      }
   ]
}

Respuesta

En esta respuesta por lotes de ejemplo, se muestra información sobre cómo se aplicó cada subsolicitud dentro de la solicitud por lotes. Ten en cuenta que UpdateCellsRequest no contiene una respuesta, por lo que el valor del índice del array en [1] consta de llaves vacías.

"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
            }
         }
      }
   }
]