В следующей таблице представлен полный список типов данных, с несколькими столбцами, которые помогут вам понять представление каждого типа в API Google Health, а также область его доступности.
Поля типа данных
В таблице типов данных API Google Health содержится несколько столбцов, которые помогут вам понять представление и требования к каждому типу данных. Эти столбцы следующие:
| Поле | Описание |
|---|---|
dataType | Идентификатор, разделённый дефисами (например, active-minutes ), используемый в URL-адресах конечных точек. |
параметр filter | Идентификатор, разделённый символами подчеркивания (например, active_minutes ), используется в качестве значения параметра фильтра dataType в ежедневных сводных данных и запросах сводных данных. |
| Тип записи | Указывает структуру и формат записываемых данных. В основе этого лежит представление данных в виде ресурса. Возможные значения:
|
| Доступные операции | Отображает список методов API, поддерживаемых для данного типа данных (таких как list , create и rollUp ). |
| Объем | Требуемые области действия OAuth для доступа к данному типу данных. |
| Поддержка веб-хуков | Указывает на то, что данный тип данных поддерживает уведомления в реальном времени с использованием веб-хуков при синхронизации новых данных. |
| Поддержка истинных нулей | Указывает на то, что данный тип данных поддерживает запись явных нулевых значений для различения нулевого значения активности (например, нулевого количества активных минут) от отсутствующих или незарегистрированных данных. |
| Совместимые устройства | Расширяемый список физических устройств, которые могут записывать и синхронизировать этот тип данных с API Google Health (с помощью приложения Fitbit). |
| Тип данных | Доступный операции | Объем |
|---|---|---|
| Сожженная активная энергия dataType: active-energy-burnedПараметр фильтра: active_energy_burned Тип записи: Интервал | список, сверка, свертка, ежедневная сводка | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
| Активные минуты Тип данных: active-minutesПараметр фильтра: active_minutes Тип записи: Интервал Совместимые устройства
| список, сверка, свертка, ежедневная сводка | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
| Минуты активной зоны dataType: active-zone-minutesПараметр фильтра: active_zone_minutes Тип записи: Интервал Совместимые устройства
| список, сверка, свертка, ежедневная сводка | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
| Уровень активности Тип данных: activity-levelПараметр фильтра: activity_level Тип записи: Интервал | список, согласовать | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
| Высота Тип данных: altitudeПараметр фильтра: altitude Тип записи: Интервал | список, сверка, свертка, ежедневная сводка | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
| Уровень глюкозы в крови Тип данных: blood-glucoseПараметр фильтра: blood_glucose Тип записи: Образец | список, получить, согласовать, свернуть, ежедневный свертывание | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
| Жировая масса тела Тип данных: body-fatПараметр фильтра: body_fat Тип записи: Образец Совместимые устройства
| список, получить, согласовать, свернуть, ежедневный свертывание, создать, обновить, пакетное удаление | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
| Калории в зоне частоты сердечных сокращений dataType: calories-in-heart-rate-zoneПараметр фильтра: calories_in_heart_rate_zone Тип записи: Интервал | rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
| Температура тела Тип данных: core-body-temperatureПараметр фильтра: core_body_temperature Тип записи: Образец | список, получить, согласовать, свернуть, ежедневный свертывание | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
| Суточная вариабельность сердечного ритма Тип данных: daily-heart-rate-variabilityПараметр фильтра: daily_heart_rate_variability Тип записи: Ежедневная Совместимые устройства
| список, согласовать | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
| Ежедневные зоны частоты сердечных сокращений dataType: daily-heart-rate-zonesПараметр фильтра: daily_heart_rate_zones Тип записи: Ежедневная | список, согласовать | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
| Суточная сатурация кислорода Тип данных: daily-oxygen-saturationПараметр фильтра: daily_oxygen_saturation Тип записи: Ежедневная Совместимые устройства
| список, согласовать | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
| Суточная частота дыхания Тип данных: daily-respiratory-rateПараметр фильтра: daily_respiratory_rate Тип записи: Ежедневная Совместимые устройства
| список, согласовать | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
| Ежедневная частота сердечных сокращений в состоянии покоя dataType: daily-resting-heart-rateПараметр фильтра: daily_resting_heart_rate Тип записи: Ежедневная Совместимые устройства
| список, согласовать | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
| Ежедневные измерения температуры во время сна Тип данных: daily-sleep-temperature-derivationsПараметр фильтра: daily_sleep_temperature_derivations Тип записи: Ежедневная Совместимые устройства
| список, согласовать | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
| Ежедневный VO2 Max dataType: daily-vo2-maxПараметр фильтра: daily_vo2_max Тип записи: Ежедневная Совместимые устройства
| список, согласовать | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
| Расстояние Тип данных: distanceПараметр фильтра: distance Тип записи: Интервал Совместимые устройства
| список, сверка, свертка, ежедневная сводка | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
| Электрокардиограмма (ЭКГ) Тип данных: electrocardiogramПараметр фильтра: electrocardiogram Тип записи: Сессия Совместимые устройства
| список | .ecg.readonly |
| Упражнение Тип данных: exerciseПараметр фильтра: exercise Тип записи: Сессия Совместимые устройства
| список, получить, согласовать, создать, обновить, пакетное удаление | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
| Полы Тип данных: floorsПараметр фильтра: floors Тип записи: Интервал | reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
| Еда | список, получить | .nutrition.readonly.nutrition.writeonly |
| Измерительный прибор для пищевых продуктов Тип данных: food-measurement-unitПараметр фильтра: food_measurement_unit Тип записи: Еда Совместимые устройства
| список, получить | .nutrition.readonly.nutrition.writeonly |
| Частота сердечных сокращений Тип данных: heart-rateПараметр фильтра: heart_rate Тип записи: Образец Совместимые устройства
| список, сверка, свертка, ежедневная сводка | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
| Вариабельность сердечного ритма Тип данных: heart-rate-variabilityПараметр фильтра: heart_rate_variability Тип записи: Образец Совместимые устройства
| список, согласовать | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
| Высота | список, получить, согласовать, создать, обновить, пакетное удаление | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
| Журнал учета потребления жидкости | список, получить, согласовать, свернуть, ежедневный свертывание, создать, обновить, пакетное удаление | .nutrition.readonly.nutrition.writeonly |
| Уведомление о нарушении ритма dataType: irregular-rhythm-notificationПараметр фильтра: irregular_rhythm_notification Тип записи: Сессия | список | .irn.readonly |
| Менструация Тип данных: menstrual-periodПараметр фильтра: menstrual_period Тип записи: Интервал | создать, обновить, удалить пакетом | .reproductive_health.writeonly |
| Настроения | создать, обновить, удалить пакетом | .mindfulness.writeonly |
| Журнал учета пищевых продуктов Тип данных: nutrition-logПараметр фильтра: nutrition_log Тип записи: Образец Совместимые устройства
| список, получить, согласовать, свернуть, ежедневный свертывание, создать, обновить, пакетное удаление | .nutrition.readonly.nutrition.writeonly |
| Тест на овуляцию Тип данных: ovulation-testПараметр фильтра: ovulation_test Тип записи: Образец | создать, обновить, удалить пакетом | .reproductive_health.writeonly |
| Насыщение кислородом Тип данных: oxygen-saturationПараметр фильтра: oxygen_saturation Тип записи: Образец Совместимые устройства
| список, согласовать | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
| Сводка по частоте дыхания во сне dataType: respiratory-rate-sleep-summaryПараметр фильтра: respiratory_rate_sleep_summary Тип записи: Образец Совместимые устройства
| список, согласовать | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
| Бег VO2 Max dataType: run-vo2-maxПараметр фильтра: run_vo2_max Тип записи: Образец Совместимые устройства
| список, сверка, свертка, ежедневная сводка | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
| Сидячий период dataType: sedentary-periodПараметр фильтра: sedentary_period Тип записи: Интервал Совместимые устройства
| список, сверка, свертка, ежедневная сводка | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
| Спать Тип данных: sleepПараметр фильтра: sleep Тип записи: Сессия Совместимые устройства
| список, получить, согласовать, создать, обновить, пакетное удаление | .sleep.readonly.sleep.writeonly |
| Шаги Тип данных: stepsПараметр фильтра: steps Тип записи: Интервал Совместимые устройства
| список, сверка, свертка, ежедневная сводка | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
| Данные о длине заплывов dataType: swim-lengths-dataПараметр фильтра: swim_lengths_data Тип записи: Интервал Совместимые устройства
| список, сверка, свертка, ежедневная сводка | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
| Симптомы Тип данных: symptomsПараметр фильтра: symptoms Тип записи: Образец | создать, обновить, удалить пакетом | .logged_symptoms.writeonly |
| Время в зоне частоты сердечных сокращений dataType: time-in-heart-rate-zoneПараметр фильтра: time_in_heart_rate_zone Тип записи: Интервал | список, сверка, свертка, ежедневная сводка | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
| Общее количество калорий Тип данных: total-caloriesПараметр фильтра: total_calories Тип записи: Интервал Совместимые устройства
| rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
| VO2 Max Тип данных: vo2-maxПараметр фильтра: vo2_max Тип записи: Образец Совместимые устройства
| список, согласовать | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
| Масса Тип данных: weightПараметр фильтра: weight Тип записи: Образец Совместимые устройства
| список, получить, согласовать, свернуть, ежедневный свертывание, создать, обновить, пакетное удаление | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
Ограничения запроса
При запросе данных, сводных отчетов или ежедневных сводок через API следует учитывать следующие ограничения:
- Требования к фильтру: Для некоторых производных типов данных, доступных только для чтения, таких как
total-calories, требуется фильтр, указывающий время начала интервала (с использованием физического или гражданского времени). - Ограничения диапазона запросов: Конечные точки агрегирования сводных и ежедневных сводных данных устанавливают максимальные ограничения диапазона запросов в зависимости от типа данных:
- Максимальный диапазон запросов для
calories-in-heart-rate-zone,heart-rate,active-minutesиtotal-caloriesсоставляет 14 дней. - Для всех остальных типов данных максимальный диапазон запросов составляет 90 дней.
- Максимальный диапазон запросов для
Доступность данных
Обновление данных пользователя доступно только после синхронизации трекера активности или ручного ввода новых данных в мобильное или веб-приложение Fitbit. Устройство Fitbit и мобильное приложение Fitbit могут автоматически синхронизироваться каждые 15 минут, когда приложение Fitbit открыто на мобильном устройстве, и оба устройства имеют активное соединение для передачи данных и находятся в зоне действия Bluetooth. Если пользователь отслеживает активность с помощью MobileTrack, MobileTrack синхронизируется каждый час, пока приложение открыто.
Запрос исторических данных
Одно из главных преимуществ API Google Health — возможность отслеживать производительность пользователя и контролировать показатели его здоровья в течение длительных периодов времени. Вы можете запрашивать данные пользователя за весь период, с момента их записи; API не накладывает никаких ограничений на объем исторических данных, которые может обрабатывать ваше приложение.
Однако запросы к историческим данным по-прежнему регулируются стандартными ограничениями скорости . Для обеспечения стабильности системы и предотвращения чрезмерной нагрузки API Google Health использует автоматическую пагинацию с размерами страниц, специфичными для каждой конечной точки. Обратите внимание на следующие ограничения и поведение:
- Автоматическая пагинация: если вы запрашиваете большой объем данных, API вернет только первую страницу результатов, не превышающую лимит размера страницы для данной конечной точки, вместе с токеном
nextPageToken. Для запроса последующих страниц необходимо использоватьnextPageToken. - Размер страниц может варьироваться: ограничения зависят от конечной точки и типа данных. Для большинства типов данных размер страниц ограничен максимум 10 000. Однако для некоторых типов данных, таких как
exerciseиsleep, размер страницы по умолчанию ограничен 25. Например, если клиент запрашивает все данные о сне за последние 10 лет, API все равно вернет только 25 сеансов сна на первой странице. - Ограничения по диапазону дат для сводных данных: Для конечных точек сводных и агрегированных данных (таких как
rollUpиdailyRollUp) диапазоны дат запросов ограничены в зависимости от типа данных:- Максимальный диапазон в 14 дней для
calories-in-heart-rate-zone,heart-rate,active-minutesиtotal-calories. - Для всех остальных типов сводных данных максимальный диапазон составляет 90 дней.
- Максимальный диапазон в 14 дней для
В зависимости от объема исторических данных, необходимых вашему приложению, для получения всего набора данных потребуется постраничная навигация. Учитывайте это при проектировании процесса синхронизации данных в вашем приложении.
Для обеспечения оптимальной производительности и во избежание ошибок API следуйте этим рекомендациям при запросе исторических данных:
Поэтапная синхронизация данных (горячая и холодная загрузка)
- Первоначальная «горячая» загрузка: во время основной последовательности загрузки загружаются и отображаются только данные за последние 7–14 дней. Это гарантирует, что пользователи увидят данные немедленно, без ожидания завершения длительных запросов.
- Фоновая «холодная» загрузка: после отрисовки основного пользовательского интерфейса перенаправьте получение более старых исторических данных в асинхронную очередь с более низким приоритетом или фоновый процесс.
Разбиение запросов на фрагменты для агрегирования
- Поскольку конечные точки для агрегирования и ежедневного агрегирования устанавливают ограничение на максимальный диапазон дат (14 или 90 дней в зависимости от типа данных), необходимо разбивать большие запросы на агрегирование исторических данных на более мелкие последовательные интервалы в пределах этих ограничений.
- Безопасно объединяйте или упорядочивайте эти подзапросы, чтобы соблюдать ограничения на параллельное выполнение и поддерживать стабильные индикаторы выполнения пользовательского интерфейса.
Используйте предварительно агрегированные сводные данные.
Реструктурируйте обзорные панели мониторинга и графики трендов, используя предварительно агрегированные сводные данные (например, DailyRollUpDataPoints ). Это значительно снизит вычислительную нагрузку на бэкэнд и время передачи данных по сети клиенту.
Устойчивая обработка ошибок (интеллектуальные повторные попытки)
- Внедрите строгую экспоненциальную обработку при столкновении с ограничениями скорости (
429 Too Many Requests) и таймаутами шлюза сервера (504 Gateway Timeout). Никогда не повторяйте сразу большие, неудачно завершившиеся запросы. Мгновенные повторные попытки увеличивают перегрузку бэкэнда и усугубляют деградацию системы.
Доступ третьих лиц
Устройства Fitbit не могут напрямую взаимодействовать со сторонними приложениями или сервисами. Эти устройства предназначены для связи и синхронизации исключительно с мобильным приложением Fitbit.
Устройство автоматически синхронизирует данные в течение дня, когда открыто приложение Fitbit, или каждые 15 минут, если Bluetooth активен и приложение работает в фоновом режиме. После завершения процесса синхронизации данные становятся доступны сторонним сервисам через API Google Health.
стандарты расстояния
Дистанция, измеряемая во время упражнений, например, elevationGainMillimeters в миллиметрах, стандартной единицей измерения является миллиметр по следующим причинам:
- Сохранение точности данных : Главная причина использования миллиметров — это обеспечение точности считываемых и предоставляемых данных. Использование такой точной единицы, как миллиметры, позволяет представлять измерения с высокой точностью.
- Стандартизация : Миллиметры — это стандартизированная единица измерения, используемая во всех наших сервисах. Такая согласованность помогает обеспечить единообразие взаимодействия разработчиков с различными частями API.
- Широкая поддержка систем измерения : использование базовой единицы, такой как миллиметры, упрощает разработчикам преобразование в любую другую выбранную единицу, независимо от того, работают ли они с метрической, имперской или другими системами измерения.
Переменная продолжительность светового дня
API Health обрабатывает время, отдавая приоритет времени пользователя, чтобы учесть переменную продолжительность дня, вызванную переходом на летнее время или поездками. Каждая точка данных хранится как с физической меткой времени UTC, так и с активным смещением UTC на момент события. Это позволяет системе:
- Сопоставьте событие с точным физическим моментом времени.
- Для агрегирования данных необходимо скорректировать время в соответствии с локальным контекстом пользователя.
Переход на летнее время
При переходе на летнее время происходит «перевод назад», в результате чего гражданские сутки становятся 25-часовыми, и сводная таблица за эту дату будет содержать 25 часов данных. При переводе назад, в результате, гражданские сутки становятся 23-часовыми, и время возвращается к стандартному времени.
Путешествовать
Перемещение через часовые пояса может привести к еще более значительным колебаниям физической продолжительности одного и того же гражданского дня.
Используйте конечную точку dailyRollUp для согласования разницы во времени. Она автоматически привязывает данные к календарному дню, в который они были записаны, в соответствии с местным временем пользователя, эффективно «сшивая» данные за день, несмотря на сдвиги во времени.