Tipos de datos de la API de Google Health

En la siguiente tabla, se incluye la lista completa de tipos de datos, con varias columnas para ayudarte a comprender la representación de cada tipo en la API de Google Health, así como el permiso en el que está disponible cada uno.

Campos de tipo de datos

La tabla de tipos de datos de la API de Google Health incluye varias columnas de campos para ayudarte a comprender la representación y los requisitos de cada tipo de datos. Estas columnas son las siguientes:

Tabla: Descripciones de los campos de los tipos de datos de la API de Google Health
Campo Descripción
dataType Es el identificador separado por guiones (por ejemplo, active-minutes) que se usa en las URLs de los extremos.
Parámetro filter Es el identificador separado por guiones bajos (por ejemplo, active_minutes) que se usa como valor para el parámetro de filtro dataType en las solicitudes de resumen diario y de resumen.
Tipo de registro

Indica la estructura y el formato de los datos registrados. De forma interna, esto se alinea con la representación de recursos de los puntos de datos. Los siguientes son los valores posibles:

  • Interval (Representa las mediciones registradas durante un período).
  • Sample (representa mediciones instantáneas).
  • Daily (Representa las mediciones agregadas o registradas diariamente).
  • Session (Representa un bloque continuo de grabación, como un entrenamiento o una sesión de electrocardiograma [ECG]).
  • Food (representa un alimento o una entidad de datos relacionada con la nutrición)
Operaciones disponibles Enumera los métodos de la API admitidos para el tipo de datos (como list, create y rollUp).
Alcance Son los permisos de OAuth necesarios para acceder al tipo de datos.
Compatibilidad con webhooks Indica que el tipo de datos admite notificaciones en tiempo real a través de webhooks cuando se sincronizan datos nuevos.
Compatibilidad con verdaderos ceros Indica que el tipo de datos admite el registro de valores cero explícitos para diferenciar entre un valor cero activo (como cero minutos activos) y datos faltantes o no registrados.
Resolución de almacenamiento Es el intervalo mínimo de registro o muestreo en el que se almacenan los puntos de datos (por ejemplo, 1 minuto para steps). Para los resúmenes, representa el windowSize mínimo recomendado para garantizar una agregación distribuida de manera uniforme sin artefactos de datos de subintervalos.
Dispositivos compatibles Es una lista desplegable de dispositivos físicos que pueden registrar y sincronizar este tipo de datos con la API de Google Health (a través de la app de Fitbit).

Tabla: Tipos de datos de la API de Google Health
Tipo de datos Operaciones
disponibles
Alcance
Gasto calórico
dataType: active-energy-burned
filter parameter: active_energy_burned
Tipo de registro: Intervalo
Resolución de almacenamiento: 1 minuto
list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Minutos activos
dataType: active-minutes
filter parameter: active_minutes
Tipo de registro: Intervalo
Resolución de almacenamiento: 1 minuto

Dispositivos compatibles

  • 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
Minutos en zona activa
dataType: active-zone-minutes
filter parameter: active_zone_minutes
Tipo de registro: Intervalo
Resolución de almacenamiento: 1 minuto

Dispositivos compatibles

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Nivel de actividad
dataType: activity-level
filter parameter: activity_level
Tipo de registro: Intervalo
list, reconcile .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Altitud
dataType: altitude
filter parameter: altitude
Tipo de registro: Intervalo
Resolución de almacenamiento: 1 minuto
list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Glucemia
dataType: blood-glucose
filter parameter: blood_glucose
Tipo de registro: Muestra
list, get, reconcile, rollup, dailyRollup .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Grasa corporal
dataType: body-fat
filter parameter: body_fat
Tipo de registro: Muestra

Dispositivos compatibles

list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Calorías en la zona de frecuencia cardíaca
dataType: calories-in-heart-rate-zone
filter parameter: calories_in_heart_rate_zone
Tipo de registro: Intervalo
Resolución de almacenamiento: 1 minuto
rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Temperatura corporal central
dataType: core-body-temperature
filter parameter: core_body_temperature
Tipo de registro: Muestra
list, get, reconcile, rollup, dailyRollup .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Variabilidad de la frecuencia cardíaca diaria
dataType: daily-heart-rate-variability
filter parameter: daily_heart_rate_variability
Tipo de registro: Diario

Dispositivos compatibles

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Zonas de frecuencia cardíaca diarias
dataType: daily-heart-rate-zones
filter parameter: daily_heart_rate_zones
Tipo de registro: Diario
list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Saturación de oxígeno diaria
dataType: daily-oxygen-saturation
filter parameter: daily_oxygen_saturation
Tipo de registro: Diario

Dispositivos compatibles

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Frecuencia respiratoria diaria
dataType: daily-respiratory-rate
filter parameter: daily_respiratory_rate
Tipo de registro: Diario

