Tipi di dati dell'API Google Health

La tabella seguente contiene l'elenco completo dei tipi di dati, con diverse colonne per aiutarti a comprendere la rappresentazione di ogni tipo nell'API Google Health, nonché l'ambito in cui è disponibile.

Campi del tipo di dati

La tabella dei tipi di dati dell'API Google Health include diverse colonne di campi per aiutarti a comprendere la rappresentazione e i requisiti di ogni tipo di dati. Le colonne sono le seguenti:

Tabella: descrizioni dei campi dei tipi di dati dell'API Google Health
Campo Descrizione
dataType L'identificatore separato da trattini (ad esempio, active-minutes) utilizzato negli URL degli endpoint.
Parametro filter L'identificatore separato da trattini bassi (ad esempio, active_minutes) utilizzato come valore per il parametro di filtro dataType nelle richieste di aggregazione giornaliera e di aggregazione.
Tipo di record

Indica la struttura e il formato dei dati registrati. In background, questo corrisponde alla rappresentazione delle risorse dei punti dati. I valori possibili sono:

  • Interval (Rappresenta le misurazioni registrate in un periodo di tempo.)
  • Sample (Rappresenta le misurazioni istantanee.)
  • Daily (Rappresenta le misurazioni aggregate o registrate su base giornaliera.)
  • Session (Rappresenta un blocco continuo di registrazione, ad esempio un allenamento o una sessione di elettrocardiogramma (ECG).)
  • Food (Rappresenta un alimento o un'entità di dati relativa alla nutrizione.)
Operazioni disponibili Elenca i metodi API supportati per il tipo di dati (ad esempio list, create e rollUp).
Ambito Gli ambiti OAuth richiesti per accedere al tipo di dati.
Supporto dei webhook Indica che il tipo di dati supporta le notifiche in tempo reale utilizzando i webhook quando vengono sincronizzati nuovi dati.
Supporto di zeri reali Indica che il tipo di dati supporta la registrazione di valori zero espliciti per distinguere tra un valore zero attivo (ad esempio zero minuti attivi) e dati mancanti o non registrati.
Risoluzione dello spazio di archiviazione L'intervallo minimo di registrazione o campionamento in cui vengono memorizzati i punti dati (ad esempio, 1 minuto per steps). Per i rollup, rappresenta il valore windowSize minimo consigliato per garantire un'aggregazione distribuita in modo uniforme senza artefatti dei dati dei sottointervalli.
Dispositivi compatibili Un elenco espandibile di dispositivi fisici che possono registrare e sincronizzare questo tipo di dati con l'API Google Health (utilizzando l'app Fitbit).

Tabella: tipi di dati dell'API Google Health
Tipo di dati Operazioni
disponibili
Ambito
Energia attiva bruciata
dataType: active-energy-burned
filter parameter: active_energy_burned
Tipo di record: Interval
Risoluzione di archiviazione: 1 minuto
list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Minuti attivi
dataType: active-minutes
filter parameter: active_minutes
Tipo di record: Interval
Risoluzione di archiviazione: 1 minuto

Dispositivi compatibili

  • 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
Minuti in zona attiva
dataType: active-zone-minutes
filter parameter: active_zone_minutes
Tipo di record: Interval
Risoluzione di archiviazione: 1 minuto

Dispositivi compatibili

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Livello di attività
dataType: activity-level
filter parameter: activity_level
Tipo di record: Interval
elenca, riconcilia .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Altitudine
dataType: altitude
filter parameter: altitude
Tipo di record: Interval
Risoluzione di archiviazione: 1 minuto
list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Glicemia
dataType: blood-glucose
filter parameter: blood_glucose
Tipo di record: Esempio
list, get, reconcile, rollup, dailyRollup .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Grasso corporeo
dataType: body-fat
filter parameter: body_fat
Tipo di record: Esempio

Dispositivi compatibili

list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Calorie nella zona del battito cardiaco
dataType: calories-in-heart-rate-zone
filter parameter: calories_in_heart_rate_zone
Tipo di record: Interval
Risoluzione di archiviazione: 1 minuto
rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Temperatura corporea interna
dataType: core-body-temperature
filter parameter: core_body_temperature
Tipo di record: Esempio
list, get, reconcile, rollup, dailyRollup .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Variabilità del battito cardiaco giornaliera
dataType: daily-heart-rate-variability
filter parameter: daily_heart_rate_variability
Tipo di record: giornaliero

