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 ciascun tipo.
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 ciascun tipo di dati. Queste 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 rollup giornaliero e rollup. |
| Tipo di record | Indica la struttura e il formato dei dati registrati. Sotto il cofano, questa operazione è in linea con la 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 webhook | Indica che il tipo di dati supporta le notifiche in tempo reale tramite webhook quando vengono sincronizzati nuovi dati. |
| Supporto per gli zeri effettivi | 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, questo rappresenta il windowSize minimo consigliato per garantire un'aggregazione distribuita in modo uniforme senza artefatti di dati del sottointervallo. |
| 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: Intervallo
Risoluzione dell'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: Intervallo
Risoluzione dell'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: Intervallo
Risoluzione dell'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: Intervallo
|
list, reconcile | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Altitudine
dataType:
altitudefilter parameter: altitude
Tipo di record: Intervallo
Risoluzione dell'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 battito cardiaco
dataType:
calories-in-heart-rate-zonefilter parameter: calories_in_heart_rate_zone
Tipo di record: Intervallo
Risoluzione dell'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
|
elenco, riconcilia | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Zone battito cardiaco giornaliere
dataType:
daily-heart-rate-zonesfilter parameter: daily_heart_rate_zones
Tipo di record: giornaliero
|
elenco, 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
|
elenco, 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
|
elenco, 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
|
list, reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Derivazioni della temperatura del sonno giornaliera
dataType:
daily-sleep-temperature-derivationsfilter parameter: daily_sleep_temperature_derivations
Tipo di record: giornaliero
Dispositivi compatibili
|
list, reconcile | .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
|
elenco, riconcilia | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Distanza
dataType:
distancefilter parameter: distance
Tipo di record: Intervallo
Risoluzione dell'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: Intervallo
Risoluzione dell'archiviazione: 1 minuto
|
reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Cibo
|
list, get | .nutrition.readonly.nutrition.writeonly |
|
Unità di misura per alimenti
dataType:
food-measurement-unitfilter parameter: food_measurement_unit
Tipo di record: Cibo
Dispositivi compatibili
|
list, get | .nutrition.readonly.nutrition.writeonly |
|
Battito cardiaco
dataType:
heart-ratefilter parameter: heart_rate
Tipo di record: Esempio
Risoluzione dell'archiviazione: 1 secondo (1 s)
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
|
list, reconcile | .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
|
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete | .nutrition.readonly.nutrition.writeonly |
|
Notifica ritmo irregolare
dataType:
irregular-rhythm-notificationfilter parameter: irregular_rhythm_notification
Tipo di record: sessione
|
list | .irn.readonly |
|
Ciclo mestruale
dataType:
menstrual-periodfilter parameter: menstrual_period
Tipo di record: Intervallo
|
create, update, batchDelete | .reproductive_health.writeonly |
|
Stati d'animo
|
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
Dispositivi compatibili
|
list, reconcile | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Riepilogo del sonno della frequenza respiratoria
dataType:
respiratory-rate-sleep-summaryfilter parameter: respiratory_rate_sleep_summary
Tipo di record: Esempio
Dispositivi compatibili
|
list, reconcile | .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 sedentario
dataType:
sedentary-periodfilter parameter: sedentary_period
Tipo di record: Intervallo
Dispositivi compatibili
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.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: Intervallo
Risoluzione dell'archiviazione: 1 minuto
Dispositivi compatibili
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Dati sulle vasche
dataType:
swim-lengths-datafilter parameter: swim_lengths_data
Tipo di record: Intervallo
Dispositivi compatibili
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Sintomi
|
create, update, batchDelete | .logged_symptoms.writeonly |
|
Tempo nella zona battito cardiaco
dataType:
time-in-heart-rate-zonefilter parameter: time_in_heart_rate_zone
Tipo di record: Intervallo
Risoluzione dell'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: Intervallo
Risoluzione dell'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
|
elenco, 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, rollup o rollup giornalieri dall'API, tieni presente i seguenti vincoli:
- Requisiti del filtro:alcuni tipi di dati derivati di sola lettura, ad esempio
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
impongono limiti massimi all'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 finestra di rollup:quando viene chiamato l'endpoint
rollUp, la duratawindowSizedeve essere di almeno 1 secondo ("1s"). Le durate inferiori al secondo vengono rifiutate conINVALID_ARGUMENT. Inoltre, scegli unwindowSizeuguale o superiore alla risoluzione di archiviazione sottostante del tipo di dati (ad esempio"60s"per i tipi di dati a intervalli di 1 minuto comestepsedistance) per evitare una distribuzione non uniforme tra i sottointervalli. Per i dettagli, vedi Dimensioni della finestra di rollup e risoluzione dell'archiviazione sottostante.
Tipi di dati giornalieri e intervalli
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 a intervalli. 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 tendenze di alto livello e dashboard giornaliere per risparmiare sull'elaborazione.
Intervallo: misurazioni granulari ad alta risoluzione effettuate durante la giornata. Utilizzalo per tracciare le fluttuazioni infragiornaliere o per eseguire analisi approfondite ora per ora.
Disponibilità dei dati
Gli aggiornamenti ai dati dell'utente sono disponibili solo dopo la sincronizzazione del tracker di attività o l'inserimento manuale di nuovi dati nell'app mobile o nell'app web Fitbit. Il dispositivo Fitbit e l'app mobile Fitbit possono sincronizzarsi automaticamente ogni 15 minuti quando l'app Fitbit è aperta sul dispositivo mobile e i due dispositivi hanno una connessione dati attiva e si trovano nel raggio d'azione del Bluetooth. Se l'utente monitora l'attività utilizzando MobileTrack, la sincronizzazione viene eseguita ogni ora finché l'app è 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 a partire dal momento 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'interrogazione dei dati storici è ancora regolata dai limiti di frequenza standard. Per gestire la stabilità del sistema e prevenire payload eccessivi, l'API Google Health utilizza la paginazione automatica con dimensioni di pagina specifiche per l'endpoint. Tieni presente i seguenti limiti e comportamenti:
- Impaginazione automatica:se esegui una query su un intervallo di dati lungo, l'API restituirà solo la prima pagina di risultati fino al limite di dimensioni della pagina per l'endpoint, insieme a un
nextPageToken. Devi utilizzarenextPageTokenper richiedere le pagine successive. - Dimensioni delle pagine variabili: i limiti di capping 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 alcuni 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 dell'intervallo di date di rollup: per gli endpoint di rollup e aggregazione 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 di rollup.
- Un intervallo massimo di 14 giorni per
A seconda del volume di dati storici necessari per la tua applicazione, il recupero dell'intero set di dati richiederà la paginazione sequenziale delle pagine. Tieni presente questo aspetto quando progetti la procedura 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 "a caldo" iniziale: recupera e visualizza solo i dati degli ultimi 7-14 giorni durante la sequenza di caricamento principale. In questo modo, gli utenti vedono immediatamente i dati senza dover attendere query a esecuzione prolungata.
- Caricamento "a freddo" in background:delega il recupero dei dati storici meno recenti a una coda asincrona a priorità inferiore o a un processo in background dopo il rendering della UI principale.
Suddivisione delle query per l'aggregazione
- Poiché gli endpoint di rollup e rollup giornaliero impongono un limite massimo all'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 concorrenza e mantenere indicatori di avanzamento dell'interfaccia utente stabili.
Sfruttare i roll-up preaggregati
Ristruttura le dashboard di panoramica e i grafici delle tendenze in modo che utilizzino endpoint preaggregati e di riepilogo (ad esempio DailyRollUpDataPoints). In questo modo, si ridurranno drasticamente il sovraccarico di calcolo sul backend e il tempo di trasferimento di rete al client.
Gestione degli errori resiliente (nuovi tentativi intelligenti)
- Implementa la gestione del backoff esponenziale rigoroso quando si verificano limiti di frequenza (
429 Too Many Requests) e timeout del gateway del server (504 Gateway Timeout). Non riprovare immediatamente a inviare payload di grandi dimensioni non riusciti. I tentativi immediati moltiplicano la congestione del backend e peggiorano il 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 mobile Fitbit.
Il dispositivo sincronizza automaticamente i dati durante il giorno, ogni volta che l'app Fitbit è aperta o ogni 15 minuti se il Bluetooth è attivo e l'app è in esecuzione in background. Una volta completata la procedura di sincronizzazione, i dati sono disponibili per i servizi di terze parti tramite l'API Google Health.
Standard di distanza
Le distanze di allenamento, ad esempio elevationGainMillimeters, vengono misurate in millimetri come unità standard per i seguenti motivi:
- Mantenere la 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 elevata precisione.
- Standardizzazione: i millimetri sono l'unità standardizzata progettata per tutti i nostri servizi. Questa coerenza contribuisce a garantire un'esperienza uniforme per gli sviluppatori che interagiscono con diverse parti dell'API.
- Ampio supporto del sistema di misurazione: l'utilizzo di un'unità di base come i millimetri consente agli sviluppatori di eseguire facilmente la conversione in qualsiasi altra unità scelta, indipendentemente dal fatto che utilizzino sistemi di misurazione metrici, imperiali o di altro tipo.
Durata variabile dei giorni
La gestione del tempo da parte dell'API Health dà la priorità al tempo dell'utente per tenere conto della durata variabile del giorno causata dall'ora legale o dai viaggi. Ogni punto di dati viene memorizzato con un timestamp UTC fisico e l'offset UTC attivo al momento dell'evento. In questo modo, il sistema può:
- Mappa l'evento in un istante fisico preciso.
- Correggi l'ora in base al contesto locale dell'utente per l'aggregazione.
Ora legale
Quando viene applicata l'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. Un "avanzamento" comporta un giorno civile di 23 ore in cui l'ora torna all'ora standard.
Viaggiare
Gli spostamenti tra 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 la giornata
nonostante i cambiamenti di fuso orario.