Dispositivos compatibles

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Frecuencia cardíaca en reposo diaria
dataType: daily-resting-heart-rate
filter parameter: daily_resting_heart_rate
Tipo de registro: Diario

Dispositivos compatibles

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Derivaciones diarias de la temperatura durante el sueño
dataType: daily-sleep-temperature-derivations
filter parameter: daily_sleep_temperature_derivations
Tipo de registro: Diario

Dispositivos compatibles

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
VO2 máx. diario
dataType: daily-vo2-max
filter parameter: daily_vo2_max
Tipo de registro: Diario

Dispositivos compatibles

list, reconcile .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Distancia
dataType: distance
filter parameter: distance
Tipo de registro: Intervalo
Resolución de almacenamiento: 1 minuto

Dispositivos compatibles

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Electrocardiograma (ECG)
dataType: electrocardiogram
filter parameter: electrocardiogram
Tipo de registro: Sesión

Dispositivos compatibles

list .ecg.readonly
Ejercicio
dataType: exercise
filter parameter: exercise
Tipo de registro: Sesión

Dispositivos compatibles

list, get, reconcile, create, update, batchDelete .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Pisos
dataType: floors
filter parameter: floors
Tipo de registro: Intervalo
Resolución de almacenamiento: 1 minuto
conciliar, acumular, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Comida
dataType: food
filter parameter: food
Tipo de registro: Comida
list, get .nutrition.readonly
.nutrition.writeonly
Unidad de medida de alimentos
dataType: food-measurement-unit
filter parameter: food_measurement_unit
Tipo de registro: Comida

Dispositivos compatibles

list, get .nutrition.readonly
.nutrition.writeonly
Frecuencia cardíaca
dataType: heart-rate
filter parameter: heart_rate
Tipo de registro: Muestra
Resolución de almacenamiento: 1 segundo (1 s)

Dispositivos compatibles

list, reconcile, rollup, dailyRollup .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Variabilidad de la frecuencia cardíaca
dataType: heart-rate-variability
filter parameter: heart_rate_variability
Tipo de registro: Muestra

Dispositivos compatibles

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Altura
dataType: height
filter parameter: height
Tipo de registro: Muestra
list, get, reconcile, create, update, batchDelete .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Registro de hidratación
dataType: hydration-log
filter parameter: hydration_log
Tipo de registro: Sesión
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .nutrition.readonly
.nutrition.writeonly
Notificación de arritmias
dataType: irregular-rhythm-notification
filter parameter: irregular_rhythm_notification
Tipo de registro: Sesión
list .irn.readonly
Período menstrual
dataType: menstrual-period
filter parameter: menstrual_period
Tipo de registro: Intervalo
create, update, batchDelete .reproductive_health.writeonly
Estados de ánimo
dataType: moods
filter parameter: moods
Tipo de registro: Muestra
create, update, batchDelete .mindfulness.writeonly
Registro de nutrición
dataType: nutrition-log
filter parameter: nutrition_log
Tipo de registro: Sesión

Dispositivos compatibles

list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .nutrition.readonly
.nutrition.writeonly
Prueba de ovulación
dataType: ovulation-test
filter parameter: ovulation_test
Tipo de registro: Muestra
create, update, batchDelete .reproductive_health.writeonly
Saturación de oxígeno
dataType: oxygen-saturation
filter parameter: oxygen_saturation
Tipo de registro: Muestra

Dispositivos compatibles

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Resumen de sueño de la frecuencia respiratoria
dataType: respiratory-rate-sleep-summary
filter parameter: respiratory_rate_sleep_summary
Tipo de registro: Muestra

Dispositivos compatibles

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
VO2 máx. en carreras
dataType: run-vo2-max
filter parameter: run_vo2_max
Tipo de registro: Muestra

Dispositivos compatibles

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Período sedentario
dataType: sedentary-period
filter parameter: sedentary_period
Tipo de registro: Intervalo

Dispositivos compatibles

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Sueño
dataType: sleep
filter parameter: sleep
Tipo de registro: Sesión

Dispositivos compatibles

list, get, reconcile, create, update, batchDelete .sleep.readonly
.sleep.writeonly
Pasos
dataType: steps
filter parameter: steps
Tipo de registro: Intervalo
Resolución de almacenamiento: 1 minuto

Dispositivos compatibles

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Datos de largos de natación
dataType: swim-lengths-data
filter parameter: swim_lengths_data
Tipo de registro: Intervalo

Dispositivos compatibles

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Síntomas
dataType: symptoms
filter parameter: symptoms
Tipo de registro: Muestra
create, update, batchDelete .logged_symptoms.writeonly
Tiempo en la zona de frecuencia cardíaca
dataType: time-in-heart-rate-zone
filter parameter: time_in_heart_rate_zone
Tipo de registro: Intervalo
Resolución de almacenamiento: 1 minuto
list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Calorías totales
dataType: total-calories
filter parameter: total_calories
Tipo de registro: Intervalo
Resolución de almacenamiento: 1 minuto