Dispositivi compatibili

elenca, riconcilia .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Zone del battito cardiaco giornaliere
dataType: daily-heart-rate-zones
filter parameter: daily_heart_rate_zones
Tipo di record: giornaliero
elenca, riconcilia .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Saturazione di ossigeno giornaliera
dataType: daily-oxygen-saturation
filter parameter: daily_oxygen_saturation
Tipo di record: giornaliero

Dispositivi compatibili

elenca, riconcilia .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Frequenza respiratoria giornaliera
dataType: daily-respiratory-rate
filter parameter: daily_respiratory_rate
Tipo di record: giornaliero

Dispositivi compatibili

elenca, riconcilia .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Battito cardiaco a riposo giornaliero
dataType: daily-resting-heart-rate
filter parameter: daily_resting_heart_rate
Tipo di record: giornaliero

Dispositivi compatibili

elenca, riconcilia .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Derivazioni giornaliere della temperatura durante il sonno
dataType: daily-sleep-temperature-derivations
filter parameter: daily_sleep_temperature_derivations
Tipo di record: giornaliero

Dispositivi compatibili

elenca, riconcilia .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
VO2 max giornaliero
dataType: daily-vo2-max
filter parameter: daily_vo2_max
Tipo di record: giornaliero

Dispositivi compatibili

elenca, riconcilia .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Distanza
dataType: distance
filter parameter: distance
Tipo di record: Interval
Risoluzione di archiviazione: 1 minuto

Dispositivi compatibili

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Elettrocardiogramma (ECG)
dataType: electrocardiogram
filter parameter: electrocardiogram
Tipo di record: Sessione

Dispositivi compatibili

list .ecg.readonly
Allenamento
dataType: exercise
filter parameter: exercise
Tipo di record: Sessione

Dispositivi compatibili

list, get, reconcile, create, update, batchDelete .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Piani
dataType: floors
filter parameter: floors
Tipo di record: Interval
Risoluzione di archiviazione: 1 minuto
reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Cibo
dataType: food
filter parameter: food
Tipo di record: Alimenti
list, get .nutrition.readonly
.nutrition.writeonly
Unità di misura degli alimenti
dataType: food-measurement-unit
filter parameter: food_measurement_unit
Tipo di record: Alimenti

Dispositivi compatibili

list, get .nutrition.readonly
.nutrition.writeonly
Battito cardiaco
dataType: heart-rate
filter parameter: heart_rate
Tipo di record: Esempio
Risoluzione dello spazio di archiviazione: 1 secondo

Dispositivi compatibili

list, reconcile, rollup, dailyRollup .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Variabilità del battito cardiaco
dataType: heart-rate-variability
filter parameter: heart_rate_variability
Tipo di record: Esempio

Dispositivi compatibili

elenca, riconcilia .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Altezza
dataType: height
filter parameter: height
Tipo di record: Esempio
list, get, reconcile, create, update, batchDelete .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Diario dell'idratazione
dataType: hydration-log
filter parameter: hydration_log
Tipo di record: Sessione
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .nutrition.readonly
.nutrition.writeonly
Notifica di ritmo irregolare
dataType: irregular-rhythm-notification
filter parameter: irregular_rhythm_notification
Tipo di record: Sessione
list .irn.readonly
Mestruazioni
dataType: menstrual-period
filter parameter: menstrual_period
Tipo di record: Interval
create, update, batchDelete .reproductive_health.writeonly
Mood
dataType: moods
filter parameter: moods
Tipo di record: Esempio
create, update, batchDelete .mindfulness.writeonly
Diario alimentare
dataType: nutrition-log
filter parameter: nutrition_log
Tipo di record: Sessione

Dispositivi compatibili

list, get, reconcile, rollup, dailyRollup, create, update, batchDelete .nutrition.readonly
.nutrition.writeonly
Test di ovulazione
dataType: ovulation-test
filter parameter: ovulation_test
Tipo di record: Esempio
create, update, batchDelete .reproductive_health.writeonly
Saturazione di ossigeno
dataType: oxygen-saturation
filter parameter: oxygen_saturation
Tipo di record: Esempio
Risoluzione di archiviazione: 1 minuto

