इस पेज पर, REST API के नियमों के बारे में खास जानकारी दी गई है. साथ ही, Google Health API के सामान्य टास्क और हर टास्क के उदाहरणों की इंडेक्स भी दी गई है.
REST API के नियम
Google Health API, Google API Improvement Proposals (AIP) के स्टैंडर्ड के मुताबिक काम करता है. खास तौर पर, AIP-127 (एचटीटीपी और gRPC ट्रांसकोडिंग) और AIP-131 से लेकर AIP-135 (स्टैंडर्ड तरीके). इन स्टैंडर्ड से यह तय होता है कि किसी प्रोटो मैसेज से एचटीटीपी अनुरोध में डेटा को कैसे मैप किया जाता है.
क्वेरी पैरामीटर
क्वेरी पैरामीटर का इस्तेमाल तब किया जाता है, जब डेटा यूआरएल का हिस्सा होता है. यह मुख्य रूप से GET अनुरोधों (किसी संसाधन को फ़ेच करना) या LIST अनुरोधों (फ़िल्टर करना/पेज नंबर डालना) के लिए है. हालांकि, इसका इस्तेमाल DELETE कार्रवाइयों के लिए भी किया जाता है.
- प्लेसमेंट: इसे यूआरएल में
?के बाद जोड़ा जाता है. - सिंटैक्स: की-वैल्यू पेयर,
&से अलग किए जाते हैं. - मैपिंग: अनुरोध मैसेज में मौजूद हर फ़ील्ड, यूआरएल पाथ टेंप्लेट का हिस्सा नहीं होता. इसे क्वेरी पैरामीटर पर मैप किया जाता है.
- सबसे सही विकल्प: सामान्य टाइप (स्ट्रिंग, पूर्णांक, enum) और दोहराए गए फ़ील्ड के लिए.
सिंटैक्स का उदाहरण:
GET https://health.googleapis.com/v4/users/me/dataTypes/data-type/dataPoints?page_size=10&filter=data_type.interval.start_time >= "2025-10-01T00:00:00Z"
अनुरोध का मुख्य भाग
अनुरोध के मुख्य हिस्से का इस्तेमाल तब किया जाता है, जब डेटा किसी संसाधन की स्थिति में बदलाव करता है या यूआरएल के लिए बहुत बड़ा होता है. बॉडी आम तौर पर, संसाधन का JSON फ़ॉर्मैट होता है. आम तौर पर, इसका इस्तेमाल POST, PATCH, और PUT के लिए किया जाता है.
- प्लेसमेंट: एचटीटीपी पेलोड में (यूआरएल में नहीं दिखता).
- सिंटैक्स: इसे JSON ऑब्जेक्ट के तौर पर फ़ॉर्मैट किया जाता है.
- मैपिंग: इसे
google.api.httpएनोटेशन में तय किया जाता है.body: "*"का मतलब है कि पूरा मैसेज ही मुख्य हिस्सा है.body: "resource_name"का मतलब है कि प्रोटो में सिर्फ़ एक फ़ील्ड, बॉडी है.
- इसके लिए सबसे सही है: मुश्किल ऑब्जेक्ट, नेस्ट किए गए मैसेज, और संवेदनशील डेटा.
सिंटैक्स का उदाहरण:
POST https://health.googleapis.com/v4/users/me/dataTypes/data-type/dataPoints:rollUp
Content-Type: application/json
{
"range": {
"startTime": "2025-11-05T00:00:00Z",
"endTime": "2025-11-13T00:00:00Z"
},
"windowSize": "3600s"
}हाइब्रिड केस
एआईपी-134 के मुताबिक Update तरीके या PATCH ऑपरेशन में, दोनों का इस्तेमाल किया जाता है.
यूआरएल में संसाधन का नाम होता है, मुख्य हिस्से में अपडेट किया गया संसाधन डेटा होता है, और क्वेरी पैरामीटर (आम तौर पर update_mask) यह तय करता है कि किन फ़ील्ड को बदलना है.
PATCH https://health.googleapis.com/v4/projects/project-id/subscribers/subscriber-id
Content-Type: application/json
{
"endpointUri": "https://myapp.com/new-webhooks/health"
}
मुख्य अंतर एक नज़र में
| सुविधा | क्वेरी पैरामीटर | अनुरोध का मुख्य भाग |
|---|---|---|
| एआईपी के दिशा-निर्देश | इस कुकी का इस्तेमाल, खोजने, फ़िल्टर करने, और पढ़ने की कार्रवाइयों के लिए किया जाता है. | इसका इस्तेमाल लिखने से जुड़ी कार्रवाइयों के लिए किया जाता है. |
| वीडियो किसको दिखे | यह ब्राउज़र के इतिहास और सर्वर लॉग में दिखता है. | यूआरएल से छिपाया गया है. |
| जटिलता | यह सुविधा, फ़्लैट या दोहराए गए स्ट्रक्चर के लिए उपलब्ध है. | यह डीपली नेस्ट किए गए JSON ऑब्जेक्ट के साथ काम करता है. |
| एन्कोडिंग | इसे यूआरएल-कोड में बदला जाना चाहिए. उदाहरण के लिए, स्पेस %20 बन जाते हैं. |
JSON के स्टैंडर्ड फ़ॉर्मैट में कोड में बदला गया. |
तारीख
Google Health API में सभी तारीखें, YYYY-MM-DD फ़ॉर्मैट में दिखती हैं. Nutrition API, तारीख की वैल्यू के लिए आईएसओ-8601 स्टैंडर्ड का इस्तेमाल करता है. हालांकि, इसके लिए ये शर्तें पूरी होनी चाहिए:
- साल, चार अंकों में
YYYY - साल की वैल्यू 0000-9999 के बीच होनी चाहिए
- ISO-8601 स्टैंडर्ड या अन्य ईपॉक के हिसाब से, शुरू होने की तारीख से जुड़ी पाबंदियों को लागू नहीं किया जाता
हेडर
Google Health API के एंडपॉइंट को लागू करने के लिए, सही हेडर और ऐक्सेस टोकन का इस्तेमाल करना ज़रूरी है. GET और POST, दोनों तरह के अनुरोधों के लिए इस हेडर का इस्तेमाल करने का सुझाव दिया जाता है:
Authorization: Bearer access-token Accept: application/json
एपीआई टास्क इंडेक्स
इस सेक्शन में, Google Health API से जुड़े सामान्य टास्क की इंडेक्स दी गई है. साथ ही, हर टास्क के उदाहरण दिए गए हैं.
Fitbit या Google का यूज़र आईडी पाना
Google OAuth 2.0 के ज़रिए उपयोगकर्ता की सहमति मिलने के बाद, टोकन रिस्पॉन्स में Fitbit या Google का उपयोगकर्ता आईडी शामिल नहीं होता. User-ID पाने के लिए, getIdentity एंडपॉइंट को कॉल करें. getIdentity
Fitbit के लेगसी वर्शन के यूज़र आईडी और Google के यूज़र आईडी, दोनों को दिखाता है.
हमारा सुझाव है कि जैसे ही कोई नया उपयोगकर्ता OAuth के ज़रिए सहमति देता है, वैसे ही getIdentity एंडपॉइंट को कॉल करें और दोनों उपयोगकर्ता आईडी सेव करें. इससे आपको इंटिग्रेशन में पुराने और नए सिस्टम के साथ काम करने की सुविधा मिलती है.
उदाहरण के लिए:
अनुरोध
GET https://health.googleapis.com/v4/users/me/identity Authorization: Bearer access-token Accept: application/json
जवाब
{
"name": "users/me/identity",
"legacyUserId": "A1B2C3",
"healthUserId": "111111256096816351"
}पूरे दिन में इकट्ठा किया गया इंट्राडे या ज़्यादा जानकारी वाला डेटा पाना
किसी खास डेटा टाइप के लिए, list एंडपॉइंट का इस्तेमाल करें. इससे आपको उस डेटा टाइप के लिए, दिन के दौरान इकट्ठा किया गया इंट्रा-डे या विस्तृत डेटा मिलेगा. यह डेटा, तय किए गए समय अंतराल के हिसाब से मिलेगा.
उदाहरण के लिए:
अनुरोध
GET https://health.googleapis.com/v4/users/me/dataTypes/steps/dataPoints Authorization: Bearer access-token Accept: application/json
जवाब
{
"dataPoints": [
{
"dataSource": {
"recordingMethod": "PASSIVELY_MEASURED",
"device": {
"manufacturer": "",
"displayName": "Charge 6"
},
"platform": "FITBIT"
},
"steps": {
"interval": {
"startTime": "2026-03-04T07:05:00Z",
"startUtcOffset": "0s",
"endTime": "2026-03-04T07:06:00Z",
"endUtcOffset": "0s",
"civilStartTime": {
"date": {
"year": 2026,
"month": 3,
"day": 4
},
"time": {
"hours": 7,
"minutes": 5
}
},
"civilEndTime": {
"date": {
"year": 2026,
"month": 3,
"day": 4
},
"time": {
"hours": 7,
"minutes": 6
}
}
},
"count": "40"
}
},
...
],
"nextPageToken": "Xm5h-6L0viZxIlRuWjx5bmvy98zj85uG34tuMn16mu2pntsnZI32iqhq"
}सिविल ट्वाइलाइट के शुरू होने के समय के हिसाब से डेटा फ़िल्टर करना
list पैरामीटर के साथ list एंडपॉइंट का इस्तेमाल करके, डेटा को सिविल टाइम या किसी इंटरवल के हिसाब से फ़िल्टर करें.filter
उदाहरण के लिए:
अनुरोध
GET https://health.googleapis.com/v4/users/me/dataTypes/steps/dataPoints?filter=steps.interval.civil_start_time >= "2026-03-04T00:00:00" Authorization: Bearer access-token Accept: application/json
जवाब
{
"dataPoints": [
{
"dataSource": {
"recordingMethod": "PASSIVELY_MEASURED",
"device": {
"manufacturer": "",
"displayName": "Charge 6"
},
"platform": "FITBIT"
},
"steps": {
"interval": {
"startTime": "2026-03-04T07:05:00Z",
"startUtcOffset": "0s",
"endTime": "2026-03-04T07:06:00Z",
"endUtcOffset": "0s",
"civilStartTime": {
"date": {
"year": 2026,
"month": 3,
"day": 4
},
"time": {
"hours": 7,
"minutes": 5
}
},
"civilEndTime": {
"date": {
"year": 2026,
"month": 3,
"day": 4
},
"time": {
"hours": 7,
"minutes": 6
}
}
},
"count": "40"
}
...
],
"nextPageToken": "Xm5h-6L0viZxIlRuQjp5bml1bZ4ve2dhNmZvMnt4Yn7qIGQhbHN3YQ"
}किसी सैंपल ऑब्ज़र्वेशन के फ़िज़िकल टाइम के हिसाब से डेटा फ़िल्टर करना
list पैरामीटर के साथ list एंडपॉइंट का इस्तेमाल करके, सैंपल के हिसाब से डेटा को फ़िल्टर करें.filter
उदाहरण के लिए:
अनुरोध
GET https://health.googleapis.com/v4/users/me/dataTypes/body-fat/dataPoints?filter=body_fat.sample_time.physical_time >= "2026-03-01T00:00:00Z" Authorization: Bearer access-token Accept: application/json
जवाब
{
"dataPoints": [
{
"name": "users/2515055256096816351/dataTypes/body-fat/dataPoints/1234567890",
"dataSource": {
"recordingMethod": "UNKNOWN",
"application": {
"packageName": "",
"webClientId": "",
"googleWebClientId": "google-web-client-id"
},
"platform": "GOOGLE_WEB_API"
},
"-->bodyFat<--": {
"sampleTime": {
"physicalTime": "2026-03-10T10:00:00Z",
"utcOffset": "0s",
"civilTime": {
"date": {
"year": 2026,
"month": 3,
"day": 10
},
"time": {
"hours": 10
}
}
},
"percentage": 20
}
}
"nextPageToken": ""
}डेटा सोर्स के हिसाब से डेटा फ़िल्टर करना. जैसे, पहनने लायक डिवाइस
किसी खास "डेटा सोर्स फ़ैमिली" का डेटा पाने के लिए, reconcile
एंडपॉइंट का इस्तेमाल करें. इसके लिए, dataSourceFamily पैरामीटर को क्वेरी पैरामीटर के तौर पर सेट करें.
नीचे दी गई टेबल में, dataSourceFamily के साथ काम करने वाले विकल्पों के बारे में बताया गया है:
| विकल्प | जानकारी |
|---|---|
users/me/dataSourceFamilies/all-sources |
डिफ़ॉल्ट मान. इसमें सभी उपलब्ध डेटा सोर्स का डेटा शामिल होता है. |
users/me/dataSourceFamilies/google-wearables |
इसमें Google और Fitbit के ट्रैकर डिवाइसों (जैसे, Fitbit ट्रैकर और Pixel Watch) का डेटा शामिल है. इसमें मैन्युअल तरीके से लॉग किया गया डेटा शामिल नहीं होता. |
users/me/dataSourceFamilies/google-sources |
इसमें Google का पहले पक्ष का डेटा शामिल होता है. जैसे, ट्रैकर डिवाइसों से मिला डेटा और मैन्युअल तरीके से लॉग किया गया डेटा. |
यहां 2026-03-03 के बाद के दिन के लिए, सिर्फ़ ट्रैकर से रिकॉर्ड की गई नींद को फ़िल्टर करने का उदाहरण दिया गया है:
अनुरोध
GET https://health.googleapis.com/v4/users/me/dataTypes/sleep/dataPoints:reconcile?dataSourceFamily=users/me/dataSourceFamilies/google-wearables&filter=sleep.interval.civil_end_time >= "2026-03-03" Authorization: Bearer access-token Accept: application/json
जवाब
{
"dataPoints": [
{
"name": "users/2515055256096816351/dataTypes/sleep/dataPoints/2724123844716220216",
"dataSource": {
"recordingMethod": "DERIVED",
"device": {
"displayName": "Charge 6"
},
"platform": "FITBIT"
},
"sleep": {
"interval": {
"startTime": "2026-03-03T20:57:30Z",
"startUtcOffset": "0s",
"endTime": "2026-03-04T04:41:30Z",
"endUtcOffset": "0s"
},
"type": "STAGES",
"stages": [
{
"startTime": "2026-03-03T20:57:30Z",
"startUtcOffset": "0s",
"endTime": "2026-03-03T20:59:30Z",
"endUtcOffset": "0s",
"type": "AWAKE",
"createTime": "2026-03-04T04:43:40.937183Z",
"updateTime": "2026-03-04T04:43:40.937183Z"
},
…
{
"startTime": "2026-03-04T04:07:30Z",
"startUtcOffset": "0s",
"endTime": "2026-03-04T04:41:30Z",
"endUtcOffset": "0s",
"type": "AWAKE",
"createTime": "2026-03-04T04:43:40.937183Z",
"updateTime": "2026-03-04T04:43:40.937183Z"
}
],
"metadata": {
"stagesStatus": "SUCCEEDED",
"processed": true,
"main": true
},
"summary": {
"minutesInSleepPeriod": "464",
"minutesAfterWakeUp": "0",
"minutesToFallAsleep": "0",
"minutesAsleep": "407",
"minutesAwake": "57",
"stagesSummary": [
{
"type": "AWAKE",
"minutes": "56",
"count": "12"
},
{
"type": "LIGHT",
"minutes": "198",
"count": "19"
},
{
"type": "DEEP",
"minutes": "114",
"count": "10"
},
{
"type": "REM",
"minutes": "94",
"count": "4"
}
]
},
"createTime": "2026-03-04T04:43:40.337983Z",
"updateTime": "2026-03-04T04:43:40.937183Z"
}
}
],
"nextPageToken": ""
}किसी समयावधि के डेटा पॉइंट को एग्रीगेट करना
rollUp
एंडपॉइंट का इस्तेमाल करके, डेटा पॉइंट के एग्रीगेट को वापस पाएं. यह एग्रीगेट, सेकंड में तय की गई विंडो पर आधारित होता है. साथ ही, यह datetime रेंज पर आधारित होता है. यह रेंज, उपयोगकर्ताओं के स्थानीय समय (यूटीसी में) के हिसाब से तय की जाती है.
rollUp एंडपॉइंट को कॉल करते समय, आपको अनुरोध का मुख्य हिस्सा देना होगा. इसमें उपयोगकर्ता के सिविल टाइम के हिसाब से, तारीख की ज़रूरी सीमा की जानकारी होनी चाहिए. उदाहरण के लिए:
अनुरोध
POST https://health.googleapis.com/v4/users/me/dataTypes/steps/dataPoints:rollUp
Authorization: Bearer access-token
Accept: application/json
{
"range": {
"startTime": "2026-02-17T17:00:00Z",
"endTime": "2026-02-17T17:59:59Z"
},
"windowSize": "30s"
}जवाब
{
"rollupDataPoints": [
{
"startTime": "2026-02-17T17:55:00Z",
"endTime": "2026-02-17T17:55:30Z",
"steps": {
"countSum": "41"
}
},
{
"startTime": "2026-02-17T17:54:00Z",
"endTime": "2026-02-17T17:54:30Z",
"steps": {
"countSum": "31"
}
},
...
]
}एक दिन या एक से ज़्यादा दिनों का एग्रीगेट किया गया डेटा
dailyRollUp
एंडपॉइंट का इस्तेमाल तब किया जाना चाहिए, जब आपको एक दिन या कई दिनों के डेटा को इकट्ठा करना हो. इसे windowSize कहा जाता है. अनुरोध के मुख्य हिस्से में, ज़रूरी समयावधि के लिए बंद-खुले समय की जानकारी दें. डेटा टाइप के आधार पर, आपको तय किए गए अंतराल के हिसाब से कुल या औसत वैल्यू मिलेगी.
उदाहरण के लिए:
अनुरोध
POST https://health.googleapis.com/v4/users/me/dataTypes/steps/dataPoints:dailyRollUp
Authorization: Bearer access-token
Accept: application/json
{
"range": {
"start": {
"date": {
"year": 2026,
"month": 2,
"day": 26
},
"time": {
"hours": 0,
"minutes": 0,
"seconds": 0,
"nanos": 0
}
},
"end": {
"date": {
"year": 2026,
"month": 2,
"day": 26
},
"time": {
"hours": 23,
"minutes": 59,
"seconds": 59,
"nanos": 0
}
}
},
"windowSizeDays": 1
}जवाब
{
"rollupDataPoints": [
{
"civilStartTime": {
"date": {
"year": 2026,
"month": 2,
"day": 26
},
"time": {}
},
"civilEndTime": {
"date": {
"year": 2026,
"month": 2,
"day": 26
},
"time": {
"hours": 23,
"minutes": 59,
"seconds": 59
}
},
"steps": {
"countSum": "3822"
}
}
]
}उपयोगकर्ता की सेहत से जुड़ा डेटा डालना या अपडेट करना
उपयोगकर्ता के Fitbit ऐप्लिकेशन के डेटा को डालने या अपडेट करने के लिए, patch
एंडपॉइंट का इस्तेमाल करें.
यहां एक उदाहरण दिया गया है, जिसमें किसी व्यक्ति ने "Scales R Us" कंपनी के "HumanScale" नाम के स्केल पर, अपने शरीर में मौजूद बॉडी फ़ैट को रिकॉर्ड किया है. उपयोगकर्ता के शरीर में वसा की नई रीडिंग 10 मार्च, 2026 को 20% है.
अनुरोध
PATCH https://health.googleapis.com/v4/users/me/dataTypes/body-fat/dataPoints/1234567890
Authorization: Bearer access-token
content-length: 329
{
"name": "bodyFatName",
"dataSource": {
"recordingMethod": "ACTIVELY_MEASURED",
"device": {
"formFactor": "SCALE",
"manufacturer": "Scales R Us",
"displayName": "HumanScale"
}
},
"bodyFat": {
"sampleTime": {
"physicalTime": "2026-03-10T10:00:00Z"
},
"percentage": 20
}
}जवाब
{
"done": true,
"response": {
"@type": "type.googleapis.com/google.devicesandservices.health.v4main.DataPoint",
"name": "users/2515055256096816351/dataTypes/body-fat/dataPoints/1234567890",
"dataSource": {
"recordingMethod": "ACTIVELY_MEASURED",
"device": {
"formFactor": "SCALE",
"manufacturer": "Scales R Us",
"displayName": "HumanScale"
},
"application": {
"googleWebClientId": "618308034039.apps.googleusercontent.com"
},
"platform": "GOOGLE_WEB_API"
},
"bodyFat": {
"sampleTime": {
"physicalTime": "2026-03-10T10:00:00Z"
},
"percentage": 20
}
}
}खाने का कोई आइटम लॉग करना
किसी खाने-पीने की चीज़ का डेटा लॉग करने के लिए, nutrition-log डेटा पॉइंट एंडपॉइंट को POST अनुरोध भेजें. अनुरोध के मुख्य हिस्से में, nutritionLog ऑब्जेक्ट वाला DataPoint शामिल होता है.
ज़्यादा जानकारी के लिए, पोषण गाइड देखें.
उदाहरण के लिए:
अनुरोध
POST https://health.googleapis.com/v4/users/me/dataTypes/nutrition-log/dataPoints
Authorization: Bearer access-token
Content-Type: application/json
{
"nutritionLog": {
"interval": {
"startTime": "2026-06-16T12:00:00Z",
"endTime": "2026-06-16T12:30:00Z"
},
"foodDisplayName": "Banana",
"mealType": "LUNCH",
"energy": {
"kcal": 105
},
"totalCarbohydrate": {
"grams": 27
},
"totalFat": {
"grams": 0.3
}
}
}जवाब
{
"done": true,
"response": {
"@type": "type.googleapis.com/google.devicesandservices.health.v4.DataPoint",
"name": "users/2515055256096816351/dataTypes/nutrition-log/dataPoints/567890",
"dataSource": {
"recordingMethod": "ACTIVELY_MEASURED",
"platform": "GOOGLE_WEB_API"
},
"nutritionLog": {
"interval": {
"startTime": "2026-06-16T12:00:00Z",
"startUtcOffset": "0s",
"endTime": "2026-06-16T12:30:00Z",
"endUtcOffset": "0s"
},
"energy": {
"kcal": 105
},
"totalCarbohydrate": {
"grams": 27
},
"totalFat": {
"grams": 0.3
},
"mealType": "LUNCH",
"foodDisplayName": "Banana"
}
}
}उपयोगकर्ता का सेहत का डेटा मिटाना
उपयोगकर्ता के Fitbit ऐप्लिकेशन के डेटा की एक ऐरे को मिटाने के लिए, batchDelete
एंडपॉइंट का इस्तेमाल करें.
यहां एक उदाहरण दिया गया है. इसमें किसी व्यक्ति ने पहले स्केल पर अपने बॉडी फ़ैट का डेटा रिकॉर्ड किया था, लेकिन अब उसे यह रिकॉर्ड मिटाना है. मांसपेशियों के शुरुआती और आखिरी छोर और गतिविधि की ओरिजनल जानकारी से user-id और data-point-id का इस्तेमाल करना:
अनुरोध
POST https://health.googleapis.com/v4/users/me/dataTypes/body-fat/dataPoints:batchDelete
Authorization: Bearer access-token
Accept: application/json
content-length: 93
{
"names": [
"users/2515055256096816351/dataTypes/body-fat/dataPoints/1234567890"
]
}जवाब
{
"done": true,
"response": {
"@type": "type.googleapis.com/google.devicesandservices.health.v4main.BatchDeleteDataPointsResponse"
}
}डिवाइस की जानकारी ढूंढना
किसी उपयोगकर्ता के खाते से जुड़े डिवाइसों की सूची पाने के लिए, list एंडपॉइंट का इस्तेमाल करें. इसमें डिवाइस के मॉडल की जानकारी (deviceVersion) और Google Health मोबाइल ऐप्लिकेशन के साथ आखिरी बार सिंक होने की जानकारी (lastSyncTime) शामिल है.
सूची के कॉन्फ़िगरेशन और सिंक करने की जानकारी से, सिंक करने से जुड़ी समस्याओं को हल करने में मदद मिलती है. साथ ही, पिछली बार सिंक करने के समय से लेकर अब तक का डेटा फ़ेच करने में भी मदद मिलती है.
उदाहरण के लिए:
अनुरोध
GET https://health.googleapis.com/v4/users/me/pairedDevices Authorization: Bearer access-token Accept: application/json
जवाब
{
"pairedDevices": [
{
"name": "users/me/pairedDevices/123456",
"deviceType": "TRACKER",
"batteryStatus": "High",
"batteryLevel": 88,
"lastSyncTime": "2026-03-04T07:05:00Z",
"deviceVersion": "Charge 6",
"macAddress": "00:11:22:33:44:55",
"features": [
"STEPS",
"HEART_RATE"
]
}
]
}पुराने डेटा के बारे में क्वेरी करना
Google Health API का एक मुख्य फ़ायदा यह है कि इससे किसी व्यक्ति की परफ़ॉर्मेंस को ट्रैक किया जा सकता है. साथ ही, लंबे समय तक उसकी सेहत से जुड़ी ज़रूरी जानकारी पर नज़र रखी जा सकती है. उपयोगकर्ता के डेटा को तब तक क्वेरी किया जा सकता है, जब तक उसे रिकॉर्ड किया गया है. एपीआई, आपके ऐप्लिकेशन के इस्तेमाल किए जा सकने वाले पुराने डेटा की मात्रा पर कोई सीमा या पाबंदी नहीं लगाता है.
हालांकि, पुराने डेटा के लिए क्वेरी करने पर, अब भी स्टैंडर्ड रेट लिमिट लागू होती हैं. इन सीमाओं के हिसाब से एपीआई कॉल की संख्या कम करने के लिए, Google Health API किसी तारीख की सीमा के हिसाब से डेटा का अनुरोध करने की सुविधा देता है. पेज नंबर के हिसाब से डेटा बांटने और अनुरोध की सीमाओं के बारे में यहां दी गई जानकारी पढ़ें:
- हर एंडपॉइंट, हर पेज पर ज़्यादा से ज़्यादा 10,000 डेटा पॉइंट दिखाता है.
- क्वेरी के लिए तारीख की सीमा, हर अनुरोध के लिए 14 से 90 दिनों के बीच होनी चाहिए.
आपके ऐप्लिकेशन को जितने पुराने डेटा की ज़रूरत होती है उसके हिसाब से, पूरे डेटासेट को वापस पाने के लिए, क्रम से कई अनुरोध करने पड़ सकते हैं. इसमें ज़्यादा समय भी लग सकता है. अपने ऐप्लिकेशन के डेटा को सिंक करने की प्रोसेस डिज़ाइन करते समय, इस बात का ध्यान रखें.
बेहतर परफ़ॉर्मेंस पाने और एपीआई से जुड़ी गड़बड़ियों से बचने के लिए, पुराने डेटा को क्वेरी करते समय इन दिशा-निर्देशों का पालन करें:
फ़ेज़ के हिसाब से डेटा सिंक करना (हॉट वर्सेस कोल्ड लोड)
- शुरुआती "हॉट" लोड: प्राइमरी लोड सीक्वेंस के दौरान, सिर्फ़ पिछले 7 से 14 दिनों का डेटा फ़ेच और रेंडर करें. इससे यह पक्का होता है कि उपयोगकर्ताओं को डेटा तुरंत दिखे. उन्हें लंबी अवधि तक चलने वाली क्वेरी के लिए इंतज़ार न करना पड़े.
- बैकग्राउंड में "कोल्ड" लोड: प्राइमरी यूज़र इंटरफ़ेस (यूआई) रेंडर होने के बाद, पुराने डेटा को एसिंक्रोनस, कम प्राथमिकता वाली कतार या बैकग्राउंड प्रोसेस में भेजें.
समय के आधार पर क्वेरी को हिस्सों में बांटना
- एक ही एपीआई कॉल में, कई सालों या कई महीनों के डेटा का अनुरोध न करें. पुरानी क्वेरी को छोटे-छोटे हिस्सों में बांटें और उन्हें क्रम से लगाएं. उदाहरण के लिए, हर अनुरोध के लिए एक हफ़्ते का डेटा.
- इन सब-क्वेरी को बैच या क्रम में सुरक्षित तरीके से रखें, ताकि एक साथ कई अनुरोध करने की सीमा का पालन किया जा सके और यूज़र इंटरफ़ेस (यूआई) पर प्रोग्रेस इंडिकेटर को स्थिर रखा जा सके.
पहले से एग्रीगेट किए गए रोल-अप का फ़ायदा उठाना
खास जानकारी वाले डैशबोर्ड और रुझान चार्ट को फिर से व्यवस्थित करें, ताकि पहले से एग्रीगेट किए गए डेटा और खास जानकारी वाले एंडपॉइंट (जैसे, DailyRollUpDataPoints) का इस्तेमाल किया जा सके. इससे बैकएंड पर कंप्यूटिंग का ओवरहेड और क्लाइंट को डेटा ट्रांसफ़र करने में लगने वाला समय काफ़ी कम हो जाएगा.
गड़बड़ी ठीक करने की बेहतर सुविधा (स्मार्ट तरीके से फिर से कोशिश करना)
- जब दर की सीमाएं (
429 Too Many Requests) और सर्वर गेटवे टाइमआउट (504 Gateway Timeout) की समस्याएं आएं, तो स्ट्रिक्ट एक्सपोनेंशियल बैकऑफ़ हैंडलिंग लागू करें. बड़े और फ़ेल हो चुके पेलोड को तुरंत फिर से भेजने की कोशिश न करें. तुरंत फिर से कोशिश करने से, बैकएंड में ज़्यादा ट्रैफ़िक आता है और सिस्टम की परफ़ॉर्मेंस खराब हो जाती है. - अगर कोई क्वेरी बार-बार टाइम आउट हो जाती है, तो अपने-आप छोटी टाइम विंडो पर वापस आ जाएं. उदाहरण के लिए, एक हफ़्ते के डेटा को तीन दिन के डेटा में बदल दें.