Типы данных Google Health API

В таблице ниже приведен полный список типов данных. В столбцах указано, как каждый тип представлен в Google Health API и в какой области действия он доступен.

Поля типов данных

В таблице типов данных Google Health API есть несколько столбцов, которые помогут вам понять, как представлены типы данных и какие требования к ним предъявляются. Эти столбцы перечислены далее.

Таблица. Описание полей типов данных Google Health API
Поле Описание
dataType Идентификатор, разделенный дефисами (например, active-minutes), который используется в URL конечных точек.
Параметр filter Идентификатор, разделенный символами подчеркивания (например, active_minutes), который используется в качестве значения параметра фильтра dataType в запросах сводных данных за день и сводных данных.
Тип записи

Указывает структуру и формат записанных данных. Это соответствует представлению ресурсов элементов данных. Допустимые значения:

  • Interval (представляет измерения, записанные за определенный период времени).
  • Sample (Представляет мгновенные измерения.)
  • Daily (представляет собой агрегированные или записанные за день измерения).
  • Session (Представляет непрерывный блок записи, например тренировку или сеанс электрокардиограммы (ЭКГ).)
  • Food (Представляет продукт питания или сущность данных, связанную с питанием.)
Доступные операции Список методов API, поддерживаемых для типа данных (например, list, create и rollUp).
Область действия Области действия OAuth, необходимые для доступа к типу данных.
Поддержка вебхуков Указывает, что тип данных поддерживает уведомления в реальном времени с помощью вебхуков при синхронизации новых данных.
Поддержка истинных нулей Указывает, что тип данных поддерживает запись явных нулевых значений, чтобы различать активное нулевое значение (например, ноль минут активности) и отсутствующие или незаписанные данные.
Разрешение для хранения Минимальный интервал записи или выборки, с которым сохраняются элементы данных (например, 1 минута для steps). Для сводных данных это минимальное рекомендуемое значение windowSize, которое обеспечивает равномерное распределение агрегированных данных без артефактов в подинтервалах.
Совместимые устройства Раскрывающийся список физических устройств, которые могут записывать и синхронизировать этот тип данных с Google Health API (с помощью приложения Fitbit).

Таблица. Типы данных Google Health API
Тип данных Доступные
операции
Область действия
Активный расход энергии
dataType: active-energy-burned
filter parameter: active_energy_burned
Тип записи: интервал.
Разрешение хранилища: 1 минута.
list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Количество минут активности
dataType: active-minutes
filter parameter: active_minutes
Тип записи: интервал.
Разрешение хранилища: 1 минута.

Совместимые устройства

  • Fitbit Air
  • Fitbit Alta
  • Fitbit Alta HR
  • Fitbit Blaze
  • Fitbit Charge 2
  • Fitbit Charge 3
  • Fitbit Flex 2
  • Fitbit Inspire
  • Fitbit Inspire HR
  • Pixel Watch 4
list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Минуты в зоне активности
dataType: active-zone-minutes
filter parameter: active_zone_minutes
Тип записи: интервал.
Разрешение хранилища: 1 минута.

Совместимые устройства

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Уровень активности
dataType: activity-level
filter parameter: activity_level
Тип записи: интервал.
список, сверка .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Высота
dataType: altitude
filter parameter: altitude
Тип записи: интервал.
Разрешение хранилища: 1 минута.
list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Уровень глюкозы в крови
list, get, reconcile, rollup, dailyRollup .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Жировая ткань
dataType: body-fat
filter parameter: body_fat
Тип записи: Sample.

Совместимые устройства

list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Калории в пульсовой зоне
dataType: calories-in-heart-rate-zone
filter parameter: calories_in_heart_rate_zone
Тип записи: интервал.
Разрешение хранилища: 1 минута.
rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Внутренняя температура тела
dataType: core-body-temperature
filter parameter: core_body_temperature
Тип записи: Sample.
list, get, reconcile, rollup, dailyRollup .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Вариабельность сердечного ритма за день
dataType: daily-heart-rate-variability
filter parameter: daily_heart_rate_variability
Тип записи: ежедневно.

Совместимые устройства

список, сверка .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Ежедневные зоны пульса
dataType: daily-heart-rate-zones
filter parameter: daily_heart_rate_zones
Тип записи: ежедневно.
список, сверка .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Ежедневный уровень кислорода в крови
dataType: daily-oxygen-saturation
filter parameter: daily_oxygen_saturation
Тип записи: ежедневно.

Совместимые устройства

список, сверка .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Ежедневная частота дыхания
dataType: daily-respiratory-rate
filter parameter: daily_respiratory_rate
Тип записи: ежедневно.

Совместимые устройства

список, сверка .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Частота сердечных сокращений в покое за день
dataType: daily-resting-heart-rate
filter parameter: daily_resting_heart_rate
Тип записи: ежедневно.