Dispositivi compatibili

elenca, riconcilia .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Riepilogo del sonno relativo alla frequenza respiratoria
dataType: respiratory-rate-sleep-summary
filter parameter: respiratory_rate_sleep_summary
Tipo di record: Sample

Dispositivi compatibili

elenca, riconcilia .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
VO2 max corsa
dataType: run-vo2-max
filter parameter: run_vo2_max
Tipo di record: Esempio

Dispositivi compatibili

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Periodo di sedentarietà
dataType: sedentary-period
filter parameter: sedentary_period
Tipo di record: Interval

Dispositivi compatibili

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Sensori di temperatura cutanea v4beta
dataType: skin-temperature-sensors
filter parameter: skin_temperature_sensors
Tipo di record: Esempio

Dispositivi compatibili

list .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Sonno
dataType: sleep
filter parameter: sleep
Tipo di record: Sessione

Dispositivi compatibili

list, get, reconcile, create, update, batchDelete .sleep.readonly
.sleep.writeonly
Passaggi
dataType: steps
filter parameter: steps
Tipo di record: Interval
Risoluzione di archiviazione: 1 minuto

Dispositivi compatibili

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Dati sulle vasche di nuoto
dataType: swim-lengths-data
filter parameter: swim_lengths_data
Tipo di record: Interval

Dispositivi compatibili

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Sintomi
dataType: symptoms
filter parameter: symptoms
Tipo di record: Esempio
create, update, batchDelete .logged_symptoms.writeonly
Tempo nella zona del battito cardiaco
dataType: time-in-heart-rate-zone
filter parameter: time_in_heart_rate_zone
Tipo di record: Interval
Risoluzione di archiviazione: 1 minuto
list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Calorie totali
dataType: total-calories
filter parameter: total_calories
Tipo di record: Interval
Risoluzione di archiviazione: 1 minuto

Dispositivi compatibili

rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
VO2 max
dataType: vo2-max
filter parameter: vo2_max
Tipo di record: Esempio

Dispositivi compatibili

elenca, riconcilia .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Peso
dataType: weight
filter parameter: weight
Tipo di record: Esempio

Dispositivi compatibili

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

Vincoli delle query