Dispositivos compatibles

rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
VO2 máx.
dataType: vo2-max
filter parameter: vo2_max
Tipo de registro: Muestra

Dispositivos compatibles

list, reconcile .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Weight
dataType: weight
filter parameter: weight
Tipo de registro: Muestra

Dispositivos compatibles

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

Restricciones de la consulta

Cuando consultes puntos de datos, resúmenes o resúmenes diarios desde la API, ten en cuenta las siguientes restricciones:

  • Requisitos de filtro: Algunos tipos de datos derivados de solo lectura, como total-calories, requieren un filtro que especifique una hora de inicio del intervalo (con hora física o civil).
  • Límites de intervalo de la consulta: Los extremos de agregación de resumen y resumen diario aplican límites máximos de intervalo de la consulta según el tipo de datos:
    • Un período máximo de la consulta de 14 días para calories-in-heart-rate-zone, heart-rate, active-minutes y total-calories.
    • Un rango de consulta máximo de 90 días para todos los demás tipos de datos
  • Tamaño de la ventana de acumulación: Cuando se llama al extremo rollUp, la duración de windowSize debe ser de al menos 1 segundo ("1s"). Las duraciones inferiores a un segundo se rechazan con INVALID_ARGUMENT. Además, elige un windowSize igual o mayor que la resolución de almacenamiento subyacente del tipo de datos (como "60s" para los tipos de datos de intervalos de 1 minuto, como steps y distance) para evitar una distribución desigual en los subintervalos. Para obtener más detalles, consulta Tamaño de la ventana de acumulación y resolución del almacenamiento subyacente.

Comparación entre los tipos de datos diarios y los de intervalo

Para ciertas métricas fisiológicas, como la variabilidad de la frecuencia cardíaca (VFC) o la saturación de oxígeno (SpO2), la API de Google Health proporciona dos tipos de datos distintos: una versión diaria y una versión de intervalo. Comprender la diferencia es clave para elegir la métrica adecuada para tu caso de uso:

  • Diario: Es un resumen único y previamente agregado para todo el día. Usa esta opción para las tendencias generales y los paneles diarios para ahorrar procesamiento.

  • Intervalo: Son mediciones detalladas de alta resolución que se toman durante todo el día. Úsalo para generar gráficos de las fluctuaciones intradía o realizar análisis detallados por hora.

Disponibilidad de los datos

Las actualizaciones de los datos del usuario solo están disponibles después de que sincroniza su monitor de actividad o ingresa manualmente datos nuevos en la app de Fitbit para dispositivos móviles o en la app web. El dispositivo Fitbit y la app de Fitbit para dispositivos móviles se pueden sincronizar automáticamente cada 15 minutos cuando la app de Fitbit está abierta en el dispositivo móvil y ambos tienen una conexión de datos activa y están dentro del alcance de Bluetooth. Si el usuario hace un seguimiento de la actividad con MobileTrack, MobileTrack se sincroniza cada hora siempre que la app esté abierta.

Cómo consultar datos históricos

Uno de los principales beneficios de la API de Google Health es la capacidad de hacer un seguimiento del rendimiento de un usuario y supervisar sus signos vitales durante períodos prolongados. Puedes consultar los datos de un usuario desde el momento en que se registraron; la API no impone limitaciones ni restricciones en la cantidad de datos históricos que puede consumir tu aplicación.

Sin embargo, las consultas de datos históricos siguen sujetas a los límites de frecuencia estándar. Para administrar la estabilidad del sistema y evitar cargas útiles excesivas, la API de Google Health usa la paginación automática con tamaños de página específicos del extremo. Ten en cuenta los siguientes límites y comportamientos:

  • Paginación automática: Si consultas un intervalo extenso de datos, la API solo devolverá la primera página de resultados hasta el límite de tamaño de página para ese extremo, junto con un nextPageToken. Debes usar nextPageToken para solicitar páginas posteriores.
  • Tamaños de página variables: Los límites de capacidad dependen del extremo y el tipo de datos. En la mayoría de los tipos de datos, el tamaño de la página tiene un límite máximo de 10,000. Sin embargo, para ciertos tipos de datos, como exercise y sleep, el tamaño de página predeterminado y máximo se limita a 25. Por ejemplo, si un cliente solicita todos los datos de sueño de los últimos 10 años, la API solo devolverá 25 sesiones de sueño en la primera página.
  • Restricciones del período de acumulación: Para los extremos de acumulación y agregación de datos (como rollUp y dailyRollUp), los períodos de la consulta están restringidos según el tipo de datos:
    • Un rango máximo de 14 días para calories-in-heart-rate-zone, heart-rate, active-minutes y total-calories.
    • Un rango máximo de 90 días para todos los demás tipos de datos acumulados

