다음 표에는 데이터 유형의 전체 목록이 나와 있으며, Google Health API에서 각 유형의 표현과 각 유형이 제공되는 범위를 이해하는 데 도움이 되는 여러 열이 있습니다.
데이터 유형 필드
Google Health API 데이터 유형 표에는 각 데이터 유형의 표현과 요구사항을 이해하는 데 도움이 되는 여러 필드 열이 포함되어 있습니다. 이러한 열은 다음과 같습니다.
| 필드 | 설명 |
|---|---|
dataType |
엔드포인트 URL에 사용되는 하이픈으로 구분된 식별자입니다 (예: active-minutes). |
filter 매개변수 |
일일 집계 및 집계 요청에서 dataType 필터 매개변수의 값으로 사용되는 밑줄로 구분된 식별자 (예: active_minutes)입니다. |
| 레코드 유형 | 기록된 데이터의 구조와 형식을 나타냅니다. 내부적으로 이는 데이터 포인트의 리소스 표현과 일치합니다. 사용할 수 있는 값은 다음과 같습니다.
|
| 사용 가능한 작업 | 데이터 유형 (예: list, create, rollUp)에 지원되는 API 메서드를 나열합니다. |
| 범위 | 데이터 유형에 액세스하는 데 필요한 OAuth 범위입니다. |
| 웹훅 지원 | 새 데이터가 동기화될 때 데이터 유형이 웹훅을 사용한 실시간 알림을 지원함을 나타냅니다. |
| True zeros 지원 | 활성 0 값 (예: 0 활성 분)과 누락되거나 기록되지 않은 데이터를 구분하기 위해 데이터 유형이 명시적 0 값 기록을 지원함을 나타냅니다. |
| 스토리지 해상도 | 데이터 포인트가 저장되는 최소 기록 또는 샘플링 간격입니다 (예: steps의 경우 1분). 롤업의 경우 이는 하위 간격 데이터 아티팩트 없이 균등하게 분산된 집계를 보장하기 위해 권장되는 최소 windowSize을 나타냅니다. |
| 호환 기기 | 이 데이터 유형을 기록하고 Fitbit 앱을 사용하여 Google Health API에 동기화할 수 있는 실제 기기의 확장 가능한 목록입니다. |
| 데이터 유형 | 사용 가능한 작업 |
범위 |
|---|---|---|
|
활동 에너지 소모량
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
활동 시간
dataType:
active-minutesfilter parameter: active_minutes
레코드 유형: 간격
스토리지 해상도: 1분
호환 기기
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
액티브존 미닛
dataType:
active-zone-minutesfilter parameter: active_zone_minutes
레코드 유형: 간격
스토리지 해상도: 1분
호환 기기
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
활동 수준
|
목록, 조정 | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
고도
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
혈당
|
list, get, reconcile, rollup, dailyRollup | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
체지방
dataType:
body-fatfilter parameter: body_fat
레코드 유형: 샘플
호환 기기
|
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
심박수 구간의 칼로리
|
rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
핵심 체온
|
list, get, reconcile, rollup, dailyRollup | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
일일 심박 변이도
dataType:
daily-heart-rate-variabilityfilter parameter: daily_heart_rate_variability
레코드 유형: 일일
호환 기기
|
목록, 조정 | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
일일 심박수 구간
|
목록, 조정 | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
일일 산소 포화도
dataType:
daily-oxygen-saturationfilter parameter: daily_oxygen_saturation
레코드 유형: 일일
호환 기기
|
목록, 조정 | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
일일 호흡수
dataType:
daily-respiratory-ratefilter parameter: daily_respiratory_rate
레코드 유형: 일일
호환 기기
|
목록, 조정 | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
일일 안정 시 심박수
dataType:
daily-resting-heart-ratefilter parameter: daily_resting_heart_rate
레코드 유형: 일일
호환 기기
|
목록, 조정 | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
일일 수면 온도 파생
dataType:
daily-sleep-temperature-derivationsfilter parameter: daily_sleep_temperature_derivations
레코드 유형: 일일
호환 기기
|
목록, 조정 | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
일일 최대 산소 섭취량
dataType:
daily-vo2-maxfilter parameter: daily_vo2_max
레코드 유형: 일일
호환 기기
|
목록, 조정 | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
거리
dataType:
distancefilter parameter: distance
레코드 유형: 간격
스토리지 해상도: 1분
호환 기기
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
심전도 (ECG)
dataType:
electrocardiogramfilter parameter: electrocardiogram
레코드 유형: 세션
호환 기기
|
list | .ecg.readonly |
|
운동
dataType:
exercisefilter parameter: exercise
레코드 유형: 세션
호환 기기
|
list, get, reconcile, create, update, batchDelete | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
층수
|
reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
음식
|
list, get | .nutrition.readonly.nutrition.writeonly |
|
음식 측정 단위
dataType:
food-measurement-unitfilter parameter: food_measurement_unit
기록 유형: 음식
호환 기기
|
list, get | .nutrition.readonly.nutrition.writeonly |
|
심박수
dataType:
heart-ratefilter parameter: heart_rate
레코드 유형: 샘플
저장 해상도: 1초 (1s)
호환 기기
|
list, reconcile, rollup, dailyRollup | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
심박 변이도
dataType:
heart-rate-variabilityfilter parameter: heart_rate_variability
레코드 유형: 샘플
호환 기기
|
목록, 조정 | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
키
|
list, get, reconcile, create, update, batchDelete | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
수분 섭취 기록
|
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete | .nutrition.readonly.nutrition.writeonly |
|
불규칙한 심장 리듬 알림
dataType:
irregular-rhythm-notificationfilter parameter: irregular_rhythm_notification
레코드 유형: 세션
|
list | .irn.readonly |
|
월경 기간
|
create, update, batchDelete | .reproductive_health.writeonly |
|
기분
|
create, update, batchDelete | .mindfulness.writeonly |
|
영양 기록
dataType:
nutrition-logfilter parameter: nutrition_log
레코드 유형: 세션
호환 기기
|
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete | .nutrition.readonly.nutrition.writeonly |
|
배란 테스트
|
create, update, batchDelete | .reproductive_health.writeonly |
|
산소 포화도
dataType:
oxygen-saturationfilter parameter: oxygen_saturation
레코드 유형: 샘플
호환 기기
|
목록, 조정 | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
호흡수 수면 요약
dataType:
respiratory-rate-sleep-summaryfilter parameter: respiratory_rate_sleep_summary
레코드 유형: 샘플
호환 기기
|
목록, 조정 | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
|
러닝 최대 산소 섭취량
dataType:
run-vo2-maxfilter parameter: run_vo2_max
레코드 유형: 샘플
호환 기기
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
활동량 부족 기간
dataType:
sedentary-periodfilter parameter: sedentary_period
레코드 유형: 간격
호환 기기
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
수면
dataType:
sleepfilter parameter: sleep
레코드 유형: 세션
호환 기기
|
list, get, reconcile, create, update, batchDelete | .sleep.readonly.sleep.writeonly |
|
단계
dataType:
stepsfilter parameter: steps
레코드 유형: 간격
스토리지 해상도: 1분
호환 기기
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
수영 거리 데이터
dataType:
swim-lengths-datafilter parameter: swim_lengths_data
레코드 유형: 간격
호환 기기
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
증상
|
create, update, batchDelete | .logged_symptoms.writeonly |
|
심박수 구간 내 시간
|
list, reconcile, rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
총 칼로리
dataType:
total-caloriesfilter parameter: total_calories
레코드 유형: 간격
스토리지 해상도: 1분
호환 기기
|
rollup, dailyRollup | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
최대 산소 섭취량
dataType:
vo2-maxfilter parameter: vo2_max
레코드 유형: 샘플
호환 기기
|
목록, 조정 | .activity_and_fitness.readonly.activity_and_fitness.writeonly |
|
무게
dataType:
weightfilter parameter: weight
레코드 유형: 샘플
호환 기기
|
list, get, reconcile, rollup, dailyRollup, create, update, batchDelete | .health_metrics_and_measurements.readonly.health_metrics_and_measurements.writeonly |
쿼리 제약 조건
API에서 데이터 포인트, 롤업 또는 일일 롤업을 쿼리할 때는 다음 제약사항을 고려하세요.
- 필터 요구사항:
total-calories와 같은 일부 읽기 전용 파생 데이터 유형에는 간격 시작 시간(물리적 시간 또는 민간 시간 사용)을 지정하는 필터가 필요합니다. - 쿼리 범위 제한: 롤업 및 일일 롤업 집계 엔드포인트는 데이터 유형에 따라 최대 쿼리 범위 제한을 적용합니다.
calories-in-heart-rate-zone,heart-rate,active-minutes,total-calories의 최대 쿼리 범위는 14일입니다.- 다른 모든 데이터 유형의 최대 쿼리 범위는 90일입니다.
- 롤업 기간:
rollUp엔드포인트를 호출할 때windowSize기간은 1초 ("1s") 이상이어야 합니다. 1초 미만의 기간은INVALID_ARGUMENT로 거부됩니다. 또한 하위 간격 간의 불균형한 분포를 방지하려면 데이터 유형의 기본 스토리지 해상도 (예:steps및distance과 같은 1분 간격 데이터 유형의 경우"60s")와 같거나 큰windowSize를 선택하세요. 자세한 내용은 롤업 기간 및 기본 스토리지 해상도를 참고하세요.
일별 데이터 유형과 인터벌 데이터 유형 비교
심박 변이도 (HRV) 또는 산소포화도 (SpO2)와 같은 특정 생리적 측정항목의 경우 Google Health API는 일일 버전과 인터벌 버전의 두 가지 데이터 유형을 제공합니다. 차이점을 이해하는 것이 사용 사례에 적합한 측정항목을 선택하는 데 중요합니다.
일일: 하루 전체에 대한 단일 사전 집계 요약입니다. 처리 비용을 절감하려면 전반적인 추세와 일일 대시보드에 이 기능을 사용하세요.
인터벌: 하루 종일 측정되는 세부적인 고해상도 측정값입니다. 일중 변동을 차트로 표시하거나 시간별 심층 분석을 실행하는 데 사용합니다.
데이터 사용 가능 여부
사용자가 활동 추적기를 동기화하거나 Fitbit 모바일 또는 웹 앱에 새 데이터를 수동으로 입력한 후에만 사용자 데이터를 업데이트할 수 있습니다. Fitbit 앱이 모바일 기기에서 열려 있고 Fitbit 기기와 Fitbit 모바일 앱이 활성 데이터 연결을 사용하며 블루투스 범위 내에 있는 경우 15분마다 자동으로 동기화할 수 있습니다. 사용자가 MobileTrack을 사용하여 활동을 모니터링하는 경우 앱이 열려 있는 동안 MobileTrack이 매시간 동기화됩니다.
이전 데이터 쿼리
Google Health API의 핵심 이점 중 하나는 사용자의 실적을 추적하고 장기간에 걸쳐 건강 수치를 모니터링할 수 있다는 점입니다. 기록된 시점까지 사용자의 데이터를 쿼리할 수 있습니다. API는 애플리케이션이 사용할 수 있는 과거 데이터의 양에 제한이나 제한을 두지 않습니다.
하지만 이전 데이터 쿼리는 여전히 표준 요금 한도가 적용됩니다. 시스템 안정성을 관리하고 과도한 페이로드를 방지하기 위해 Google Health API는 엔드포인트별 페이지 크기로 자동 페이지로 나누기를 사용합니다. 다음 경계 및 동작을 참고하세요.
- 자동 페이지 나누기: 긴 데이터 범위를 쿼리하면 API는 해당 엔드포인트의 페이지 크기 한도까지의 첫 번째 결과 페이지와
nextPageToken를 반환합니다.nextPageToken를 사용하여 후속 페이지를 요청해야 합니다. - 가변 페이지 크기: 상한은 엔드포인트와 데이터 유형에 따라 다릅니다. 대부분의 데이터 유형의 경우 페이지 크기는 최대 10,000개로 제한됩니다.
하지만
exercise및sleep과 같은 특정 데이터 유형의 경우 기본 및 최대 페이지 크기가 25로 제한됩니다. 예를 들어 클라이언트가 지난 10년간의 모든 수면 데이터를 요청하는 경우 API는 첫 페이지에 수면 세션 25개만 반환합니다. - 데이터 롤업 날짜 범위 제한: 데이터 롤업 및 집계 엔드포인트(예:
rollUp및dailyRollUp)의 경우 쿼리 날짜 범위는 데이터 유형에 따라 제한됩니다.calories-in-heart-rate-zone,heart-rate,active-minutes,total-calories의 최대 범위는 14일입니다.- 기타 모든 롤업 데이터 유형의 최대 범위는 90일입니다.
애플리케이션에 필요한 이전 데이터의 양에 따라 전체 데이터 세트를 가져오려면 페이지를 순차적으로 페이지로 나누어야 합니다. 애플리케이션의 데이터 동기화 프로세스를 설계할 때 이 점을 염두에 두세요.
최적의 성능을 보장하고 API 오류를 방지하려면 이전 데이터를 쿼리할 때 다음 가이드라인을 따르세요.
단계별 데이터 동기화 (핫 로드와 콜드 로드 비교)
- 초기 '핫' 로드: 기본 로드 시퀀스 중에 최근 7~14일의 데이터만 가져오고 렌더링합니다. 이렇게 하면 사용자가 장기 실행 쿼리를 기다리지 않고도 데이터를 즉시 볼 수 있습니다.
- 백그라운드 '콜드' 로드: 기본 UI가 렌더링된 후 이전 기록 데이터 검색을 비동기식 우선순위가 낮은 대기열 또는 백그라운드 프로세스에 위임합니다.
집계를 위한 쿼리 청킹
- 롤업 및 일일 롤업 엔드포인트는 최대 기간 제한 (데이터 유형에 따라 14일 또는 90일)을 적용하므로 이러한 제한 내에서 대규모 과거 집계 쿼리를 더 작은 순차적 간격으로 분류해야 합니다.
- 동시 실행 제한을 준수하고 안정적인 UI 진행률 표시기를 유지하기 위해 이러한 하위 쿼리를 안전하게 일괄 처리하거나 순서대로 처리합니다.
사전 집계된 롤업 활용
사전 집계된 요약 엔드포인트 (예: DailyRollUpDataPoints)를 사용하도록 개요 대시보드와 추세 차트를 재구성합니다. 이렇게 하면 백엔드의 컴퓨팅 오버헤드와 클라이언트로의 네트워크 전송 시간이 크게 줄어듭니다.
탄력적인 오류 처리 (스마트 재시도)
- 속도 제한 (
429 Too Many Requests) 및 서버 게이트웨이 시간 제한(504 Gateway Timeout)이 발생하면 엄격한 지수 백오프 처리를 구현합니다. 실패한 대규모 페이로드를 즉시 재시도하지 마세요. 즉시 재시도는 백엔드 정체를 증가시키고 시스템 저하를 악화시킵니다.
서드 파티 액세스
Fitbit 기기는 서드 파티 애플리케이션 또는 서비스와 직접 통신할 수 없습니다. 이러한 기기는 Fitbit 모바일 앱과만 통신하고 동기화하도록 설계되었습니다.
Fitbit 앱이 열려 있을 때 또는 블루투스가 활성화되어 있고 앱이 백그라운드에서 실행 중인 경우 15분마다 기기가 하루 종일 데이터를 자동으로 동기화합니다. 이 동기화 프로세스가 완료되면 Google Health API를 통해 서드 파티 서비스에서 데이터를 사용할 수 있습니다.
거리 표준
elevationGainMillimeters와 같은 운동 거리는 다음과 같은 이유로 밀리미터로 측정됩니다.
- 데이터 정밀도 유지: 밀리미터를 사용하는 가장 중요한 이유는 읽고 제공하는 데이터의 정밀도를 유지하기 위해서입니다. 밀리미터와 같은 세부적인 단위를 사용하면 측정값을 높은 정확도로 나타낼 수 있습니다.
- 표준화: 밀리미터는 Google 서비스 전반에서 설계된 표준화된 단위입니다. 이러한 일관성은 API의 여러 부분과 상호작용하는 개발자에게 균일한 환경을 제공하는 데 도움이 됩니다.
- 광범위한 측정 시스템 지원: 밀리미터와 같은 기본 단위를 사용하면 개발자가 미터법, 영국식, 기타 측정 시스템을 사용하는지 여부와 관계없이 선택한 다른 단위로 쉽게 변환할 수 있습니다.
다양한 낮 길이
Health API의 시간 처리에서는 일광 절약 시간제 또는 여행으로 인해 발생하는 가변적인 하루 길이를 고려하여 사용자의 시간을 우선시합니다. 모든 데이터 포인트는 실제 UTC 타임스탬프와 이벤트 발생 시 활성화된 UTC 오프셋을 모두 사용하여 저장됩니다. 이를 통해 시스템은 다음 작업을 할 수 있습니다.
- 이벤트를 정확한 물리적 순간에 매핑합니다.
- 집계를 위해 시간을 사용자의 현지 컨텍스트로 수정합니다.
일광절약시간
일광 절약 시간이 적용되면 '폴백'으로 인해 25시간의 민간 날짜가 발생하며 해당 날짜의 롤업에는 25시간의 데이터가 포함됩니다. '서머타임 시작'은 시간이 표준시로 돌아가는 23시간의 민간 날짜를 초래합니다.
여행
시간대를 이동하면 단일 민간일의 실제 기간이 훨씬 더 크게 달라질 수 있습니다.
dailyRollUp 엔드포인트를 사용하여 시간대 차이를 조정합니다. 사용자의 현지 시간에 따라 기록된 날짜의 데이터가 자동으로 귀속되므로 시간대 이동에도 불구하고 하루가 효과적으로 '연결'됩니다.