Quando esegui query su punti dati, aggregazioni o aggregazioni giornaliere dall'API, tieni presente i seguenti vincoli:

  • Requisiti dei filtri:alcuni tipi di dati derivati di sola lettura, come total-calories, richiedono un filtro che specifichi un'ora di inizio dell'intervallo (utilizzando l'ora fisica o civile).
  • Limiti dell'intervallo di query: gli endpoint di aggregazione di rollup e rollup giornaliero applicano limiti massimi dell'intervallo di query in base al tipo di dati:
    • Un intervallo di query massimo di 14 giorni per calories-in-heart-rate-zone, heart-rate, active-minutes e total-calories.
    • Un intervallo di query massimo di 90 giorni per tutti gli altri tipi di dati.
  • Dimensioni della finestra di aggregazione: quando chiami l'endpoint rollUp, la durata di windowSize deve essere di almeno 1 secondo ("1s"). Le durate inferiori al secondo vengono rifiutate con INVALID_ARGUMENT. Inoltre, scegli un valore windowSize uguale o superiore alla risoluzione di archiviazione sottostante del tipo di dati (ad esempio "60s" per i tipi di dati con intervallo di 1 minuto come steps e distance) per evitare una distribuzione non uniforme tra i sottointervalli. Per maggiori dettagli, consulta Finestra di aggregazione e risoluzione dello spazio di archiviazione.

Tipi di dati giornalieri e per intervallo

Per alcune metriche fisiologiche, come la variabilità del battito cardiaco (HRV) o la saturazione di ossigeno (SpO2), l'API Google Health fornisce due tipi di dati distinti: una versione Giornaliera e una versione Intervallo. Comprendere la differenza è fondamentale per scegliere la metrica giusta per il tuo caso d'uso:

  • Giornaliero: un unico riepilogo pre-aggregato per l'intera giornata. Utilizza questa opzione per le tendenze di alto livello e le dashboard giornaliere per risparmiare sull'elaborazione.

  • Intervallo: misurazioni granulari ad alta risoluzione effettuate durante il giorno. Utilizzalo per tracciare le fluttuazioni intraday o per eseguire analisi approfondite ora per ora.

Disponibilità dei dati

Gli aggiornamenti ai dati dell'utente sono disponibili solo dopo che l'utente ha sincronizzato il proprio activity tracker o ha inserito manualmente nuovi dati nell'app Google Health. Il dispositivo Fitbit e l'app Google Health possono sincronizzarsi automaticamente ogni 15 minuti quando l'app Google Health è aperta sul dispositivo mobile, i due dispositivi hanno una connessione dati attiva e si trovano nel raggio d'azione del Bluetooth. Se l'utente rileva l'attività utilizzando MobileTrack, MobileTrack si sincronizza ogni ora, purché l'app sia aperta.

Esecuzione di query sui dati storici

Uno dei vantaggi principali dell'API Google Health è la possibilità di monitorare le prestazioni di un utente e i suoi parametri vitali per lunghi periodi di tempo. Puoi eseguire query sui dati di un utente fino alla data in cui sono stati registrati. L'API non impone limitazioni o restrizioni alla quantità di dati storici che la tua applicazione può utilizzare.

Tuttavia, l'esecuzione di query sui dati storici è comunque regolata dai limiti di frequenza standard. Per gestire la stabilità del sistema e prevenire payload eccessivi, l'API Google Health utilizza l'impaginazione automatica con dimensioni di pagina specifiche per l'endpoint. Tieni presente i seguenti limiti e comportamenti:

  • Impaginazione automatica:se esegui una query su un lungo intervallo di dati, l'API restituirà solo la prima pagina di risultati fino al limite di dimensioni della pagina per quell'endpoint, insieme a un nextPageToken. Devi utilizzare il valore nextPageToken per richiedere le pagine successive.
  • Dimensioni di pagina variabili: i limiti di limitazione dipendono dall'endpoint e dal tipo di dati. Per la maggior parte dei tipi di dati, le dimensioni delle pagine sono limitate a un massimo di 10.000. Tuttavia, per determinati tipi di dati come exercise e sleep, la dimensione predefinita e massima della pagina è limitata a 25. Ad esempio, se un client richiede tutti i dati relativi al sonno degli ultimi 10 anni, l'API restituirà comunque solo 25 sessioni di sonno nella prima pagina.
  • Limitazioni relative agli intervalli di date di aggregazione: per gli endpoint di aggregazione e raggruppamento dei dati (come rollUp e dailyRollUp), gli intervalli di date delle query sono limitati in base al tipo di dati:
    • Un intervallo massimo di 14 giorni per calories-in-heart-rate-zone, heart-rate, active-minutes e total-calories.
    • Un intervallo massimo di 90 giorni per tutti gli altri tipi di dati aggregati.

A seconda del volume di dati storici richiesti dalla tua applicazione, il recupero dell'intero set di dati richiederà l'impaginazione sequenziale delle pagine. Tienilo presente quando progetti il processo di sincronizzazione dei dati della tua applicazione.

Per garantire un rendimento ottimale ed evitare errori dell'API, segui queste linee guida quando esegui query sui dati storici:

Sincronizzazione dei dati in fasi (caricamento hot e caricamento completo)

  • Caricamento "hot" iniziale: recupera ed esegui il rendering solo dei dati degli ultimi 7-14 giorni durante la sequenza di caricamento principale. In questo modo, gli utenti visualizzano immediatamente i dati senza dover attendere query di lunga durata.
  • Caricamento "cold" in background:delega il recupero dei dati storici meno recenti a una coda asincrona con priorità inferiore o a un processo in background dopo il rendering della UI principale.

Suddivisione in blocchi delle query per l'aggregazione

  • Poiché gli endpoint di aggregazione e aggregazione giornaliera applicano un limite massimo per l'intervallo di date (14 o 90 giorni a seconda del tipo di dati), devi suddividere le query di aggregazione storiche di grandi dimensioni in intervalli sequenziali più piccoli entro questi limiti.
  • Raggruppa o sequenzia queste sottoquery in modo sicuro per rispettare i limiti di contemporaneità e mantenere indicatori di avanzamento della UI costanti.

Sfrutta i rollup pre-aggregati

Ristruttura le dashboard di panoramica e i grafici delle tendenze per utilizzare endpoint di riepilogo pre-aggregati (come DailyRollUpDataPoints). In questo modo, ridurrai drasticamente l'overhead di calcolo sul backend e il tempo di trasferimento di rete al client.

Gestione degli errori resiliente (nuovi tentativi intelligenti)

  • Implementa una gestione rigorosa del backoff esponenziale quando riscontri limiti di frequenza (429 Too Many Requests) e timeout del gateway del server (504 Gateway Timeout). Non riprovare mai immediatamente a inviare payload di grandi dimensioni non riusciti. I nuovi tentativi istantanei moltiplicano la congestione del backend e aggravano il degrado del sistema.

Accesso di terze parti

I dispositivi Fitbit non possono comunicare direttamente con applicazioni o servizi di terze parti. Questi dispositivi sono progettati per comunicare e sincronizzarsi esclusivamente con l'app Google Health.

Il dispositivo sincronizza i dati automaticamente durante il giorno, ogni volta che l'app Google Health è aperta o ogni 15 minuti se il Bluetooth è attivo e l'app è in esecuzione in background. Una volta completato questo processo di sincronizzazione, i dati sono disponibili per i servizi di terze parti tramite l'API Google Health.

Filtro per qualità e validità dei dati

Per fornire metriche di salute affidabili senza richiedere un filtro del rumore lato client personalizzato, l'API Google Health convalida la telemetria dei sensori ed esclude le misurazioni non valide prima di restituire le risposte:

  • Per la saturazione di ossigeno nel sangue a livello di minuti (oxygen-saturation), l'API restituisce solo le letture convalidate e rimuove i minuti contrassegnati come non validi a causa del movimento del braccio, di un'aderenza al polso non corretta o di un punteggio di affidabilità del sensore inferiore al 50%, nonché i 3 minuti prima e dopo una lettura non valida e i tratti validi isolati di durata inferiore a 4 minuti. Di conseguenza, la copertura a livello di minuti può essere scarsa e sono previste lacune. Per maggiori dettagli, consulta Filtro SpO2 a livello di minuto e validità dei dati.

Standard di distanza

Le distanze degli allenamenti, ad esempio elevationGainMillimeters, vengono misurate in millimetri come unità standard per i seguenti motivi:

  1. Mantenimento della precisione dei dati: il motivo più importante per utilizzare i millimetri è garantire di non perdere precisione nei dati che leggiamo e forniamo. L'utilizzo di un'unità di misura precisa come i millimetri ci consente di rappresentare le misurazioni con un'elevata precisione.
  2. Standardizzazione: i millimetri sono l'unità di misura standardizzata progettata per i nostri servizi. Questa coerenza contribuisce a garantire un'esperienza uniforme per gli sviluppatori che interagiscono con diverse parti dell'API.
  3. Supporto di un ampio sistema di misurazione: l'utilizzo di un'unità di base come i millimetri semplifica la conversione in qualsiasi altra unità scelta dagli sviluppatori, indipendentemente dal fatto che utilizzino sistemi di misurazione metrici, imperiali o di altro tipo.

Durate dei giorni variabili

La gestione del tempo da parte dell'API Health dà la priorità all'ora dell'utente per tenere conto della durata variabile dei giorni causata dall'ora legale o dai viaggi. Ogni punto dati viene archiviato con un timestamp UTC fisico e l'offset UTC attivo al momento dell'evento. In questo modo, il sistema può:

  • Mappa l'evento a un istante fisico preciso.
  • Correggi l'ora in base al contesto locale dell'utente per l'aggregazione.

Ora legale

Quando si passa all'ora legale, il ritorno all'ora solare comporta un giorno civile di 25 ore e il rollup per quella data conterrà 25 ore di dati. Il passaggio all'ora legale comporta un giorno civile di 23 ore in cui l'ora torna all'ora standard.

Viaggiare

I viaggi attraverso i fusi orari possono causare variazioni ancora più significative nella durata fisica di un singolo giorno civile.

Utilizza l'endpoint dailyRollUp per riconciliare le differenze di fuso orario. Attribuisce automaticamente i dati al giorno di calendario in cui sono stati registrati in base all'ora locale dell'utente, "unendo" di fatto il giorno nonostante i cambiamenti di fuso orario. Per dettagli ed esempi, consulta Aggrega i dati in base ai giorni di calendario nella guida ai dati aggregati.