Types de données de l'API Google Health

Le tableau suivant contient la liste complète des types de données, avec plusieurs colonnes pour vous aider à comprendre la représentation de chaque type dans l'API Google Health, ainsi que le champ d'application de chacun d'eux.

Champs de type de données

Le tableau des types de données de l'API Google Health comprend plusieurs colonnes de champs pour vous aider à comprendre la représentation et les exigences de chaque type de données. Ces colonnes sont les suivantes :

Tableau : Descriptions des champs de type de données de l'API Google Health
Champ Description
dataType Identifiant séparé par des traits d'union (par exemple, active-minutes) utilisé dans les URL de point de terminaison.
Paramètre filter Identifiant séparé par des traits de soulignement (par exemple, active_minutes) utilisé comme valeur pour le paramètre de filtre dataType dans les requêtes de cumul et de cumul quotidien.
Type d'enregistrement

Indique la structure et le format des données enregistrées. En arrière-plan, cela correspond à la représentation des ressources des points de données. Les valeurs possibles sont :

  • Interval (représente les mesures enregistrées sur une durée donnée)
  • Sample (représente des mesures instantanées)
  • Daily (représente les mesures agrégées ou enregistrées quotidiennement)
  • Session (représente un bloc d'enregistrement continu, comme une séance d'entraînement ou d'électrocardiogramme (ECG))
  • Food (représente un aliment ou une entité de données liée à la nutrition)
Opérations disponibles Répertorie les méthodes d'API compatibles avec le type de données (par exemple, list, create et rollUp).
Scope (Portée) Le ou les champs d'application OAuth requis pour accéder au type de données.
Compatibilité avec les webhooks Indique que le type de données accepte les notifications en temps réel à l'aide de webhooks lorsque de nouvelles données sont synchronisées.
Compatibilité avec les vrais zéros Indique que le type de données accepte l'enregistrement de valeurs nulles explicites pour différencier une valeur nulle active (par exemple, zéro minute active) de données manquantes ou non enregistrées.
Résolution de stockage Intervalle d'enregistrement ou d'échantillonnage minimal auquel les points de données sont stockés (par exemple, une minute pour steps). Pour les cumuls, cela représente la valeur windowSize minimale recommandée pour garantir une agrégation uniformément répartie sans artefacts de données de sous-intervalle.
Appareils compatibles Liste extensible d'appareils physiques pouvant enregistrer et synchroniser ce type de données avec l'API Google Health (à l'aide de l'app Fitbit).

Tableau : Types de données de l'API Google Health
Type de données Opérations
disponibles
Champ d'application
Énergie active dépensée
dataType : active-energy-burned
paramètre de filtre : active_energy_burned
Type d'enregistrement  : Intervalle
Résolution de stockage  : 1 minute
list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Minutes actives
dataType : active-minutes
paramètre de filtre : active_minutes
Type d'enregistrement  : Intervalle
Résolution de stockage  : 1 minute

Appareils 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
Minutes en zone active
dataType : active-zone-minutes
paramètre de filtre : active_zone_minutes
Type d'enregistrement  : Intervalle
Résolution de stockage  : 1 minute

Appareils compatibles

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Niveau d'activité
dataType : activity-level
paramètre de filtre : activity_level
Type d'enregistrement  : Intervalle
list, reconcile .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Altitude
dataType : altitude
paramètre de filtre : altitude
Type d'enregistrement  : Intervalle
Résolution de stockage  : 1 minute
list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Glycémie
dataType : blood-glucose
paramètre de filtre : blood_glucose
Type d'enregistrement  : Exemple
list, get, reconcile, rollup, dailyRollup .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Masse grasse
dataType : body-fat
paramètre de filtre : body_fat
Type d'enregistrement  : Exemple

Appareils compatibles

list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Calories dans la zone de fréquence cardiaque
dataType : calories-in-heart-rate-zone
paramètre de filtre : calories_in_heart_rate_zone
Type d'enregistrement  : Intervalle
Résolution de stockage  : 1 minute
rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Température corporelle centrale
dataType : core-body-temperature
paramètre de filtre : core_body_temperature
Type d'enregistrement  : Exemple
list, get, reconcile, rollup, dailyRollup .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Variabilité quotidienne de la fréquence cardiaque
dataType : daily-heart-rate-variability
paramètre de filtre : daily_heart_rate_variability
Type d'enregistrement  : quotidien

Appareils compatibles

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Zones de fréquence cardiaque quotidiennes
dataType : daily-heart-rate-zones
paramètre de filtre : daily_heart_rate_zones
Type d'enregistrement  : quotidien
list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Saturation en oxygène quotidienne
dataType : daily-oxygen-saturation
paramètre de filtre : daily_oxygen_saturation
Type d'enregistrement  : quotidien

Appareils compatibles

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Fréquence respiratoire quotidienne
dataType : daily-respiratory-rate
paramètre de filtre : daily_respiratory_rate
Type d'enregistrement  : quotidien

Appareils compatibles

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Fréquence cardiaque au repos quotidienne
dataType : daily-resting-heart-rate
paramètre de filtre : daily_resting_heart_rate
Type d'enregistrement  : quotidien

Appareils compatibles

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Écarts quotidiens de température pendant le sommeil
dataType : daily-sleep-temperature-derivations
paramètre de filtre : daily_sleep_temperature_derivations
Type d'enregistrement  : quotidien

Appareils compatibles

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
VO2 max quotidienne
dataType : daily-vo2-max
paramètre de filtre : daily_vo2_max
Type d'enregistrement  : quotidien

Appareils compatibles

list, reconcile .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Distance
dataType : distance
paramètre de filtre : distance
Type d'enregistrement  : Intervalle
Résolution de stockage  : 1 minute

Appareils compatibles

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Électrocardiogramme (ECG)
dataType : electrocardiogram
paramètre de filtre : electrocardiogram
Type d'enregistrement  : Session

Appareils compatibles

list .ecg.readonly
Exercice
dataType : exercise
paramètre de filtre : exercise
Type d'enregistrement  : Session

Appareils compatibles

list, get, reconcile, create, update, batchDelete .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Étages
dataType : floors
paramètre de filtre : floors
Type d'enregistrement  : Intervalle
Résolution de stockage  : 1 minute
reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Nourriture
dataType : food
paramètre de filtre : food
Type d'enregistrement  : Alimentation
list, get .nutrition.readonly
.nutrition.writeonly
Unité de mesure des aliments
dataType : food-measurement-unit
paramètre de filtre : food_measurement_unit
Type d'enregistrement  : Alimentation

Appareils compatibles

list, get .nutrition.readonly
.nutrition.writeonly
Fréquence cardiaque
dataType : heart-rate
paramètre de filtre : heart_rate
Type d'enregistrement  : Exemple
Résolution de stockage  : 1 seconde

Appareils compatibles

list, reconcile, rollup, dailyRollup .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Variabilité de la fréquence cardiaque
dataType : heart-rate-variability
paramètre de filtre : heart_rate_variability
Type d'enregistrement  : Exemple

Appareils compatibles

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Hauteur
dataType : height
paramètre de filtre : height
Type d'enregistrement  : Exemple
list, get, reconcile, create, update, batchDelete .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Journal d'hydratation
dataType : hydration-log
paramètre de filtre : hydration_log
Type d'enregistrement  : Session
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .nutrition.readonly
.nutrition.writeonly
Notification de rythme irrégulier
dataType : irregular-rhythm-notification
paramètre de filtre : irregular_rhythm_notification
Type d'enregistrement  : Session
list .irn.readonly
Menstrual Period
dataType : menstrual-period
paramètre de filtre : menstrual_period
Type d'enregistrement  : Intervalle
create, update, batchDelete .reproductive_health.writeonly
Moods
dataType : moods
paramètre de filtre : moods
Type d'enregistrement  : Exemple
create, update, batchDelete .mindfulness.writeonly
Journal de nutrition
dataType : nutrition-log
paramètre de filtre : nutrition_log
Type d'enregistrement  : Session

Appareils compatibles

list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .nutrition.readonly
.nutrition.writeonly
Test d'ovulation
dataType : ovulation-test
paramètre de filtre : ovulation_test
Type d'enregistrement  : Exemple
create, update, batchDelete .reproductive_health.writeonly
Saturation en oxygène
dataType : oxygen-saturation
paramètre de filtre : oxygen_saturation
Type d'enregistrement  : Exemple
Résolution de stockage  : 1 minute

Appareils compatibles

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Résumé de la fréquence respiratoire pendant le sommeil
dataType : respiratory-rate-sleep-summary
paramètre de filtre : respiratory_rate_sleep_summary
Type d'enregistrement  : Exemple

Appareils compatibles

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
VO2 max de la course
dataType : run-vo2-max
paramètre de filtre : run_vo2_max
Type d'enregistrement  : Exemple

Appareils compatibles

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Période sédentaire
dataType : sedentary-period
paramètre de filtre : sedentary_period
Type d'enregistrement  : Intervalle

Appareils compatibles

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Capteurs de température cutanée v4beta
dataType : skin-temperature-sensors
paramètre de filtre : skin_temperature_sensors
Type d'enregistrement  : Exemple

Appareils compatibles

list .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Sommeil
dataType : sleep
paramètre de filtre : sleep
Type d'enregistrement  : Session

Appareils compatibles

list, get, reconcile, create, update, batchDelete .sleep.readonly
.sleep.writeonly
Étapes
dataType : steps
paramètre de filtre : steps
Type d'enregistrement  : Intervalle
Résolution de stockage  : 1 minute

Appareils compatibles

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Données sur les longueurs de nage
dataType : swim-lengths-data
paramètre de filtre : swim_lengths_data
Type d'enregistrement  : Intervalle

Appareils compatibles

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Symptômes
dataType : symptoms
paramètre de filtre : symptoms
Type d'enregistrement  : Exemple
create, update, batchDelete .logged_symptoms.writeonly
Temps dans la zone de fréquence cardiaque
dataType : time-in-heart-rate-zone
paramètre de filtre : time_in_heart_rate_zone
Type d'enregistrement  : Intervalle
Résolution de stockage  : 1 minute
list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Total des calories
dataType : total-calories
paramètre de filtre : total_calories
Type d'enregistrement  : Intervalle
Résolution de stockage  : 1 minute

Appareils compatibles

rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
VO2 max
dataType : vo2-max
paramètre de filtre : vo2_max
Type d'enregistrement  : Exemple

Appareils compatibles

list, reconcile .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Poids
dataType : weight
paramètre de filtre : weight
Type d'enregistrement  : Exemple

Appareils compatibles

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

Contraintes de requête

Lorsque vous interrogez des points de données, des rollups ou des rollups quotidiens à partir de l'API, tenez compte des contraintes suivantes :

  • Exigences de filtrage : certains types de données dérivés en lecture seule, tels que total-calories, nécessitent un filtre spécifiant une heure de début d'intervalle (en utilisant l'heure physique ou civile).
  • Limites de plage de requêtes : les points de terminaison d'agrégation de cumul et de cumul quotidien appliquent des limites de plage de requêtes maximales en fonction du type de données :
    • Une plage de requêtes maximale de 14 jours pour calories-in-heart-rate-zone, heart-rate, active-minutes et total-calories.
    • Une plage de requêtes maximale de 90 jours pour tous les autres types de données.
  • Taille de la fenêtre de cumul : lors de l'appel du point de terminaison rollUp, la durée windowSize doit être d'au moins une seconde ("1s"). Les durées inférieures à une seconde sont rejetées avec INVALID_ARGUMENT. En outre, choisissez un windowSize supérieur ou égal à la résolution de stockage sous-jacente du type de données (par exemple, "60s" pour les types de données à intervalle d'une minute comme steps et distance) pour éviter une distribution inégale entre les sous-intervalles. Pour en savoir plus, consultez Fenêtre de cumul et résolution de stockage.

Types de données "Daily" et "Interval"

Pour certaines métriques physiologiques, telles que la variabilité de la fréquence cardiaque (VFC) ou la saturation en oxygène (SpO2), l'API Google Health fournit deux types de données distincts : une version quotidienne et une version par intervalle. Il est essentiel de comprendre la différence entre ces deux types de métriques pour choisir celle qui convient à votre cas d'utilisation :

  • Quotidien : un seul résumé pré-agrégé pour toute la journée. Utilisez cette option pour les tendances générales et les tableaux de bord quotidiens afin de réduire les coûts de traitement.

  • Intervalle : mesures précises et haute résolution prises tout au long de la journée. Utilisez cette option pour représenter graphiquement les fluctuations intrajournalières ou effectuer une analyse approfondie, heure par heure.

Disponibilité des données

Les données de l'utilisateur ne sont mises à jour qu'après la synchronisation de son moniteur d'activité physique ou la saisie manuelle de nouvelles données dans l'application Google Health. L'appareil Fitbit et l'application Google Health peuvent se synchroniser automatiquement toutes les 15 minutes lorsque l'application Google Health est ouverte sur l'appareil mobile, que les deux appareils disposent d'une connexion de données active et qu'ils se trouvent à portée du Bluetooth. Si l'utilisateur suit son activité à l'aide de MobileTrack, MobileTrack se synchronise toutes les heures tant que l'application est ouverte.

Interroger les données historiques

L'un des principaux avantages de l'API Google Health est la possibilité de suivre les performances d'un utilisateur et de surveiller ses constantes de santé sur de longues périodes. Vous pouvez interroger les données d'un utilisateur aussi loin qu'elles ont été enregistrées. L'API n'impose aucune limite ni restriction sur la quantité de données historiques que votre application peut consommer.

Toutefois, l'interrogation des données historiques reste régie par les limites de débit standards. Pour gérer la stabilité du système et éviter les charges utiles excessives, l'API Google Health utilise la pagination automatique avec des tailles de page spécifiques aux points de terminaison. Notez les limites et le comportement suivants :

  • Pagination automatique : si vous interrogez une longue période de données, l'API ne renvoie que la première page de résultats, jusqu'à la limite de taille de page pour ce point de terminaison, ainsi qu'un nextPageToken. Vous devez utiliser nextPageToken pour demander les pages suivantes.
  • Tailles de page variables : les limites de plafonnement dépendent du point de terminaison et du type de données. Pour la plupart des types de données, la taille de page est limitée à 10 000 éléments au maximum. Toutefois, pour certains types de données tels que exercise et sleep, la taille de page par défaut et maximale est limitée à 25. Par exemple, si un client demande toutes les données sur le sommeil des 10 dernières années, l'API ne renverra que 25 périodes de sommeil sur la première page.
  • Restrictions concernant la période de cumul : pour les points de terminaison de cumul et d'agrégation de données (tels que rollUp et dailyRollUp), les périodes de requête sont limitées en fonction du type de données :
    • Une plage maximale de 14 jours pour calories-in-heart-rate-zone, heart-rate, active-minutes et total-calories.
    • Une période maximale de 90 jours pour tous les autres types de données cumulées.

Selon le volume de données historiques dont votre application a besoin, la récupération de l'ensemble de données complet nécessite de paginer les pages de manière séquentielle. Gardez cela à l'esprit lorsque vous concevez le processus de synchronisation des données de votre application.

Pour garantir des performances optimales et éviter les erreurs d'API, suivez ces consignes lorsque vous interrogez des données historiques :

Synchronisation des données par phases (chargement à chaud ou à froid)

  • Chargement "à chaud" initial : récupérez et affichez uniquement les données des 7 à 14 derniers jours lors de la séquence de chargement principale. Cela permet aux utilisateurs de voir les données immédiatement sans attendre les requêtes de longue durée.
  • Chargement "à froid" en arrière-plan : déléguez la récupération des données historiques plus anciennes à une file d'attente asynchrone de priorité inférieure ou à un processus en arrière-plan après l'affichage de l'interface utilisateur principale.

Fragmentation des requêtes pour l'agrégation

  • Étant donné que les points de terminaison de cumul et de cumul quotidien appliquent une limite maximale de plage de dates (14 ou 90 jours selon le type de données), vous devez diviser les requêtes d'agrégation historiques volumineuses en intervalles séquentiels plus petits respectant ces limites.
  • Regroupez ou séquencez ces sous-requêtes de manière sécurisée pour respecter les limites de simultanéité et maintenir des indicateurs de progression stables dans l'interface utilisateur.

Utiliser des roll-ups pré-agrégés

Restructurez les tableaux de bord de présentation et les graphiques de tendance pour utiliser des points de terminaison récapitulatifs pré-agrégés (tels que DailyRollUpDataPoints). Cela réduira considérablement la surcharge de calcul sur le backend et le temps de transfert réseau vers le client.

Gestion résiliente des erreurs (nouvelles tentatives intelligentes)

  • Implémentez une gestion stricte de l'intervalle exponentiel entre les tentatives lorsque vous rencontrez des limites de débit (429 Too Many Requests) et des délais d'expiration de la passerelle du serveur (504 Gateway Timeout). Ne réessayez jamais immédiatement d'envoyer des charges utiles volumineuses ayant échoué. Les nouvelles tentatives instantanées multiplient l'encombrement du backend et aggravent la dégradation du système.

Accès tiers

Les appareils Fitbit ne peuvent pas communiquer directement avec des applications ou services tiers. Ces appareils sont conçus pour communiquer et se synchroniser exclusivement avec l'application Google Health.

L'appareil synchronise automatiquement les données tout au long de la journée, chaque fois que l'application Google Health est ouverte, ou toutes les 15 minutes si le Bluetooth est activé et que l'application s'exécute en arrière-plan. Une fois ce processus de synchronisation terminé, les données sont disponibles pour les services tiers via l'API Google Health.

Filtrage de la qualité et de la validité des données

Pour fournir des indicateurs de santé fiables sans nécessiter de filtrage du bruit personnalisé côté client, l'API Google Health valide la télémétrie des capteurs et exclut les mesures non valides avant de renvoyer les réponses :

  • Pour la saturation en oxygène du sang (oxygen-saturation) à la minute, l'API ne renvoie que les mesures validées et supprime les minutes marquées comme non valides en raison d'un mouvement du bras, d'un ajustement lâche au poignet ou d'un score de confiance du capteur inférieur à 50%, ainsi que les trois minutes avant et après une mesure non valide et les périodes valides isolées de moins de quatre minutes. Par conséquent, la couverture à la minute peut être éparse et des lacunes sont attendues. Pour en savoir plus, consultez Filtrage de la SpO2 à la minute et validité des données.

Normes de distance

Les distances d'exercice, telles que elevationGainMillimeters, sont mesurées en millimètres comme unité standard pour les raisons suivantes :

  1. Maintenir la précision des données : la raison la plus importante d'utiliser les millimètres est de s'assurer que nous ne perdons aucune précision dans les données que nous lisons et fournissons. L'utilisation d'une unité précise comme le millimètre nous permet de représenter les mesures avec une grande précision.
  2. Standardisation : les millimètres sont l'unité standardisée conçue pour nos services. Cette cohérence permet de garantir une expérience uniforme pour les développeurs qui interagissent avec différentes parties de l'API.
  3. Compatibilité avec un système de mesure étendu : l'utilisation d'une unité de base comme le millimètre permet aux développeurs de convertir facilement les valeurs dans l'unité de leur choix, qu'ils travaillent avec le système métrique, impérial ou d'autres systèmes de mesure.

Durée variable des journées

La gestion du temps par l'API Health donne la priorité à l'heure de l'utilisateur pour tenir compte des variations de la durée des journées dues à l'heure d'été ou aux voyages. Chaque point de données est stocké avec un code temporel UTC physique et le décalage UTC actif au moment de l'événement. Cela permet au système d'effectuer les opérations suivantes :

  • Faites correspondre l'événement à un instant physique précis.
  • Corrigez l'heure en fonction du contexte local de l'utilisateur pour l'agrégation.

Heure d'été

Lors du passage à l'heure d'hiver, la journée civile dure 25 heures, et le cumul pour cette date contient 25 heures de données. Le passage à l'heure d'été entraîne une journée civile de 23 heures, au cours de laquelle l'heure revient à l'heure standard.

Voyages

Les voyages à travers les fuseaux horaires peuvent entraîner des variations encore plus importantes de la durée physique d'un même jour civil.

Utilisez le point de terminaison dailyRollUp pour rapprocher les différences de fuseau horaire. Il attribue automatiquement les données au jour calendaire où elles ont été enregistrées en fonction de l'heure locale de l'utilisateur, ce qui permet de "reconstituer" la journée malgré les changements de fuseau horaire. Pour en savoir plus et voir des exemples, consultez Agrégation sur plusieurs jours calendaires dans le guide "Agréger des données".