При использовании API Google Docs следует придерживаться нескольких принципов. К ним относятся:
- Для повышения эффективности редактируйте в обратном порядке.
- План сотрудничества
- Обеспечьте согласованность состояния с помощью поля
WriteControl - Учитывайте вкладки
В следующих разделах эти принципы разъясняются.
Для повышения эффективности редактируйте в обратном порядке.
В рамках одного вызова метода documents.batchUpdate упорядочите запросы в порядке убывания местоположения в индексе. Это исключает необходимость вычисления изменений индекса, вызванных вставками и удалениями.
План сотрудничества
Ожидайте изменения состояния документа. Между вызовами одного метода и другим другие участники проекта могут обновлять документ, как показано на следующей диаграмме:
Это может привести к ошибкам, если ваши индексы некорректны. При одновременном редактировании документа несколькими пользователями через пользовательский интерфейс Google Docs решает эту проблему незаметно. Однако, как API-клиент, ваше приложение должно управлять этим процессом. Даже если вы не предполагаете совместную работу над документом, важно предусмотреть меры защиты и обеспечить согласованность состояния документа. Один из способов обеспечить согласованность — ознакомиться с разделом WriteControl .
Обеспечьте согласованность состояния с помощью WriteControl.
При чтении и последующем обновлении документа вы можете управлять обработкой конкурирующих изменений с помощью поля WriteControl в методе documents.batchUpdate . WriteControl предоставляет полномочия для выполнения запросов на запись.
Вот как это использовать:
- Получите документ, используя метод
documents.get, и сохранитеrevisionIdиз возвращенного ресурсаdocuments. - Составьте запросы на обновление.
- Добавьте необязательный объект
WriteControlс одним из двух параметров:- Поле
requiredRevisionIdустанавливается вrevisionIdдокумента, к которому применяется запрос на запись. Если документ был изменен после запроса на чтение через API, запрос на запись не обрабатывается и возвращает ошибку. - Поле
targetRevisionIdустанавливается равнымrevisionIdдокумента, к которому применяется запрос на запись. Если документ был изменен после запроса на чтение через API, изменения, внесенные запросом на запись, применяются к изменениям, внесенным соавтором. Результат запроса на запись объединяет как изменения, внесенные запросом на запись, так и изменения, внесенные соавтором, в новую версию документа. Сервер Docs отвечает за слияние содержимого.
- Поле
Пример создания пакетного запроса с помощью WriteControl можно найти в этом примере пакетного запроса .
Учитывайте вкладки
Один документ может содержать несколько вкладок , что требует специальной обработки в запросах к API.
Вот что следует помнить:
- Установите параметр
includeTabsContentвtrueв методеdocuments.get, чтобы получить содержимое всех вкладок в документе. По умолчанию возвращается не всё содержимое вкладок. - В методе
documents.batchUpdateукажите идентификаторы вкладок, к которым будет применяться каждыйRequest. КаждыйRequestвключает в себя способ указания вкладок, к которым будет применяться обновление. По умолчанию, если вкладка не указана,Requestв большинстве случаев будет применен к первой вкладке в документе. Для получения более подробной информации обратитесь к документации поRequest.