Совместимые устройства

список, сверка .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Ежедневные отклонения температуры во время сна
dataType: daily-sleep-temperature-derivations
filter parameter: daily_sleep_temperature_derivations
Тип записи: ежедневно.

Совместимые устройства

список, сверка .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Ежедневный МПК
dataType: daily-vo2-max
filter parameter: daily_vo2_max
Тип записи: ежедневно.

Совместимые устройства

список, сверка .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Расстояние
dataType: distance
filter parameter: distance
Тип записи: интервал.
Разрешение хранилища: 1 минута.

Совместимые устройства

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Электрокардиограмма (ЭКГ)
dataType: electrocardiogram
filter parameter: electrocardiogram
Тип записи: сеанс.

Совместимые устройства

list .ecg.readonly
Тренировка
dataType: exercise
filter parameter: exercise
Тип записи: сеанс.

Совместимые устройства

list, get, reconcile, create, update, batchDelete .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Этажи
dataType: floors
filter parameter: floors
Тип записи: интервал.
Разрешение хранилища: 1 минута.
reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Еда
dataType: food
filter parameter: food
Тип записи: "Еда".
list, get .nutrition.readonly
.nutrition.writeonly
Единица измерения количества еды
dataType: food-measurement-unit
filter parameter: food_measurement_unit
Тип записи: еда.

Совместимые устройства

list, get .nutrition.readonly
.nutrition.writeonly
Пульс
dataType: heart-rate
filter parameter: heart_rate
Тип записи: Sample.
Разрешение хранилища: 1 секунда.

Совместимые устройства

list, reconcile, rollup, dailyRollup .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Вариабельность сердечного ритма
dataType: heart-rate-variability
filter parameter: heart_rate_variability
Тип записи: Sample.

Совместимые устройства

список, сверка .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Высота
dataType: height
filter parameter: height
Тип записи: Sample.
list, get, reconcile, create, update, batchDelete .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Журнал потребления жидкости
dataType: hydration-log
filter parameter: hydration_log
Тип записи: сеанс.
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .nutrition.readonly
.nutrition.writeonly
Уведомление о нарушении сердечного ритма
dataType: irregular-rhythm-notification
filter parameter: irregular_rhythm_notification
Тип записи: сеанс.
list .irn.readonly
Менструация
dataType: menstrual-period
filter parameter: menstrual_period
Тип записи: интервал.
create, update, batchDelete .reproductive_health.writeonly
Вайбы
dataType: moods
filter parameter: moods
Тип записи: Sample.
create, update, batchDelete .mindfulness.writeonly
Журнал питания
dataType: nutrition-log
filter parameter: nutrition_log
Тип записи: сеанс.

Совместимые устройства

list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .nutrition.readonly
.nutrition.writeonly
Тест на овуляцию
dataType: ovulation-test
filter parameter: ovulation_test
Тип записи: Sample.
create, update, batchDelete .reproductive_health.writeonly
Уровень кислорода в крови
dataType: oxygen-saturation
filter parameter: oxygen_saturation
Тип записи: Sample.
Разрешение хранилища: 1 минута.

Совместимые устройства

список, сверка .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Сводка о частоте дыхания во время сна
dataType: respiratory-rate-sleep-summary
filter parameter: respiratory_rate_sleep_summary
Тип записи: Sample.

Совместимые устройства

список, сверка .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
МПК при беге
dataType: run-vo2-max
filter parameter: run_vo2_max
Тип записи: Sample.

Совместимые устройства

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Период малоподвижного образа жизни
dataType: sedentary-period
filter parameter: sedentary_period
Тип записи: интервал.

Совместимые устройства

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Датчики температуры кожи v4beta
dataType: skin-temperature-sensors
filter parameter: skin_temperature_sensors
Тип записи: Sample.

Совместимые устройства

list .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Сон
dataType: sleep
filter parameter: sleep
Тип записи: сеанс.

Совместимые устройства

list, get, reconcile, create, update, batchDelete .sleep.readonly
.sleep.writeonly
Шаги
dataType: steps
filter parameter: steps
Тип записи: интервал.
Разрешение хранилища: 1 минута.

Совместимые устройства

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Данные о дорожках бассейна
dataType: swim-lengths-data
filter parameter: swim_lengths_data
Тип записи: интервал.

Совместимые устройства

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Симптомы
dataType: symptoms
filter parameter: symptoms
Тип записи: Sample.
create, update, batchDelete .logged_symptoms.writeonly
Время в пульсовой зоне
dataType: time-in-heart-rate-zone
filter parameter: time_in_heart_rate_zone
Тип записи: интервал.
Разрешение хранилища: 1 минута.
list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Общее количество калорий
dataType: total-calories
filter parameter: total_calories
Тип записи: интервал.
Разрешение хранилища: 1 минута.

