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 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:

Tabella: descrizioni dei campi del tipo 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 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:

  • Interval (Rappresenta le misurazioni registrate in un determinato 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 correlata all'alimentazione.)
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).

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: Intervallo
Risoluzione dell'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: Intervallo
Risoluzione dell'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: 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-level
filter parameter: activity_level
Tipo di record: Intervallo
list, reconcile .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Altitudine
dataType: altitude
filter 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-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 battito cardiaco
dataType: calories-in-heart-rate-zone
filter 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-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

elenco, riconcilia .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Zone battito cardiaco giornaliere
dataType: daily-heart-rate-zones
filter 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-saturation
filter 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-rate
filter 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-rate
filter 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-derivations
filter 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-max
filter parameter: daily_vo2_max
Tipo di record: giornaliero

Dispositivi compatibili

elenco, riconcilia .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Distanza
dataType: distance
filter 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: 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: Intervallo
Risoluzione dell'archiviazione: 1 minuto
reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.writeonly
Cibo
dataType: food
filter parameter: food
Tipo di record: Cibo
list, get .nutrition.readonly
.nutrition.writeonly
Unità di misura per alimenti
dataType: food-measurement-unit
filter parameter: food_measurement_unit
Tipo di record: Cibo

Dispositivi compatibili

list, get .nutrition.readonly
.nutrition.writeonly
Battito cardiaco
dataType: heart-rate
filter 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-variability
filter parameter: heart_rate_variability
Tipo di record: Esempio

Dispositivi compatibili

list, reconcile .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 ritmo irregolare
dataType: irregular-rhythm-notification
filter parameter: irregular_rhythm_notification
Tipo di record: sessione
list .irn.readonly
Ciclo mestruale
dataType: menstrual-period
filter parameter: menstrual_period
Tipo di record: Intervallo
create, update, batchDelete .reproductive_health.writeonly
Stati d'animo
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

Dispositivi compatibili

list, reconcile .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly
Riepilogo del sonno della frequenza respiratoria
dataType: respiratory-rate-sleep-summary
filter 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-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 sedentario
dataType: sedentary-period
filter parameter: sedentary_period
Tipo di record: Intervallo

Dispositivi compatibili

list, reconcile, rollup, dailyRollup .activity_and_fitness.readonly
.activity_and_fitness.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: 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-data
filter parameter: swim_lengths_data
Tipo di record: Intervallo

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 battito cardiaco
dataType: time-in-heart-rate-zone
filter 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-calories
filter 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-max
filter parameter: vo2_max
Tipo di record: Esempio

Dispositivi compatibili

elenco, 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, 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-minutes e total-calories.
    • Un intervallo di query massimo di 90 giorni per tutti gli altri tipi di dati.
  • Dimensioni finestra di rollup:quando viene chiamato l'endpoint rollUp, la durata windowSize deve essere di almeno 1 secondo ("1s"). Le durate inferiori al secondo vengono rifiutate con INVALID_ARGUMENT. Inoltre, scegli un windowSize uguale o superiore alla risoluzione di archiviazione sottostante del tipo di dati (ad esempio "60s" per i tipi di dati a intervalli di 1 minuto come steps e distance) 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 utilizzare nextPageToken per 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 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 dell'intervallo di date di rollup: per gli endpoint di rollup e aggregazione 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 di rollup.

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:

  1. 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.
  2. 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.
  3. 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.