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:
| 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:
|
| 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). |
| Tipo de datos | Operaciones disponibles |
Alcance |
|---|---|---|
|
Gasto calórico
dataType:
active-energy-burnedfilter 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-minutesfilter parameter: active_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 |
|
Minutos en zona activa
dataType:
active-zone-minutesfilter 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-levelfilter parameter: activity_level
Tipo de registro: Intervalo
|
list, reconcile | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Altitud
dataType:
altitudefilter 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-glucosefilter 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-fatfilter 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-zonefilter 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-temperaturefilter 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-variabilityfilter 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-zonesfilter 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-saturationfilter 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-ratefilter 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-ratefilter 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-derivationsfilter 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-maxfilter parameter: daily_vo2_max
Tipo de registro: Diario
Dispositivos compatibles
|
list, reconcile | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Distancia
dataType:
distancefilter 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:
electrocardiogramfilter parameter: electrocardiogram
Tipo de registro: Sesión
Dispositivos compatibles
|
list | .ecg.readonly |
|
Ejercicio
dataType:
exercisefilter 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:
floorsfilter parameter: floors
Tipo de registro: Intervalo
Resolución de almacenamiento: 1 minuto
|
conciliar, acumular, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Comida
|
list, get | .nutrition.readonly.nutrition.writeonly |
|
Unidad de medida de alimentos
dataType:
food-measurement-unitfilter parameter: food_measurement_unit
Tipo de registro: Comida
Dispositivos compatibles
|
list, get | .nutrition.readonly.nutrition.writeonly |
|
Frecuencia cardíaca
dataType:
heart-ratefilter 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-variabilityfilter parameter: heart_rate_variability
Tipo de registro: Muestra
Dispositivos compatibles
|
list, reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Altura
|
list, get, reconcile, create, update, batchDelete | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Registro de hidratación
dataType:
hydration-logfilter 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-notificationfilter parameter: irregular_rhythm_notification
Tipo de registro: Sesión
|
list | .irn.readonly |
|
Período menstrual
dataType:
menstrual-periodfilter parameter: menstrual_period
Tipo de registro: Intervalo
|
create, update, batchDelete | .reproductive_health.writeonly |
|
Estados de ánimo
|
create, update, batchDelete | .mindfulness.writeonly |
|
Registro de nutrición
dataType:
nutrition-logfilter 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-testfilter parameter: ovulation_test
Tipo de registro: Muestra
|
create, update, batchDelete | .reproductive_health.writeonly |
|
Saturación de oxígeno
dataType:
oxygen-saturationfilter 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-summaryfilter 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-maxfilter 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-periodfilter parameter: sedentary_period
Tipo de registro: Intervalo
Dispositivos compatibles
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Sueño
dataType:
sleepfilter parameter: sleep
Tipo de registro: Sesión
Dispositivos compatibles
|
list, get, reconcile, create, update, batchDelete | .sleep.readonly.sleep.writeonly |
|
Pasos
dataType:
stepsfilter 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-datafilter parameter: swim_lengths_data
Tipo de registro: Intervalo
Dispositivos compatibles
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Síntomas
|
create, update, batchDelete | .logged_symptoms.writeonly |
|
Tiempo en la zona de frecuencia cardíaca
dataType:
time-in-heart-rate-zonefilter 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-caloriesfilter 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-maxfilter parameter: vo2_max
Tipo de registro: Muestra
Dispositivos compatibles
|
list, reconcile | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Weight
dataType:
weightfilter 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-minutesytotal-calories. - Un rango de consulta máximo de 90 días para todos los demás tipos de datos
- Un período máximo de la consulta de 14 días para
- Tamaño de la ventana de acumulación: Cuando se llama al extremo
rollUp, la duración dewindowSizedebe ser de al menos 1 segundo ("1s"). Las duraciones inferiores a un segundo se rechazan conINVALID_ARGUMENT. Además, elige unwindowSizeigual 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, comostepsydistance) 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 usarnextPageTokenpara 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
exerciseysleep, 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
rollUpydailyRollUp), 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-minutesytotal-calories. - Un rango máximo de 90 días para todos los demás tipos de datos acumulados
- Un rango máximo de 14 días para
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:
- 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.
- 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.
- 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.