Der Abschnitt „API-Spezifikation“ bietet einen detaillierten Überblick über die technischen Komponenten, die für die Integration in die Plattform erforderlich sind, einschließlich Autorisierungsbereichen, Datentypdefinitionen und Endpunktstrukturen. Diese API ist eine strategische Weiterentwicklung der alten Fitbit Web API und wurde auf einer modernen Infrastruktur neu erstellt, um eine stabilere und einheitlichere Entwicklererfahrung zu bieten.
Bereiche
Sie müssen Ihre Autorisierungsanfrage aktualisieren, um die Google Health API-Bereiche zu verwenden. Die Bereiche legen fest, ob Ihre App Lese- oder Schreibvorgänge unterstützt. Folgen Sie der Anleitung zur Implementierung von Bereichen. Darin wird beschrieben, wie Sie nur die erforderlichen Bereiche anfordern, den Schreibzugriff nur beim Senden von Daten konfigurieren und eine teilweise Einwilligung ordnungsgemäß verarbeiten.
Die Google Health API-Bereiche sind eine HTTP-URL, die mit https://www.googleapis.com/auth/googlehealth.{scope} beginnt. Beispiel: https://www.googleapis.com/auth/googlehealth.activity_and_fitness.writeonly.
Bereichszuordnungen
So werden die Fitbit Web API-Bereiche den Google Health API-Bereichen zugeordnet:
| Fitbit Web API-Bereiche | Google Health API-Bereiche |
|---|---|
| Aktivität | .activity_and_fitness.readonly
.activity_and_fitness.writeonly |
| blood_glucose | .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly |
| cardio_fitness | .activity_and_fitness.readonly
.activity_and_fitness.writeonly |
| Elektrokardiogramm | .ecg.readonly
|
| Herzfrequenz | .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly |
| irregular_rhythm_notifications | .irn.readonly
|
| Standort | .location.readonly
|
| Ernährung | .nutrition.readonly
.nutrition.writeonly |
| oxygen_saturation | .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly |
| Profil | .profile.readonly
.profile.writeonly |
| respiratory_rate | .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly |
| Einstellungen | .settings.readonly
.settings.writeonly |
| Schlaf | .sleep.readonly
.sleep.writeonly |
| Temperatur | .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly |
| Gewicht | .health_metrics_and_measurements.readonly
.health_metrics_and_measurements.writeonly |
Datentypen
Hier ist eine Liste der Google Health API-Datentypen und ihrer Zuordnung zur Fitbit Web API.
| Fitbit Web API-Datentyp | Google Health API-DatentypdataType |
Beschreibung |
|---|---|---|
| Aktivitätskalorien | Aktiv verbrannte Energieactive-energy-burned
|
Stellt die während aktiver Phasen verbrannten Kalorien dar, einschließlich des Grundumsatzes für diese Phasen. In der Google Health API kann dies rekonstruiert werden, indem der Grundumsatz zum Datentyp active-energy-burned hinzugefügt wird, der nur den Kalorienverbrauch durch Aktivitäten ohne Grundumsatz erfasst. |
| Aktivzonenminuten | Aktivzonenminutenactive-zone-minutes
|
|
| Enthält Änderungen am Aktivitätsniveau des Nutzers | Aktivitätsniveauactivity-level
|
Erfasst das Aktivitätsniveau des Nutzers (z. B. sitzend oder aktiv) über einen bestimmten Zeitraum. |
| Höhe | Altitudealtitude
|
|
Aktivität caloriesBMR |
Durch Grundumsatz verbrauchte Kalorienbasal-energy-burned
|
Die Kalorien, die über einen bestimmten Zeitraum durch den Grundumsatz (GU) verbrannt werden. |
| Blutzucker | Blutzuckerblood-glucose
|
|
| Körperfett | Körperfettbody-fat
|
|
caloriesOut in jeder Herzfrequenzzone |
Kalorien in Herzfrequenzzonecalories-in-heart-rate-zone
|
|
| Temperatur (Kern) | Körperkerntemperaturcore-body-temperature
|
|
| HFV-Zusammenfassung | Tägliche Herzfrequenzvariabilitätdaily-heart-rate-variability
|
|
| SpO2-Zusammenfassung | Tägliche Sauerstoffsättigungdaily-oxygen-saturation
|
Eine tägliche Zusammenfassung der Statistiken zur Sauerstoffsättigung (SpO2), die anhand validierter Schlafmessungen berechnet wird. |
| Ruheherzfrequenz | Tägliche Ruheherzfrequenzdaily-resting-heart-rate
|
|
| Hauttemperatur | Tägliche Abweichungen der Schlaftemperaturdaily-sleep-temperature-derivations
|
|
| Entfernung | Entfernungdistance
|
|
| Elektrokardiogramm (EKG) | Elektrokardiogramm (EKG)electrocardiogram
|
|
| Aufgezeichnete Aktivität | Trainingexercise
|
Aufgezeichnete Trainings oder Trainingseinheiten, einschließlich Start- und Endzeiten, Aktivitätstypen und Messwerten für die Trainingseinheit. |
| Stockwerke | Stockwerkefloors
|
|
| Essen | Essenfood
|
|
| Maßeinheit für Lebensmittel | Maßeinheit für Lebensmittelfood-measurement-unit
|
|
| Herzfrequenz | Herzfrequenzheart-rate
|
|
| HFV im Tagesverlauf | Herzfrequenzvariabilitätheart-rate-variability
|
|
| Benachrichtigungen über einen unregelmäßigen Herzrhythmus | Benachrichtigung über einen unregelmäßigen Herzrhythmusirregular-rhythm-notification
|
|
| Ernährungsprotokoll | Ernährungsprotokollnutrition-log
|
|
| SpO2 im Tagesverlauf | Sauerstoffsättigungoxygen-saturation
|
Gibt nur validierte SpO2-Messungen auf Minutenebene zurück und schließt Messwerte aus, die aufgrund von Bewegungsartefakten oder geringer Sensorzuverlässigkeit als ungültig gekennzeichnet wurden. Da die Fitbit Web API nur den Sentinel-Wert von 50% ausgeschlossen hat, gibt die Google Health API für denselben Zeitraum weniger Datenpunkte zurück. Weitere Informationen findest du unter Sauerstoffsättigungsfilterung. |
| VO2max-Wert, wenn der Nutzer läuft | Maximale Sauerstoffaufnahme bei Laufrun-vo2-max
|
|
| Zeitreihe der Aktivität – Minuten im Sitzen | Inaktivitätszeitraumsedentary-period
|
|
| Schlaf | Schlafsleep
|
|
| Schritte | Schrittesteps
|
|
| Zeitreihe der Aktivität „Schwimmzüge“ | Daten zu geschwommenen Bahnenswim-lengths-data
|
|
Aktivität caloriesOut |
Kalorien insgesamttotal-calories
|
Die Gesamtzahl der von einem Nutzer über einen bestimmten Zeitraum verbrannten Kalorien, einschließlich des Grundumsatzes und der verbrannten aktiven Energie. |
| Wert für die maximale Sauerstoffaufnahme | Maximale Sauerstoffaufnahmevo2-max
|
|
| Gewicht | Gewichtweight
|
Berechnungen
Die Zuordnungen und Regeln in der Google Health API unterscheiden sich von denen in der Fitbit Web API.
Filterung der Sauerstoffsättigung
Bei der Abfrage der Sauerstoffsättigung auf Minutenebene (oxygen-saturation) wendet die Google Health API strengere Filter für die Datengültigkeit an als die alte Fitbit Web API:
- Die alte Fitbit Web API (v1 und v3) hat nur SpO2-Proben mit einem Sentinel-Wert von 50 % ausgeschlossen.
- Die Google Health API (v4) schließt alle SpO2-Proben aus, die vom Validierungsalgorithmus als ungültig gekennzeichnet wurden. Eine Minute wird als ungültig markiert, wenn das Signal des optischen Sensors aufgrund von Armbewegungen oder eines lockeren Sitzes am Handgelenk unzuverlässig ist, wenn der Konfidenzwert unter 50 % fällt, während der 3 Minuten unmittelbar vor und nach einem ungültigen Messwert oder wenn ein gültiger Zeitraum weniger als 4 aufeinanderfolgende Minuten dauert.
Da die Google Health API alle ungültigen Messwerte und nicht nur den 50-%-Sentinel-Wert entfernt, gibt sie für denselben Zeitraum weniger oxygen-saturation-Datenpunkte zurück als die Fitbit Web API. Es ist also mit Lücken in der minütlichen Abdeckung zu rechnen. Die zurückgegebenen Messwerte auf Minutenebene entsprechen den validierten Datenpunkten, die zur Berechnung der Schlafanalyse des Nutzers für den daily-oxygen-saturation verwendet wurden. Weitere Informationen findest du unter SpO2-Filterung und Datengültigkeit auf Minutenebene.
Aktivitätsniveau, METs und Schrittschwellenwerte
In der Google Health API wird das Aktivitätsniveau eines Nutzers pro Minute aus dem metabolischen Äquivalent (MET) und der Schrittzahl abgeleitet.
| Aktivitätslevel | Herzfrequenzgeräte | Geräte ohne Herzfrequenzmessung |
|---|---|---|
| Sitzend | ≤ 1,5 MET | ≤ 1,5 MET |
| Leicht aktiv | > 1,5 MET und ≤ 4,2 MET | > 1,5 MET und ≤ 3,5 MET |
| Mäßig aktiv | > 4,2 METs und < 6,0 METs (sofern die Bedingungen für Sehr aktiv nicht erfüllt sind) |
> 3,5 METs und < 6,0 METs (sofern die Bedingungen für Sehr aktiv nicht erfüllt sind) |
| Sehr aktiv | ≥ 6,0 METs oder ≥ 5,0 METs mit einer Schrittfrequenz von mindestens 150 Schritten pro Minute | ≥ 6,0 METs oder ≥ 5,0 METs mit einer Schrittfrequenz von mindestens 150 Schritten pro Minute |
Aktive Minuten bestehen aus kombinierten MODERATELY_ACTIVE- und VERY_ACTIVE-Minuten. Eine Minute mit hoher Aktivität wird jedoch nur dann als Aktive Minute angerechnet, wenn sie während einer kontinuierlichen Aktivität von mindestens 10 Minuten auftritt, wobei höchstens 2 Minuten mit geringerer Aktivität zulässig sind.
Minuten im Sitzen und Schlaf
Die Schlafzeit wird nicht zu den Minuten ohne Bewegung gezählt. In täglichen Zusammenfassungen werden die Minuten ohne Aktivität berechnet, indem die Schlafminuten und die aktiven Minuten (leicht aktiv, mäßig aktiv und sehr aktiv) von den Gesamtminuten des Tages (1.440 Minuten) abgezogen werden:
Sedentary Minutes = 1440 - Sleep Minutes - Lightly Active Minutes -
Moderately Active Minutes - Very Active Minutes
Body-Mass-Index (BMI)
Da die Google Health API keinen integrierten BMI-Datentyp bereitstellt, müssen Anwendungen den Body-Mass-Index clientseitig anhand von Größen- und Gewichtsdaten berechnen:
- Rufe das Gewicht des Nutzers in Gramm aus dem Feld
weightGramsim Datentyp Gewicht ab. Rechnen Sie diesen Wert in Kilogramm (durch 1.000 teilen) oder Pfund (durch 453,59237 teilen) um. - Rufe die Größe des Nutzers in Millimetern aus dem Feld
heightMillimetersim Datentyp Größe ab. Rechnen Sie diesen Wert in Meter (durch 1.000 teilen) oder Zoll (durch 25,4 teilen) um. - Verwenden Sie eine der folgenden Formeln, um den BMI-Wert zu berechnen:
- Messwertformel:
BMI = weight (kg) / [height (m)]^2 - Formel für imperiale Einheiten:
BMI = (weight (lbs) / [height (in)]^2) * 703
- Messwertformel:
Die resultierenden BMI-Werte entsprechen den folgenden Kategorien:
| Gewichtskategorie | BMI-Bereich |
|---|---|
| Untergewicht | Unter 18,5 |
| Gesundes Gewicht | 18,5 bis 24,9 |
| Übergewicht | 25 bis 29,9 |
| Adipös | 30 oder höher |
Grundumsatz (GU)
Der Grundumsatz ist die Mindestanzahl an Kalorien, die für die grundlegenden Körperfunktionen im Ruhezustand erforderlich sind. Da die Google Health API keinen integrierten BMR-Datentyp bereitstellt, müssen Anwendungen ihn clientseitig mithilfe der Harris-Benedict-Formel berechnen. Weitere Informationen findest du im Wikipedia-Artikel zur Harris-Benedict-Formel.
So führen Sie diese Berechnung durch:
- Rufe das Gewicht des Nutzers in Gramm aus dem Feld
weightGramsim Datentyp Gewicht ab und rechne es in Kilogramm um (durch 1.000 teilen). Wenn Sie Pfund in Kilogramm umrechnen möchten, teilen Sie den Wert durch 2,2. - Rufe die Größe des Nutzers in Millimetern aus dem Feld
heightMillimetersim Datentyp Größe ab und rechne sie in Zentimeter um (durch 10 teilen). Wenn Sie Zoll in Zentimeter umrechnen möchten, multiplizieren Sie den Wert mit 2,54. - Rufen Sie das Alter des Nutzers in Jahren aus dem Feld
agein der Ressource Profile ab. - Rufe das biologische Geschlecht unabhängig ab (z. B. indem du den Nutzer aufforderst, es anzugeben, oder es in deiner eigenen Datenbank speicherst), da die Google Health API dieses Feld nicht bereitstellt.
- Verwenden Sie eine der folgenden Formeln, die auf dem biologischen Geschlecht des Nutzers basieren:
- Männer:
BMR = 66 + (13.7 x weight_kg) + (5 x height_cm) - (6.8 x age_years) - Frauen:
BMR = 655 + (9.6 x weight_kg) + (1.8 x height_cm) - (4.7 x age_years)
- Männer:
Täglicher Gesamtenergieverbrauch (TDEE)
Der tägliche Gesamtenergieverbrauch (TDEE) ist eine Schätzung der Gesamtzahl der Kalorien, die eine Person an einem Tag verbrennt. Dabei werden sowohl der Grundumsatz als auch die körperliche Aktivität berücksichtigt. Um den TDEE des Nutzers zu schätzen, multipliziere den BMR-Wert mit einem Aktivitätsfaktor, der seinem Lebensstil entspricht:
| Aktivitätslevel | Beschreibung | Multiplikator |
|---|---|---|
| Sitzend | Wenig oder kein Sport. | BMR x 1.2 |
| Leicht aktiv | 1–3 Trainingstage pro Woche. | BMR x 1.375 |
| Mäßig aktiv | 3–5 Trainingstage pro Woche. | BMR x 1.55 |
| Sehr aktiv | 6–7 Trainingstage pro Woche. | BMR x 1.725 |
| Besonders aktiv | Sehr anstrengendes Training oder körperliche Arbeit. | BMR x 1.9 |
Endpunkte
Die REST-Endpunkte verwenden für alle Datentypen eine einheitliche Syntax.
- Dienstendpunkt: Die HTTP-URL-Basis ändert sich in https://health.googleapis.com.
- Endpunktsyntax: Die Google Health API unterstützt eine begrenzte Anzahl von Endpunkten, die von den meisten unterstützten Datentypen verwendet werden können. Dies bietet eine einheitliche Syntax für alle Datentypen und erleichtert die Verwendung der Endpunkte.
- Nutzer-ID: In der Endpunktsyntax muss entweder die Nutzer-ID oder „me“ angegeben werden. Wenn Sie „me“ verwenden, wird die Nutzer-ID aus dem Zugriffstoken abgeleitet.
Beispiel: Hier ist ein Beispiel für den Endpunkt „GET Profile“, der über die Google Health API aufgerufen wird.
GET https://health.googleapis.com/v4/users/me/profile
Endpunktzuordnungen
Eine Liste der verfügbaren Datentypen und der von ihnen unterstützten API-Methoden finden Sie in der Tabelle Google Health API-Datentypen.
| Fitbit Web API-Endpunkttyp | Google Health API |
|---|---|
| GET (Log | Summary | Daily Summary), wobei Sie Daten für einen einzelnen Tag anfordern | dailyRollup-Methode mit windowSize = 1 Tag |
| GET (Intraday), wenn du detaillierte Daten anforderst | Methode list |
| GET (Zeitreihe) nach Datum oder Intervall | Methode rollUp oder dailyRollUp mit einem Zeitraum |
| GET (Logliste) | Methode list |
| CREATE- und UPDATE-Logs | Methode patch |
| DELETE-Logs | Methode batchDelete |
| GET-Profil | users.getProfile gibt die spezifischen Informationen des Nutzers zurückusers.getSettings gibt die Einheiten und Zeitzonen des Nutzers zurück |
| Profil aktualisieren | users.updateProfile ändert die spezifischen Informationen des Nutzersusers.updateSettings ändert die Einheiten und Zeitzonen des Nutzers |
| Nutzer-ID abrufen | users.getIdentity gibt die Fitbit-Legacy- und Google-Nutzer-ID des Nutzers zurück. |
| Geräte abrufen | users.pairedDevices gibt die Liste der gekoppelten Geräte zurück. |
| Abos erstellen | projects.subscribers.subscriptions.create erstellt manuell ein Abo |
| Abos löschen | projects.subscribers.subscriptions.delete – Abo löschen |
| Aboliste abrufen | projects.subscribers.subscriptions.list listet alle Abos auf. |