Всё ниже требует области
employees:read. Ключ видит только тех сотрудников и те
поля, которые доступны профилю прав его владельца — эффективный доступ есть
пересечение областей ключа и прав владельца.1
Первичная выгрузка
Пройдите список постранично с максимальным Передавайте полученный
limit=1000, следуя за
next_page_token, пока он не придёт пустым. В expand перечислите связанные
сущности, которые нужны сразу — так вы не будете дёргать граф отдельными
запросами.Ответ
next_page_token в следующий запрос — и так до пустого
токена. Каждую запись сохраняйте по id (upsert).2
Инкрементальный опрос
Запомните момент, когда начали синхронизацию (UTC), и сохраните его как
чекпойнт. В следующий раз запрашивайте только то, что изменилось с чекпойнта,
через Обход страниц — тот же, что и при полной выгрузке: идите за
updated_since (RFC 3339), а затем сдвиньте чекпойнт на время нового
запуска.next_page_token
до пустого токена. Берите чекпойнт от начала прогона, а не от конца, чтобы не
потерять изменения, случившиеся во время обхода.Что попадает под updated_since, а что нет:updated_since отражает изменения самой карточки сотрудника. Переименование
связанных сущностей (человек, отдел, должность) в это поле не попадает —
для них подпишитесь на вебхуки: переименование
человека приходит как employee.changed по каждому затронутому сотруднику.Смещение часового пояса в query кодируйте как %2B05:00 или присылайте время
в Z (UTC): «плюс» в URL иначе трактуется как пробел.3
Сверка удалений
Инкрементальный опрос не сообщает об удалениях — удалённый сотрудник просто
перестаёт появляться в списках, а
GET /employees/{id} по нему возвращает
404 EMPLOYEE_NOT_FOUND. Поэтому периодически (например, раз в сутки) делайте
полную выгрузку и вычитайте её из своего хранилища: чего нет в свежем полном
списке — то удалено на стороне Doodocs, пометьте у себя.Итоговый цикл
- Один раз: полная постраничная выгрузка → наполняете хранилище.
- Часто (минуты):
updated_sinceот чекпойнта → upsert изменённых карточек. - Редко (раз в сутки): полный перечит → сверка и пометка удалённых.
- Мгновенно: вебхуки
employee.changed/employee.deletedзакрывают то, что опрос поupdated_sinceне видит (переименования связанных сущностей, удаления).
Дальше
Реагировать на приём и увольнение
Заменить опрос вебхуками и обрабатывать события в реальном времени.
Вебхуки
Подписка, тонкий payload и проверка подписи.