Según el volumen de datos históricos que necesite tu aplicación, recuperar todo el conjunto de datos requerirá paginar las páginas de forma secuencial. Ten esto en cuenta cuando diseñes el proceso de sincronización de datos de tu aplicación.

Para garantizar un rendimiento óptimo y evitar errores de la API, sigue estos lineamientos cuando consultes datos históricos:

Sincronización de datos por fases (carga activa versus carga en frío)

  • Carga "activa" inicial: Recupera y renderiza solo los datos de los últimos 7 a 14 días durante la secuencia de carga principal. Esto garantiza que los usuarios vean los datos de inmediato sin tener que esperar a que se ejecuten las consultas durante mucho tiempo.
  • Carga "fría" en segundo plano: Delega la recuperación de datos históricos más antiguos a una cola asíncrona de menor prioridad o a un proceso en segundo plano después de que se renderice la IU principal.

Fragmentación de consultas para la agregación

  • Dado que los endpoints de resumen y resumen diario aplican un límite máximo de período (14 o 90 días, según el tipo de datos), debes dividir las consultas de agregación históricas grandes en intervalos más pequeños y secuenciales dentro de estos límites.
  • Agrupa o secuencia estas subconsultas de forma segura para respetar los límites de simultaneidad y mantener indicadores de progreso de la IU estables.

Aprovecha los resúmenes agregados previamente

Reestructura los paneles de descripción general y los gráficos de tendencias para usar extremos de resumen previamente agregados (como DailyRollUpDataPoints). Esto reducirá drásticamente la sobrecarga de procesamiento en el backend y el tiempo de transferencia de red al cliente.

Manejo de errores resiliente (reintentos inteligentes)

  • Implementa un control estricto de la retirada exponencial cuando se alcancen los límites de frecuencia (429 Too Many Requests) y los tiempos de espera de la puerta de enlace del servidor (504 Gateway Timeout). Nunca reintentes de inmediato las cargas útiles grandes que fallaron. Los reintentos instantáneos multiplican la congestión del backend y agravan la degradación del sistema.

Acceso de terceros

Los dispositivos Fitbit no pueden comunicarse directamente con aplicaciones o servicios de terceros. Estos dispositivos están diseñados para comunicarse y sincronizarse exclusivamente con la app de Fitbit para dispositivos móviles.

El dispositivo sincroniza los datos automáticamente durante el día, cada vez que se abre la app de Fitbit o cada 15 minutos si el Bluetooth está activo y la app se ejecuta en segundo plano. Una vez que se completa este proceso de sincronización, los datos están disponibles para los servicios de terceros a través de la API de Google Health.

Estándares de distancia

Las distancias de ejercicio, como elevationGainMillimeters, se miden en milímetros como unidad estándar por los siguientes motivos:

  1. Mantener la precisión de los datos: El motivo más importante para usar milímetros es garantizar que no perdamos precisión en los datos que leemos y proporcionamos. Usar una unidad de medida precisa, como los milímetros, nos permite representar las medidas con alta exactitud.
  2. Estandarización: Los milímetros son la unidad estandarizada diseñada para todos nuestros servicios. Esta coherencia ayuda a garantizar una experiencia uniforme para los desarrolladores que interactúan con diferentes partes de la API.
  3. Amplio soporte del sistema de medición: Usar una unidad base, como los milímetros, facilita a los desarrolladores la conversión a cualquier otra unidad elegida, independientemente de si trabajan con sistemas métricos, imperiales o de otro tipo.

Duración variable de los días

El control del tiempo de la API de Health prioriza el tiempo del usuario para tener en cuenta las duraciones variables del día causadas por el horario de verano o los viajes. Cada punto de datos se almacena con una marca de tiempo UTC física y el desfase de UTC activo en el momento del evento. Esto permite que el sistema haga lo siguiente:

  • Asigna el evento a un instante físico preciso.
  • Corrige la hora según el contexto local del usuario para la agregación.

Horario de verano

Cuando se produce el horario de verano, un "retraso" genera un día civil de 25 horas, y el resumen de esa fecha contendrá 25 horas de datos. Un "adelanto" da como resultado un día civil de 23 horas en el que la hora vuelve a la hora estándar.

Viajes

Los viajes a través de zonas horarias pueden causar variaciones aún más significativas en la duración física de un solo día civil.

Usa el extremo dailyRollUp para conciliar las diferencias de zona horaria. Atribuye automáticamente los datos al día del calendario en el que se registraron según la hora local del usuario, lo que "une" el día de manera efectiva a pesar de los cambios de zona horaria.