Совместимые устройства

rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
МПК
dataType: vo2-max
filter parameter: vo2_max
Тип записи: Sample.

Совместимые устройства

список, сверка .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Вес
dataType: weight
filter parameter: weight
Тип записи: Sample.

Совместимые устройства

list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly

Ограничения запросов

При запросе элементов данных, сводок или ежедневных сводок из API учитывайте следующие ограничения:

  • Требования к фильтрам. Для некоторых производных типов данных, доступных только для чтения, например total-calories, требуется фильтр, указывающий время начала интервала (с использованием физического или гражданского времени).
  • Ограничения на диапазон запросов. Конечные точки агрегирования сводных и ежедневных сводных данных накладывают ограничения на максимальный диапазон запросов в зависимости от типа данных:
    • Максимальный диапазон дат в запросе – 14 дней для calories-in-heart-rate-zone, heart-rate, active-minutes и total-calories.
    • Максимальный диапазон запросов для всех остальных типов данных составляет 90 дней.
  • Размер окна свертывания. При вызове конечной точки rollUp продолжительность windowSize должна быть не менее 1 секунды ("1s"). Продолжительность менее секунды отклоняется с ошибкой INVALID_ARGUMENT. Кроме того, выберите windowSize, равный или больший, чем разрешение базового хранилища типа данных (например, "60s" для типов данных с интервалом в 1 минуту, таких как steps и distance), чтобы избежать неравномерного распределения по подинтервалам. Подробнее об окне агрегирования и разрешении хранилища…

Типы данных Daily и Interval

Для некоторых физиологических показателей, таких как вариабельность сердечного ритма (ВСР) или уровень кислорода в крови (SpO2), Google Health API предоставляет два разных типа данных: Daily (Ежедневно) и Interval (Интервал). Понимание разницы между ними поможет вам выбрать подходящий показатель для вашего случая.

  • Ежедневно. Сводка за весь день. Используйте этот вариант для выявления общих тенденций и создания ежедневных сводок, чтобы сэкономить время на обработку данных.

  • Интервал: подробные измерения с высоким разрешением, выполняемые в течение дня. Используйте его, чтобы отслеживать колебания в течение дня или выполнять подробный почасовой анализ.

Доступность данных

Обновления данных пользователя доступны только после того, как он синхронизирует трекер физической активности или вручную введет новые данные в приложение Google Health. Устройство Fitbit и приложение Google Health могут автоматически синхронизироваться каждые 15 минут, если приложение Google Health открыто на мобильном устройстве, между ними установлено активное подключение для передачи данных и они находятся в зоне действия Bluetooth. Если пользователь отслеживает активность с помощью MobileTrack, MobileTrack синхронизируется каждый час, пока приложение открыто.

Запрос статистики

Одно из основных преимуществ Google Health API – возможность отслеживать показатели здоровья пользователя в течение длительного времени. Вы можете запрашивать данные пользователя за весь период, в течение которого они записывались. API не накладывает ограничений на объем статистики, которую может использовать ваше приложение.

Однако на запросы статистики по-прежнему распространяются стандартные ограничения. Чтобы обеспечить стабильность системы и предотвратить чрезмерную нагрузку, Google Health API использует автоматическую разбивку на страницы с размерами страниц, зависящими от конечной точки. Обратите внимание на следующие ограничения и особенности:

  • Автоматическая разбивка на страницы. Если вы запрашиваете данные за длительный период, API вернет только первую страницу результатов, размер которой не превышает ограничение для этой конечной точки, а также токен nextPageToken. Чтобы запросить последующие страницы, необходимо использовать nextPageToken.
  • Переменные размеры страниц. Ограничения зависят от конечной точки и типа данных. Для большинства типов данных размер страницы ограничен 10 000. Однако для некоторых типов данных, таких как exercise и sleep, размер страницы по умолчанию и максимальный размер страницы ограничен 25. Например, если клиент запрашивает все данные о сне за последние 10 лет, API все равно вернет только 25 сеансов сна на первой странице.
  • Ограничения на диапазон дат для сводных данных. Для конечных точек сводных и агрегированных данных (таких как rollUp и dailyRollUp) диапазоны дат запросов ограничены в зависимости от типа данных:
    • Максимальный диапазон дат для calories-in-heart-rate-zone, heart-rate, active-minutes и total-calories составляет 14 дней.
    • Максимальный диапазон дат для всех остальных типов сводных данных составляет 90 дней.

В зависимости от объема статистики, необходимой вашему приложению, для получения всего набора данных может потребоваться последовательно пролистать страницы. Учитывайте это при разработке процесса синхронизации данных в приложении.

Чтобы обеспечить оптимальную производительность и избежать ошибок API, следуйте этим рекомендациям при запросе статистики:

Поэтапная синхронизация данных (горячая и холодная загрузка)

  • Первоначальная загрузка. Получайте и отображайте только данные за последние 7–14 дней. Это гарантирует, что пользователи увидят данные сразу, не дожидаясь выполнения длительных запросов.
  • Фоновая "холодная" загрузка. Передайте извлечение старых данных асинхронной очереди с более низким приоритетом или фоновому процессу после отрисовки основного интерфейса.

Разбиение запросов для агрегирования

  • Поскольку для конечных точек сводки и ежедневной сводки действует ограничение на максимальный диапазон дат (14 или 90 дней в зависимости от типа данных), вам необходимо разбивать большие запросы на агрегирование исторических данных на более мелкие последовательные интервалы в пределах этих ограничений.
  • Объединяйте подзапросы в пакеты или последовательности, чтобы не превышать лимиты на параллельные запросы и поддерживать стабильную работу индикаторов выполнения в интерфейсе.

Используйте предварительно агрегированные сводные данные

Реструктурируйте обзорные панели и диаграммы трендов, чтобы использовать предварительно агрегированные сводные конечные точки (например, DailyRollUpDataPoints). Это значительно снизит вычислительную нагрузку на серверную часть и время передачи данных по сети клиенту.

Устойчивая обработка ошибок (умные повторные попытки)

  • При достижении ограничений на частоту запросов (429 Too Many Requests) и времени ожидания шлюза сервера (504 Gateway Timeout) используйте экспоненциальную выдержку. Не пытайтесь сразу же повторно отправить большие пакеты данных, которые не удалось передать. Мгновенные повторные попытки увеличивают нагрузку на серверную часть и усугубляют деградацию системы.

Доступ сторонних приложений

Устройства Fitbit не могут напрямую взаимодействовать со сторонними приложениями или сервисами. Эти устройства предназначены для обмена данными и синхронизации исключительно с приложением Google Health.

Устройство автоматически синхронизирует данные в течение дня, когда открыто приложение Google Health, или каждые 15 минут, если Bluetooth активен и приложение работает в фоновом режиме. После завершения синхронизации данные становятся доступны сторонним сервисам через Google Health API.

Фильтрация по качеству и действительности данных

Чтобы предоставлять надежные показатели здоровья без необходимости настраивать фильтрацию шума на стороне клиента, Google Health API проверяет телеметрию датчиков и исключает недействительные измерения перед возвратом ответов:

  • Для поминутного насыщения крови кислородом (oxygen-saturation) API возвращает только подтвержденные показания и удаляет минуты, помеченные как недействительные из-за движения руки, неплотного прилегания к запястью или оценки достоверности датчика ниже 50%, а также 3 минуты до и после недействительного показания и изолированные действительные отрезки короче 4 минут. Поэтому данные за каждую минуту могут быть неполными и содержать пробелы. Подробнее о фильтрации данных SpO2 на уровне минут и их достоверности…

Стандарты расстояния

Расстояния тренировок, например elevationGainMillimeters, измеряются в миллиметрах по следующим причинам:

  1. Точность данных. Самая важная причина использования миллиметров – это обеспечение точности данных, которые мы считываем и предоставляем. Использование такой мелкой единицы, как миллиметры, позволяет нам представлять измерения с высокой точностью.
  2. Стандартизация. Миллиметры – это стандартная единица измерения, которая используется во всех наших сервисах. Такая согласованность помогает обеспечить единообразие для разработчиков, взаимодействующих с различными частями API.
  3. Поддержка разных систем измерения. Использование базовой единицы, например миллиметра, позволяет разработчикам легко конвертировать значения в любые другие единицы, независимо от того, работают ли они с метрической, имперской или другими системами измерения.

Разная продолжительность дня

При обработке времени Health API отдает приоритет времени пользователя, чтобы учитывать переменную продолжительность дня, вызванную переходом на летнее время или путешествиями. Каждая точка данных хранится с физической временной меткой UTC и смещением UTC, активным на момент события. Это позволяет системе:

  • Сопоставьте событие с точным физическим моментом.
  • Скорректируйте время с учетом локального контекста пользователя для агрегирования.

Летнее время

При переходе на зимнее время в сутках оказывается 25 часов, и сводка за этот день будет содержать данные за 25 часов. При переходе на летнее время гражданские сутки длятся 23 часа, а при переходе на зимнее – 25 часов.

Путешествия

Пересечение часовых поясов может привести к ещё более значительным изменениям физической продолжительности одного гражданского дня.

Используйте конечную точку dailyRollUp, чтобы согласовать различия в часовых поясах. Данные автоматически приписываются к календарному дню, в который они были записаны, по местному времени пользователя. Таким образом, день "сшивается" воедино, несмотря на смену часовых поясов. Подробные сведения и примеры приведены в разделе Агрегирование по календарным дням руководства по агрегированию данных.