Все данные, с которыми работает Клиент, разделены по принадлежности на следующие Контексты:
- Публичные данные. Доступны только для чтения.
- Личные данные текущего пользователя.
- Данные конкретной команды от лица текущего пользователя.
Поскольку Личные данные и Командные данные недоступны без аутентификации, API синхронизации работает лишь для текущего авторизованного Пользователя.
Поскольку разные Пользователи могут обладать разными привилегиями в одной и той же Команде, они могут видеть (или не видеть) одни и те же сущности этой Команды по-разному. Поэтому Командные данные для Клиента представлены лишь с точки зрения текущего пользователя.
См. подробнее Контексты.
-
Данные глобального контекста должны синхронизироваться в первую очередь, поскольку и личные данные, и командные данные могут ссылаться на глобальные данные.
-
Личные данные должны синхронизироваться раньше командных, т.к. факт участие (наличие доступа) текущего пользователя в тех или иных командах (иными словами список доступных команд) отражается в первую очередь именно в персональных данных. Создание новых команд также осуществляется в контексте личных данных.
-
В последнюю очередь должны синхронизироваться данные конкретных команд отдельно друг от друга по мере необходимости в произвольном порядке.
Обмен данными по каждому Контексту осуществляется отдельно. Например, если пользователь является участником n команд, то при синхронизации потребуется n+2 отдельных сеансов синхронизации: 1 для публичных данных, 1 для личных данных пользователя и n по 1 для каждой из команд.
API синхронизации работает с целым Контекстом данных сразу. Данные всего Контекста целиком имеют UUID и порядковый номер версии.
См. также Сценарии сеансов синхронизации
Клиент может запросить у Сервера актуальные данные целиком. Это делается, например, когда в начале работы Клиенту ничего не известно о данных.
В ответных данных приходит актуальный снапшот. Информации об удалениях объектов нет.
Клиент может запросить у сервера изменения в данном контексте, указав UUID базовой версии, полученной ранее.
В ответных данных приходят только де данные, которые были изменены после указанной версии Контекста, и информация об удалениях объектов.
Отправка изменений на сервер не подразумевает ответное получение результирующих данных ни в виде снапшота, ни в виде относительных изменений.
Чтобы получить результирующие данные, нужно запросить их отдельно любым из способов выше.
Сборка ответных данных при запросе снапшота или разницы может выполняться в фоновом режиме, когда в кеше на сервере нет уже собранных актуальных данных по указанному запросу.
Применение изменений всегда выполняется в фоновом режиме.
Когда обработка запроса уходит в фоновый режим, ответ на этот запрос
имеет статус 202
, а в теле ответа содержится объект
тикета. После такого ответа необходимо сначала
дождаться окончания обработки тикета, а затем отдельным API запросом
получить результат работы (собранные данные при запросе данных).
Подробнее см. далее Ход сеанса синхронизации.