Poniższa tabela zawiera pełną listę typów danych z kilkoma kolumnami, które pomogą Ci zrozumieć reprezentację każdego typu w interfejsie Google Health API, a także zakres, w jakim jest on dostępny.
Typ danychdataType
filter parameter |
Dostępne operacje |
Zakres |
|---|---|---|
|
Spalone kalorie
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
Aktywne minuty
active-minutesactive_minutes
Typ rekordu: Interwał
Zgodne urządzenia
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
Aktywne minuty w strefie
active-zone-minutesactive_zone_minutes
Typ rekordu: Interwał
Zgodne urządzenia
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Poziom aktywności
|
lista, uzgadnianie | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Wysokość
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Glukoza we krwi
|
list, get, reconcile, rollup, dailyRollup | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Tkanka tłuszczowa
|
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Kalorie w strefie tętna
|
rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Temperatura ciała
|
list, get, reconcile, rollup, dailyRollup | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
Dzienna zmienność rytmu serca
daily-heart-rate-variabilitydaily_heart_rate_variability
Typ rekordu: dzienny
Zgodne urządzenia
|
lista, uzgadnianie | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
Dzienne strefy tętna
daily-heart-rate-zonesdaily_heart_rate_zones
Typ rekordu: dzienny
|
lista, uzgadnianie | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
Codzienne nasycenie tlenem
daily-oxygen-saturationdaily_oxygen_saturation
Typ rekordu: dzienny
Zgodne urządzenia
|
lista, uzgadnianie | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
Dzienna częstość oddechów
daily-respiratory-ratedaily_respiratory_rate
Typ rekordu: dzienny
Zgodne urządzenia
|
lista, uzgadnianie | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
Dzienne tętno spoczynkowe
daily-resting-heart-ratedaily_resting_heart_rate
Typ rekordu: dzienny
Zgodne urządzenia
|
lista, uzgadnianie | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
Codzienne wyliczenia temperatury podczas snu
daily-sleep-temperature-derivationsdaily_sleep_temperature_derivations
Typ rekordu: dzienny
Zgodne urządzenia
|
lista, uzgadnianie | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
Dzienny pułap tlenowy
daily-vo2-maxdaily_vo2_max
Typ rekordu: dzienny
Zgodne urządzenia
|
lista, uzgadnianie | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
Dystans
distancedistance
Typ rekordu: Interwał
Zgodne urządzenia
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
Elektrokardiogram (EKG)
electrocardiogramelectrocardiogram
Typ rekordu: sesja
Zgodne urządzenia
|
lista | .ecg.readonly |
Ćwiczenia
exerciseexercise
Typ rekordu: sesja
Zgodne urządzenia
|
list, get, reconcile, create, update, batchDelete | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Piętra
|
reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Jedzenie
|
list, get | .nutrition.readonly.nutrition.writeonly |
Jednostka miary żywności
food-measurement-unitfood_measurement_unit
Typ rekordu: jedzenie
Zgodne urządzenia
|
list, get | .nutrition.readonly.nutrition.writeonly |
Tętno
heart-rateheart_rate
Typ rekordu: Próbka
Zgodne urządzenia
|
list, reconcile, rollup, dailyRollup | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
Zmienność rytmu serca
heart-rate-variabilityheart_rate_variability
Typ rekordu: Próbka
Zgodne urządzenia
|
lista, uzgadnianie | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Wysokość
|
list, get, reconcile, create, update, batchDelete | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
Zapis nawodnienia
|
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete | .nutrition.readonly.nutrition.writeonly |
Powiadomienie o nieregularnym rytmie serca
irregular-rhythm-notificationirregular_rhythm_notification
Typ rekordu: sesja
|
lista | .irn.readonly |
Okres
menstrual-periodmenstrual_period
Typ rekordu: Interwał
|
create, update, batchDelete | .reproductive_health.writeonly |
Nastroje
moodsmoods
Typ rekordu: Próbka
|
create, update, batchDelete | .mindfulness.writeonly |
Dziennik odżywiania
nutrition-lognutrition_log
Typ rekordu: Próbka
Zgodne urządzenia
|
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete | .nutrition.readonly.nutrition.writeonly |
Test owulacyjny
ovulation-testovulation_test
Typ rekordu: Próbka
|
create, update, batchDelete | .reproductive_health.writeonly |
Nasycenie tlenem
oxygen-saturationoxygen_saturation
Typ rekordu: Próbka
Zgodne urządzenia
|
lista, uzgadnianie | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
Podsumowanie snu na podstawie częstości oddechów
respiratory-rate-sleep-summaryrespiratory_rate_sleep_summary
Typ rekordu: Próbka
Zgodne urządzenia
|
lista, uzgadnianie | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
Pułap tlenowy podczas biegu
run-vo2-maxrun_vo2_max
Typ rekordu: Próbka
Zgodne urządzenia
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
Okres braku aktywności
sedentary-periodsedentary_period
Typ rekordu: Interwał
Zgodne urządzenia
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
Sen
sleepsleep
Typ rekordu: sesja
Zgodne urządzenia
|
list, get, reconcile, create, update, batchDelete | .sleep.readonly.sleep.writeonly |
Instrukcje
stepssteps
Typ rekordu: Interwał
Zgodne urządzenia
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
Dane o długościach pływania
swim-lengths-dataswim_lengths_data
Typ rekordu: Interwał
Zgodne urządzenia
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
Objawy
symptomssymptoms
Typ rekordu: Próbka
|
create, update, batchDelete | .logged_symptoms.writeonly |
|
Czas w strefie tętna
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
Wszystkie kalorie
total-caloriestotal_calories
Typ rekordu: Interwał
Zgodne urządzenia
|
rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
Maksymalny pułap tlenowy VO2
vo2-maxvo2_max
Typ rekordu: Próbka
Zgodne urządzenia
|
lista, uzgadnianie | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
Waga
|
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
Ograniczenia zapytań
Podczas wysyłania zapytań do interfejsu API o punkty danych, zbiorcze dane lub dzienne dane zbiorcze pamiętaj o tych ograniczeniach:
- Wymagania dotyczące filtrów: niektóre typy danych pochodnych tylko do odczytu, np.
total-calories, wymagają filtra określającego czas rozpoczęcia interwału (z użyciem czasu fizycznego lub cywilnego). - Limity zakresu zapytań: punkty końcowe agregacji zbiorczej i dziennej agregacji zbiorczej wymuszają maksymalne limity zakresu zapytań na podstawie typu danych:
- Maksymalny zakres zapytania to 14 dni w przypadku strumieni
calories-in-heart-rate-zone,heart-rate,active-minutesitotal-calories. - Maksymalny zakres zapytania wynosi 90 dni w przypadku wszystkich innych typów danych.
- Maksymalny zakres zapytania to 14 dni w przypadku strumieni
Dostępność danych
Aktualizacje danych użytkownika są dostępne dopiero po zsynchronizowaniu przez niego trackera aktywności lub ręcznym wprowadzeniu nowych danych w aplikacji mobilnej lub internetowej Fitbit. Urządzenie Fitbit i aplikacja mobilna Fitbit mogą automatycznie synchronizować dane co 15 minut, gdy aplikacja Fitbit jest otwarta na urządzeniu mobilnym, a oba urządzenia mają aktywne połączenie do transmisji danych i znajdują się w zasięgu Bluetooth. Jeśli użytkownik śledzi aktywność za pomocą MobileTrack, synchronizacja MobileTrack odbywa się co godzinę, o ile aplikacja jest otwarta.
Pobieranie danych historycznych
Jedną z głównych korzyści interfejsu Google Health API jest możliwość śledzenia wyników użytkownika i monitorowania jego parametrów życiowych przez długi czas. Możesz wysyłać zapytania o dane użytkownika z dowolnego okresu, w którym były one rejestrowane. Interfejs API nie nakłada żadnych ograniczeń na ilość danych historycznych, które może wykorzystywać Twoja aplikacja.
Wykonywanie zapytań dotyczących danych historycznych podlega jednak standardowym limitom częstotliwości. Aby zarządzać stabilnością systemu i zapobiegać nadmiernym rozmiarom pakietów danych, interfejs Google Health API używa automatycznego stronicowania z rozmiarami stron dostosowanymi do konkretnych punktów końcowych. Pamiętaj o tych granicach i sposobie działania:
- Automatyczny podział na strony: jeśli zapytanie dotyczy długiego okresu danych, interfejs API zwróci tylko pierwszą stronę wyników do limitu rozmiaru strony dla danego punktu końcowego wraz z parametrem
nextPageToken. Aby poprosić o kolejne strony, musisz użyć parametrunextPageToken. - Zmienne rozmiary stron: limity ograniczające zależą od punktu końcowego i typu danych. W przypadku większości typów danych rozmiar strony jest ograniczony do maksymalnie 10 tys.
W przypadku niektórych typów danych, takich jak
exerciseisleep, domyślny i maksymalny rozmiar strony jest ograniczony do 25. Jeśli na przykład klient poprosi o wszystkie dane o śnie z ostatnich 10 lat, interfejs API zwróci na pierwszej stronie tylko 25 sesji snu. - Ograniczenia zakresu dat w przypadku scalania danych: w przypadku punktów końcowych scalania i agregacji danych (np.
rollUpidailyRollUp) zakresy dat zapytań są ograniczone w zależności od typu danych:- Maksymalny zakres 14 dni w przypadku usług
calories-in-heart-rate-zone,heart-rate,active-minutesitotal-calories. - Maksymalny zakres 90 dni w przypadku wszystkich innych rodzajów danych zbiorczych.
- Maksymalny zakres 14 dni w przypadku usług
W zależności od ilości danych historycznych, których potrzebuje Twoja aplikacja, pobranie całego zbioru danych będzie wymagać sekwencyjnego przechodzenia przez strony. Pamiętaj o tym podczas projektowania procesu synchronizacji danych w aplikacji.
Aby zapewnić optymalną skuteczność i uniknąć błędów interfejsu API, podczas wysyłania zapytań o dane historyczne postępuj zgodnie z tymi wytycznymi:
Synchronizacja danych etapami (gorące ładowanie i wczytywanie „na zimno”)
- Początkowe wczytywanie „na gorąco”: podczas głównej sekwencji wczytywania pobieraj i renderuj tylko dane z ostatnich 7–14 dni. Dzięki temu użytkownicy od razu widzą dane bez czekania na długotrwałe zapytania.
- Wczytywanie „na zimno” w tle: przekazywanie starszych danych historycznych do asynchronicznej kolejki o niższym priorytecie lub procesu w tle po wyrenderowaniu głównego interfejsu.
Dzielenie zapytań na potrzeby agregacji
- Ponieważ punkty końcowe zbiorczych i dziennych danych zbiorczych wymuszają maksymalny zakres dat (14 lub 90 dni w zależności od typu danych), musisz podzielić duże zapytania o historyczne dane zbiorcze na mniejsze, kolejne przedziały w tych limitach.
- Bezpiecznie grupuj lub sekwencjonuj te zapytania, aby zachować limity współbieżności i utrzymywać stałe wskaźniki postępu interfejsu.
Wykorzystywanie wstępnie zagregowanych podsumowań
Zmień strukturę paneli ogólnych i wykresów trendów, aby korzystać z wstępnie zagregowanych punktów końcowych podsumowania (np. DailyRollUpDataPoints). Znacznie zmniejszy to obciążenie obliczeniowe backendu i czas przesyłania danych do klienta.
Odporna obsługa błędów (inteligentne ponawianie)
- W przypadku przekroczenia ograniczania liczby żądań (
429 Too Many Requests) i limitów czasu bramy serwera (504 Gateway Timeout) stosuj ścisłe wzrastający czas do ponowienia. Nigdy nie ponawiaj od razu prób wysyłania dużych, nieudanych ładunków. Natychmiastowe ponawianie prób zwiększa przeciążenie backendu i pogarsza działanie systemu.
Dostęp aplikacji zewnętrznych
Urządzenia Fitbit nie mogą komunikować się bezpośrednio z aplikacjami ani usługami innych firm. Te urządzenia są przeznaczone do komunikacji i synchronizacji wyłącznie z aplikacją mobilną Fitbit.
Urządzenie synchronizuje dane automatycznie przez cały dzień, gdy aplikacja Fitbit jest otwarta, lub co 15 minut, jeśli Bluetooth jest aktywny, a aplikacja działa w tle. Po zakończeniu procesu synchronizacji dane są udostępniane usługom innych firm za pomocą interfejsu Google Health API.
Standardy odległości
Odległości ćwiczeń, np. elevationGainMillimeters, są mierzone w milimetrach jako standardowej jednostce z tych powodów:
- Zachowanie precyzji danych: najważniejszym powodem używania milimetrów jest zapewnienie, że nie utracimy precyzji danych, które odczytujemy i udostępniamy. Używanie precyzyjnej jednostki, takiej jak milimetry, pozwala nam przedstawiać pomiary z dużą dokładnością.
- Standaryzacja: milimetry są standardową jednostką miary w naszych usługach. Ta spójność zapewnia deweloperom jednolite wrażenia podczas korzystania z różnych części interfejsu API.
- Szerokie wsparcie dla systemów pomiarowych: używanie jednostki podstawowej, takiej jak milimetry, ułatwia programistom przeliczanie na dowolną inną wybraną jednostkę, niezależnie od tego, czy pracują w systemie metrycznym, imperialnym czy innym.
Zmienna długość dnia
Interfejs Health API traktuje czas priorytetowo, aby uwzględniać czas użytkownika i zmienną długość dnia spowodowaną zmianą czasu lub podróżą. Każdy punkt danych jest przechowywany z fizyczną sygnaturą czasową UTC i przesunięciem względem czasu UTC aktywnym w momencie zdarzenia. Dzięki temu system może:
- Przypisz zdarzenie do dokładnego momentu w czasie.
- Skoryguj czas do lokalnego kontekstu użytkownika na potrzeby agregacji.
Czas letni
Gdy następuje zmiana czasu na zimowy, dzień kalendarzowy trwa 25 godzin, a podsumowanie za ten dzień zawiera dane z 25 godzin. „Przesunięcie czasu do przodu” powoduje, że dzień trwa 23 godziny, a czas wraca do czasu standardowego.
Podróże
Podróżowanie między strefami czasowymi może powodować jeszcze większe różnice w fizycznym czasie trwania jednego dnia kalendarzowego.
Użyj punktu końcowego dailyRollUp, aby uwzględnić różnice w strefach czasowych. Automatycznie przypisuje dane do dnia kalendarzowego, w którym zostały zarejestrowane, zgodnie z czasem lokalnym użytkownika, skutecznie „łącząc” dzień pomimo zmian stref czasowych.