В таблице ниже приведен полный список типов данных. В столбцах указано, как каждый тип представлен в Google Health API и в какой области действия он доступен.
Поля типов данных
В таблице типов данных Google Health API есть несколько столбцов, которые помогут вам понять, как представлены типы данных и какие требования к ним предъявляются. Эти столбцы перечислены далее.
| Поле | Описание |
|---|---|
dataType |
Идентификатор, разделенный дефисами (например, active-minutes), который используется в URL конечных точек. |
Параметр filter |
Идентификатор, разделенный символами подчеркивания (например, active_minutes), который используется в качестве значения параметра фильтра dataType в запросах сводных данных за день и сводных данных. |
| Тип записи | Указывает структуру и формат записанных данных. Это соответствует представлению ресурсов элементов данных. Допустимые значения:
|
| Доступные операции | Список методов API, поддерживаемых для типа данных (например, list, create и rollUp). |
| Область действия | Области действия OAuth, необходимые для доступа к типу данных. |
| Поддержка вебхуков | Указывает, что тип данных поддерживает уведомления в реальном времени с помощью вебхуков при синхронизации новых данных. |
| Поддержка истинных нулей | Указывает, что тип данных поддерживает запись явных нулевых значений, чтобы различать активное нулевое значение (например, ноль минут активности) и отсутствующие или незаписанные данные. |
| Разрешение для хранения | Минимальный интервал записи или выборки, с которым сохраняются элементы данных (например, 1 минута для steps). Для сводных данных это минимальное рекомендуемое значение windowSize, которое обеспечивает равномерное распределение агрегированных данных без артефактов в подинтервалах. |
| Совместимые устройства | Раскрывающийся список физических устройств, которые могут записывать и синхронизировать этот тип данных с Google Health API (с помощью приложения Fitbit). |
| Тип данных | Доступные операции |
Область действия |
|---|---|---|
|
Активный расход энергии
dataType:
active-energy-burnedfilter parameter: active_energy_burned
Тип записи: интервал.
Разрешение хранилища: 1 минута.
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Количество минут активности
dataType:
active-minutesfilter parameter: active_minutes
Тип записи: интервал.
Разрешение хранилища: 1 минута.
Совместимые устройства
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Минуты в зоне активности
dataType:
active-zone-minutesfilter parameter: active_zone_minutes
Тип записи: интервал.
Разрешение хранилища: 1 минута.
Совместимые устройства
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Уровень активности
|
список, сверка | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Высота
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Уровень глюкозы в крови
dataType:
blood-glucosefilter parameter: blood_glucose
Тип записи: Sample.
|
list, get, reconcile, rollup, dailyRollup | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Жировая ткань
dataType:
body-fatfilter 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-zonefilter parameter: calories_in_heart_rate_zone
Тип записи: интервал.
Разрешение хранилища: 1 минута.
|
rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Внутренняя температура тела
dataType:
core-body-temperaturefilter parameter: core_body_temperature
Тип записи: Sample.
|
list, get, reconcile, rollup, dailyRollup | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Вариабельность сердечного ритма за день
dataType:
daily-heart-rate-variabilityfilter parameter: daily_heart_rate_variability
Тип записи: ежедневно.
Совместимые устройства
|
список, сверка | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Ежедневные зоны пульса
dataType:
daily-heart-rate-zonesfilter parameter: daily_heart_rate_zones
Тип записи: ежедневно.
|
список, сверка | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Ежедневный уровень кислорода в крови
dataType:
daily-oxygen-saturationfilter parameter: daily_oxygen_saturation
Тип записи: ежедневно.
Совместимые устройства
|
список, сверка | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Ежедневная частота дыхания
dataType:
daily-respiratory-ratefilter parameter: daily_respiratory_rate
Тип записи: ежедневно.
Совместимые устройства
|
список, сверка | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Частота сердечных сокращений в покое за день
dataType:
daily-resting-heart-ratefilter parameter: daily_resting_heart_rate
Тип записи: ежедневно.
Совместимые устройства
|
список, сверка | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Ежедневные отклонения температуры во время сна
dataType:
daily-sleep-temperature-derivationsfilter parameter: daily_sleep_temperature_derivations
Тип записи: ежедневно.
Поддержка вебхуков
Руководство по жизненным показателям
Руководство по сну
Руководство по температуре кожи
Совместимые устройства
|
список, сверка | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Ежедневный МПК
dataType:
daily-vo2-maxfilter parameter: daily_vo2_max
Тип записи: ежедневно.
Совместимые устройства
|
список, сверка | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Расстояние
dataType:
distancefilter parameter: distance
Тип записи: интервал.
Разрешение хранилища: 1 минута.
Совместимые устройства
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Электрокардиограмма (ЭКГ)
dataType:
electrocardiogramfilter parameter: electrocardiogram
Тип записи: сеанс.
Совместимые устройства
|
list | .ecg.readonly |
|
Тренировка
dataType:
exercisefilter parameter: exercise
Тип записи: сеанс.
Совместимые устройства
|
list, get, reconcile, create, update, batchDelete | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Этажи
|
reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Еда
|
list, get | .nutrition.readonly.nutrition.writeonly |
|
Единица измерения количества еды
dataType:
food-measurement-unitfilter parameter: food_measurement_unit
Тип записи: еда.
Совместимые устройства
|
list, get | .nutrition.readonly.nutrition.writeonly |
|
Пульс
dataType:
heart-ratefilter parameter: heart_rate
Тип записи: Sample.
Разрешение хранилища: 1 секунда.
Совместимые устройства
|
list, reconcile, rollup, dailyRollup | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Вариабельность сердечного ритма
dataType:
heart-rate-variabilityfilter parameter: heart_rate_variability
Тип записи: Sample.
Совместимые устройства
|
список, сверка | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Высота
|
list, get, reconcile, create, update, batchDelete | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Журнал потребления жидкости
|
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete | .nutrition.readonly.nutrition.writeonly |
|
Уведомление о нарушении сердечного ритма
dataType:
irregular-rhythm-notificationfilter parameter: irregular_rhythm_notification
Тип записи: сеанс.
|
list | .irn.readonly |
|
Менструация
dataType:
menstrual-periodfilter parameter: menstrual_period
Тип записи: интервал.
|
create, update, batchDelete | .reproductive_health.writeonly |
|
Вайбы
|
create, update, batchDelete | .mindfulness.writeonly |
|
Журнал питания
dataType:
nutrition-logfilter parameter: nutrition_log
Тип записи: сеанс.
Совместимые устройства
|
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete | .nutrition.readonly.nutrition.writeonly |
|
Тест на овуляцию
dataType:
ovulation-testfilter parameter: ovulation_test
Тип записи: Sample.
|
create, update, batchDelete | .reproductive_health.writeonly |
|
Уровень кислорода в крови
dataType:
oxygen-saturationfilter parameter: oxygen_saturation
Тип записи: Sample.
Разрешение хранилища: 1 минута.
Совместимые устройства
|
список, сверка | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Сводка о частоте дыхания во время сна
dataType:
respiratory-rate-sleep-summaryfilter parameter: respiratory_rate_sleep_summary
Тип записи: Sample.
Совместимые устройства
|
список, сверка | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
МПК при беге
dataType:
run-vo2-maxfilter parameter: run_vo2_max
Тип записи: Sample.
Совместимые устройства
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Период малоподвижного образа жизни
dataType:
sedentary-periodfilter parameter: sedentary_period
Тип записи: интервал.
Совместимые устройства
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Датчики температуры кожи
v4beta
dataType:
skin-temperature-sensorsfilter parameter: skin_temperature_sensors
Тип записи: Sample.
Руководство по жизненным показателям
Руководство по температуре кожи
Руководство по женскому здоровью
Совместимые устройства |
list | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Сон
dataType:
sleepfilter parameter: sleep
Тип записи: сеанс.
Совместимые устройства
|
list, get, reconcile, create, update, batchDelete | .sleep.readonly.sleep.writeonly |
|
Шаги
dataType:
stepsfilter parameter: steps
Тип записи: интервал.
Разрешение хранилища: 1 минута.
Совместимые устройства
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Данные о дорожках бассейна
dataType:
swim-lengths-datafilter parameter: swim_lengths_data
Тип записи: интервал.
Совместимые устройства
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Симптомы
|
create, update, batchDelete | .logged_symptoms.writeonly |
|
Время в пульсовой зоне
dataType:
time-in-heart-rate-zonefilter parameter: time_in_heart_rate_zone
Тип записи: интервал.
Разрешение хранилища: 1 минута.
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Общее количество калорий
dataType:
total-caloriesfilter parameter: total_calories
Тип записи: интервал.
Разрешение хранилища: 1 минута.
Совместимые устройства
|
rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
МПК
dataType:
vo2-maxfilter parameter: vo2_max
Тип записи: Sample.
Совместимые устройства
|
список, сверка | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Вес
dataType:
weightfilter 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 дней.
- Максимальный диапазон дат в запросе – 14 дней для
- Размер окна свертывания. При вызове конечной точки
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, измеряются в миллиметрах по следующим причинам:
- Точность данных. Самая важная причина использования миллиметров – это обеспечение точности данных, которые мы считываем и предоставляем. Использование такой мелкой единицы, как миллиметры, позволяет нам представлять измерения с высокой точностью.
- Стандартизация. Миллиметры – это стандартная единица измерения, которая используется во всех наших сервисах. Такая согласованность помогает обеспечить единообразие для разработчиков, взаимодействующих с различными частями API.
- Поддержка разных систем измерения. Использование базовой единицы, например миллиметра, позволяет разработчикам легко конвертировать значения в любые другие единицы, независимо от того, работают ли они с метрической, имперской или другими системами измерения.
Разная продолжительность дня
При обработке времени Health API отдает приоритет времени пользователя, чтобы учитывать переменную продолжительность дня, вызванную переходом на летнее время или путешествиями. Каждая точка данных хранится с физической временной меткой UTC и смещением UTC, активным на момент события. Это позволяет системе:
- Сопоставьте событие с точным физическим моментом.
- Скорректируйте время с учетом локального контекста пользователя для агрегирования.
Летнее время
При переходе на зимнее время в сутках оказывается 25 часов, и сводка за этот день будет содержать данные за 25 часов. При переходе на летнее время гражданские сутки длятся 23 часа, а при переходе на зимнее – 25 часов.
Путешествия
Пересечение часовых поясов может привести к ещё более значительным изменениям физической продолжительности одного гражданского дня.
Используйте конечную точку dailyRollUp, чтобы согласовать различия в часовых поясах. Данные автоматически приписываются к календарному дню, в который они были записаны, по местному времени пользователя. Таким образом, день "сшивается" воедино, несмотря на смену часовых поясов. Подробные сведения и примеры приведены в разделе Агрегирование по календарным дням руководства по агрегированию данных.