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:
| 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:
|
| 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). |
| Tipo di dati | Operazioni disponibili |
Ambito |
|---|---|---|
|
Energia attiva bruciata
dataType:
active-energy-burnedfilter 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-minutesfilter parameter: active_minutes
Tipo di record: Interval
Risoluzione di archiviazione: 1 minuto
Dispositivi compatibili
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Minuti in zona attiva
dataType:
active-zone-minutesfilter 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-levelfilter parameter: activity_level
Tipo di record: Interval
|
elenca, riconcilia | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Altitudine
dataType:
altitudefilter 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-glucosefilter 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-fatfilter 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-zonefilter 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-temperaturefilter 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-variabilityfilter 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-zonesfilter 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-saturationfilter 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-ratefilter 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-ratefilter 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-derivationsfilter 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-maxfilter parameter: daily_vo2_max
Tipo di record: giornaliero
Dispositivi compatibili
|
elenca, riconcilia | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Distanza
dataType:
distancefilter 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:
electrocardiogramfilter parameter: electrocardiogram
Tipo di record: Sessione
Dispositivi compatibili
|
list | .ecg.readonly |
|
Allenamento
dataType:
exercisefilter parameter: exercise
Tipo di record: Sessione
Dispositivi compatibili
|
list, get, reconcile, create, update, batchDelete | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Piani
dataType:
floorsfilter parameter: floors
Tipo di record: Interval
Risoluzione di archiviazione: 1 minuto
|
reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Cibo
|
list, get | .nutrition.readonly.nutrition.writeonly |
|
Unità di misura degli alimenti
dataType:
food-measurement-unitfilter parameter: food_measurement_unit
Tipo di record: Alimenti
Dispositivi compatibili
|
list, get | .nutrition.readonly.nutrition.writeonly |
|
Battito cardiaco
dataType:
heart-ratefilter 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-variabilityfilter parameter: heart_rate_variability
Tipo di record: Esempio
Dispositivi compatibili
|
elenca, riconcilia | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Altezza
|
list, get, reconcile, create, update, batchDelete | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Diario dell'idratazione
dataType:
hydration-logfilter 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-notificationfilter parameter: irregular_rhythm_notification
Tipo di record: Sessione
|
list | .irn.readonly |
|
Mestruazioni
dataType:
menstrual-periodfilter parameter: menstrual_period
Tipo di record: Interval
|
create, update, batchDelete | .reproductive_health.writeonly |
|
Mood
|
create, update, batchDelete | .mindfulness.writeonly |
|
Diario alimentare
dataType:
nutrition-logfilter 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-testfilter parameter: ovulation_test
Tipo di record: Esempio
|
create, update, batchDelete | .reproductive_health.writeonly |
|
Saturazione di ossigeno
dataType:
oxygen-saturationfilter 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-summaryfilter 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-maxfilter 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-periodfilter 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-sensorsfilter parameter: skin_temperature_sensors
Tipo di record: Esempio
Dispositivi compatibili |
list | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Sonno
dataType:
sleepfilter parameter: sleep
Tipo di record: Sessione
Dispositivi compatibili
|
list, get, reconcile, create, update, batchDelete | .sleep.readonly.sleep.writeonly |
|
Passaggi
dataType:
stepsfilter 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-datafilter parameter: swim_lengths_data
Tipo di record: Interval
Dispositivi compatibili
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Sintomi
|
create, update, batchDelete | .logged_symptoms.writeonly |
|
Tempo nella zona del battito cardiaco
dataType:
time-in-heart-rate-zonefilter 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-caloriesfilter 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-maxfilter parameter: vo2_max
Tipo di record: Esempio
Dispositivi compatibili
|
elenca, riconcilia | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Peso
dataType:
weightfilter 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-minutesetotal-calories. - Un intervallo di query massimo di 90 giorni per tutti gli altri tipi di dati.
- Un intervallo di query massimo di 14 giorni per
- Dimensioni della finestra di aggregazione: quando chiami l'endpoint
rollUp, la durata diwindowSizedeve essere di almeno 1 secondo ("1s"). Le durate inferiori al secondo vengono rifiutate conINVALID_ARGUMENT. Inoltre, scegli un valorewindowSizeuguale o superiore alla risoluzione di archiviazione sottostante del tipo di dati (ad esempio"60s"per i tipi di dati con intervallo di 1 minuto comestepsedistance) 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 valorenextPageTokenper 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
exerciseesleep, 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
rollUpedailyRollUp), 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-minutesetotal-calories. - Un intervallo massimo di 90 giorni per tutti gli altri tipi di dati aggregati.
- Un intervallo massimo di 14 giorni per
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:
- 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.
- 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.
- 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.