Google Health API की मदद से, आपका ऐप्लिकेशन रीयल-टाइम में सूचनाएं पा सकता है. ये सूचनाएं तब मिलती हैं, जब उपयोगकर्ता के सेहत के डेटा में कोई बदलाव होता है. बदलावों के लिए पोल करने के बजाय, आपका सर्वर एक एचटीटीपीएस पोस्ट अनुरोध (वेबहुक){:target="_blank" class="external"} पाता है. यह अनुरोध तब मिलता है, जब Google Health API में डेटा उपलब्ध होता है.
डेटा टाइप, जो इस्तेमाल किए जा सकते हैं
वेबहुक सूचनाएं, इन डेटा टाइप के लिए उपलब्ध हैं:
- ऐक्टिव ज़ोन मिनट
- ऐक्टिविटी लेवल
- ऊंचाई
- ब्लड ग्लूकोज़
- बॉडी फ़ैट
- धड़कन की दर वाले ज़ोन में बर्न हुई कैलोरी
- रोज़ाना की धड़कन की दर में उतार-चढ़ाव
- रोज़ाना की धड़कन की दर वाले ज़ोन
- रोज़ाना ऑक्सीजन की मात्रा
- रोज़ाना सांस की दर
- रोज़ाना आराम करते समय धड़कन की दर
- रोज़ाना सोते समय त्वचा के तापमान में बदलाव
- दूरी
- कसरत
- फ़्लोर
- धड़कन की दर
- धड़कन की दर में उतार-चढ़ाव
- ऊंचाई
- हाइड्रेशन लॉग
- पोषण लॉग
- सोते समय सांस की दर की खास जानकारी
- दौड़ने के दौरान का VO2 मैक्स
- एक ही जगह पर बैठे या लेटे रहने की अवधि
- नींद
- कदम
- धड़कन की दर वाले ज़ोन में बिताया गया समय
- वज़न
इन डेटा टाइप के लिए सूचनाएं सिर्फ़ तब भेजी जाती हैं, जब किसी उपयोगकर्ता ने इनसे जुड़े किसी स्कोप के लिए सहमति दी हो:
- ऐक्टिविटी, जिसमें कदम, ऊंचाई, दूरी, और फ़्लोर के डेटा टाइप शामिल हैं:
https://www.googleapis.com/auth/googlehealth.activity_and_fitness.readonlyhttps://www.googleapis.com/auth/googlehealth.activity_and_fitness.writeonly
- स्वास्थ्य से जुड़ी मेट्रिक, जिसमें वज़न का डेटा टाइप शामिल है:
https://www.googleapis.com/auth/googlehealth.health_metrics_and_measurements.readonlyhttps://www.googleapis.com/auth/googlehealth.health_metrics_and_measurements.writeonly
- नींद, जिसमें नींद का डेटा टाइप शामिल है:
https://www.googleapis.com/auth/googlehealth.sleep.readonlyhttps://www.googleapis.com/auth/googlehealth.sleep.writeonly
आईएएम सेवा खाते
Google Health API के लिए सदस्यों को कॉन्फ़िगर करते समय, आईएएम सेवा खाते का इस्तेमाल करना ज़रूरी नहीं है. हालांकि, हमारा सुझाव है कि आप इसका इस्तेमाल करें. सेवा खाते, सामान्य उपयोगकर्ता खातों की तुलना में ऐप्लिकेशन के वर्कलोड के लिए बेहतर सुरक्षा देते हैं. ऐसा इन सुविधाओं की वजह से होता है:
- कम समय के लिए मान्य क्रेडेंशियल अपने-आप जनरेट होना: सेवा खाते, Google Cloud के किसी एक्ज़ीक्यूशन एनवायरमेंट (जैसे, Compute Engine, Cloud Run या Google Kubernetes Engine) से कनेक्ट होने पर, सुरक्षित और कम समय के लिए मान्य क्रेडेंशियल अपने-आप हासिल कर लेते हैं और उन्हें रोटेट करते रहते हैं. इससे, स्थायी स्टैटिक कुंजियों को मैनेज करने और सेव करने का जोखिम खत्म हो जाता है.
- कम से कम विशेषाधिकार का सिद्धांत: सेवा खाते, वर्कलोड के लिए अलग-अलग आइडेंटिटी उपलब्ध कराते हैं. इन्हें सिर्फ़ वे अनुमतियां दी जा सकती हैं जिनकी ज़रूरत, सदस्य के एंडपॉइंट को मैनेज करने के लिए होती है. इससे, Google Cloud के संसाधनों का ऐक्सेस सीमित हो जाता है.
- लाइफ़साइकल की स्वतंत्रता: सेवा खाते, किसी भी उपयोगकर्ता के खाते से अलग काम करते हैं. इससे यह पक्का होता है कि कर्मचारियों के बदलने से, लंबे समय तक पुष्टि करने की प्रोसेस पर कोई असर न पड़े.
सेवा खाता सेट अप करना
किसी सेवा खाते का इस्तेमाल करके पुष्टि करने के लिए, अपने सदस्य ऐप्लिकेशन को कॉन्फ़िगर करने का तरीका:
- सेवा खाता बनाना: Google Cloud Console में, अपने प्रोजेक्ट के आईएएम और एडमिन पेज पर जाएं. यहां, उपयोगकर्ता के मैनेज किए जाने वाले नए सेवा खाते को बनाया जा सकता है.
- ज़रूरी आईएएम भूमिकाएं देना: सेवा खाते को वे भूमिकाएं असाem करें जिनकी ज़रूरत, Google Cloud प्रोजेक्ट पर सदस्यों को मैनेज करने के लिए होती है.
- अपने वर्कलोड से सेवा खाता जोड़ना: अपने सदस्य लॉजिक को होस्ट करने वाले एनवायरमेंट को, नए सेवा खाते के तौर पर चलाने के लिए कॉन्फ़िगर करें.
इससे, आपका ऐप्लिकेशन कोड (जैसे, Google API क्लाइंट लाइब्रेरी),
projects.subscribersREST API को कॉल करते समय, सेवा खाते के कम समय के लिए मान्य क्रेडेंशियल को अपने-आप पहचान लेता है और उनका इस्तेमाल करता है.
सीपीई की भूमिकाएं
Google Health API के सदस्यों या सदस्यताओं को मैनेज करने के लिए, आपको एपीआई कॉल करने वाले, इंपर्सनेट किए गए सेवा खाते को सही भूमिका देनी होगी. ज़रूरत के हिसाब से, इनमें से कोई एक भूमिका असाइन करें:
- Google Health API को पढ़ने की अनुमति
- Google Health API में बदलाव करने की अनुमति
- Google Health API के एडमिन की भूमिका
Google Health API की आईएएम भूमिकाओं और अनुमतियों के बारे में ज़्यादा जानें.
सदस्यों को मैनेज करना
सूचनाएं पाने के लिए, आपको किसी सदस्य को रजिस्टर करना होगा. यह सदस्य, आपके ऐप्लिकेशन के सूचना एंडपॉइंट को दिखाता है. सदस्यों को मैनेज करने के लिए,
REST API का इस्तेमाल किया जा सकता है. यह API
projects.subscribers पर उपलब्ध है.
आपके सदस्य एंडपॉइंट को एचटीटीपीएस (TLSv1.2+) का इस्तेमाल करना होगा. साथ ही, यह सार्वजनिक तौर पर ऐक्सेस किया जा सकता है.
सदस्य बनाने और अपडेट करने के दौरान, Google Health API, पुष्टि करने की चुनौती देता है. इससे यह पक्का किया जाता है कि आपके पास एंडपॉइंट यूआरआई का मालिकाना हक है. अगर पुष्टि नहीं हो पाती है, तो सदस्य बनाने और अपडेट करने की कार्रवाइयां, FailedPreconditionException के साथ पूरी नहीं हो पाती हैं.
सदस्य बनाना
अपने प्रोजेक्ट के लिए नया सदस्य रजिस्टर करने के लिए, create
एंडपॉइंट का इस्तेमाल करें. आपको यह जानकारी देनी होगी:
project-id: वह प्रोजेक्ट नंबर जहां वेबहुक सेवा खाता बनाया गया था.subscriberId: एक यूनीक आइडेंटिफ़ायर, जो सदस्य के लिए आपने दिया है. यह आईडी, 4 से 36 वर्णों का होना चाहिए. साथ ही, यह रेगुलर एक्सप्रेशन ([a-z]([a-z0-9-]{2,34}[a-z0-9])) से मेल खाना चाहिए.endpointUri: वेबहुक सूचनाओं के लिए डेस्टिनेशन यूआरएल.subscriberConfigs: वे डेटा टाइप जिनके लिए आपको सूचनाएं चाहिए. साथ ही, हर डेटा टाइप के लिए सदस्यता की नीति.endpointAuthorization: आपके एंडपॉइंट के लिए ऑथराइज़ेशन का तरीका. इसमें, आपके दिए गएsecretकी जानकारी होनी चाहिए.secretकी वैल्यू, हर सूचना मैसेज के साथAuthorizationहेडर में भेजी जाती है. इस टोकन का इस्तेमाल करके, यह पुष्टि की जा सकती है कि आने वाले अनुरोध, Google Health API से हैं. उदाहरण के लिए, Bearer ऑथेंटिकेशन के लिएsecretकोBearer R4nd0m5tr1ng123या Basic ऑथेंटिकेशन के लिएBasic dXNlcjpwYXNzd29yZA==पर सेट किया जा सकता है.
subscriberConfigs में, आपको हर डेटा टाइप के लिए subscriptionCreatePolicy सेट करनी होगी. ऑटोमैटिक सदस्यताओं का इस्तेमाल करने के लिए, इसे AUTOMATIC पर सेट करें. अगर आपको उपयोगकर्ता की सदस्यताओं को खुद मैनेज करना है, तो इसे MANUAL पर सेट करें. हर विकल्प के बारे में ज़्यादा जानने के लिए,
ऑटोमैटिक सदस्यताएं और
मैन्युअल सदस्यताएं देखें.
अनुरोध
POST https://health.googleapis.com/v4/projects/project-id/subscribers?subscriberId=subscriber-id
{
"endpointUri": "https://myapp.com/webhooks/health",
"subscriberConfigs": [
{
"dataTypes": ["steps", "altitude", "distance", "floors", "weight"],
"subscriptionCreatePolicy": "AUTOMATIC"
},
{
"dataTypes": ["sleep"],
"subscriptionCreatePolicy": "MANUAL"
}
],
"endpointAuthorization": {
"secret": "Bearer example-secret-token"
}
}जवाब
{
"name": "projects/project-id/subscribers/subscriber-id",
"endpointUri": "https://myapp.com/webhooks/health",
"subscriberConfigs": [
{
"dataTypes": ["steps", "altitude", "distance", "floors", "weight"],
"subscriptionCreatePolicy": "AUTOMATIC"
},
{
"dataTypes": ["sleep"],
"subscriptionCreatePolicy": "MANUAL"
}
]
}सदस्यों की सूची
अपने प्रोजेक्ट के लिए रजिस्टर किए गए सभी सदस्यों को वापस पाने के लिए, list एंडपॉइंट
का इस्तेमाल करें.
अनुरोध
GET https://health.googleapis.com/v4/projects/project-id/subscribers
जवाब
{
"subscribers": [
{
"name": "projects/project-id/subscribers/subscriber-id",
"endpointUri": "https://myapp.com/webhooks/health",
"subscriberConfigs": [
{
"dataTypes": ["steps", "altitude", "distance", "floors", "weight"],
"subscriptionCreatePolicy": "AUTOMATIC"
},
{
"dataTypes": ["sleep"],
"subscriptionCreatePolicy": "MANUAL"
}
],
"endpointAuthorization": {
"authorizationTokenSet": true
}
}
],
"totalSize": 1
}सदस्यता अपडेट करना
अपने प्रोजेक्ट में किसी सदस्य को अपडेट करने के लिए, patch एंडपॉइंट
का इस्तेमाल करें. endpointUri, subscriberConfigs, और endpointAuthorization फ़ील्ड को अपडेट किया जा सकता है.
updateMask क्वेरी पैरामीटर और अनुरोध का मुख्य हिस्सा देकर, फ़ील्ड अपडेट किए जा सकते हैं. updateMask में, उन फ़ील्ड के नामों की कॉमा लगाकर अलग की गई लिस्ट होनी चाहिए जिन्हें आपको अपडेट करना है. इसके लिए, फ़ील्ड के नामों के लिए कैमल केस का इस्तेमाल करें. उदाहरण के लिए, endpointUri. अनुरोध के मुख्य हिस्से में, सदस्य ऑब्जेक्ट का वह हिस्सा होना चाहिए जिसमें उन फ़ील्ड की नई वैल्यू शामिल हों जिन्हें आपको अपडेट करना है. सिर्फ़ updateMask में बताए गए फ़ील्ड अपडेट किए जाते हैं. अगर अनुरोध के मुख्य हिस्से में ऐसे फ़ील्ड शामिल किए जाते हैं जो updateMask में नहीं हैं, तो उन्हें अनदेखा कर दिया जाता है.
अगर endpointUri या endpointAuthorization को अपडेट किया जाता है, तो एंडपॉइंट की पुष्टि की जाती है. ज़्यादा जानकारी के लिए, एंडपॉइंट की पुष्टि देखें.
subscriberConfigs को अपडेट करते समय, ध्यान दें कि यह पूरी तरह से बदलता है, न कि
मर्ज होता है. अगर subscriberConfigs, updateMask में शामिल है, तो उस सदस्य के लिए सेव किए गए सभी कॉन्फ़िगरेशन, अनुरोध के मुख्य हिस्से में दी गई सूची से बदल दिए जाते हैं. किसी कॉन्फ़िगरेशन को जोड़ने या हटाने के लिए, आपको कॉन्फ़िगरेशन का पूरा सेट देना होगा. अगर आपको दूसरे फ़ील्ड अपडेट करने हैं और मौजूदा कॉन्फ़िगरेशन को बनाए रखना है, तो updateMask से subscriberConfigs को हटा दें.
अनुरोध
PATCH https://health.googleapis.com/v4/projects/project-id/subscribers/subscriber-id?updateMask=endpointUri
{
"endpointUri": "https://myapp.com/new-webhooks/health"
}जवाब
{
"name": "projects/project-id/subscribers/subscriber-id",
"endpointUri": "https://myapp.com/new-webhooks/health",
"subscriberConfigs": [
{
"dataTypes": ["steps", "altitude", "distance", "floors", "weight"],
"subscriptionCreatePolicy": "AUTOMATIC"
},
{
"dataTypes": ["sleep"],
"subscriptionCreatePolicy": "MANUAL"
}
]
}सदस्यता मिटाना
अपने प्रोजेक्ट से किसी सदस्य को हटाने के लिए, delete
एंडपॉइंट का इस्तेमाल करें. सदस्यता मिटाने के बाद, सदस्य को सूचनाएं नहीं मिलेंगी.
अनुरोध
DELETE https://health.googleapis.com/v4/projects/project-id/subscribers/subscriber-id
जवाब
अगर सदस्यता मिटाने की प्रोसेस पूरी हो जाती है, तो जवाब के मुख्य हिस्से में कुछ नहीं होता. साथ ही, एचटीटीपी स्टेटस `200 OK` दिखता है.{}एंडपॉइंट की पुष्टि
सूचनाएं सुरक्षित और भरोसेमंद तरीके से डिलीवर हों, इसके लिए Google Health API, दो चरणों में पुष्टि करने की प्रोसेस पूरी करता है. यह प्रोसेस, सदस्य बनाने या उसके एंडपॉइंट कॉन्फ़िगरेशन (endpointUri या endpointAuthorization) को अपडेट करने पर, हर बार पूरी की जाती है. यह प्रोसेस, एपीआई कॉल के दौरान सिंक्रोनस तरीके से पूरी की जाती है. सेवा, आपके एंडपॉइंट यूआरआई पर दो ऑटोमेटेड पोस्ट अनुरोध भेजती है.
इसके लिए, User-Agent Google-Health-API-Webhooks-Verifier का इस्तेमाल किया जाता है. साथ ही, JSON के मुख्य हिस्से में
{"type": "verification"} शामिल होता है.
- ऑथराइज़्ड हैंडशेक: पहला अनुरोध, आपके कॉन्फ़िगर किए गए
Authorizationहेडर के साथ भेजा जाता है. आपके सर्वर को200 OKया201 Createdस्टेटस के साथ जवाब देना होगा. - अनधिकृत चुनौती: दूसरा अनुरोध, क्रेडेंशियल के बिना भेजा जाता है.
आपके सर्वर को
401 Unauthorizedया403 Forbiddenस्टेटस के साथ जवाब देना होगा.
इस हैंडशेक से पुष्टि होती है कि आपका एंडपॉइंट चालू है और सुरक्षा से जुड़े नियमों का सही तरीके से पालन कर रहा है. अगर इनमें से कोई भी चरण पूरा नहीं होता है, तो एपीआई अनुरोध, FAILED_PRECONDITION गड़बड़ी के साथ पूरा नहीं हो पाता. इस हैंडशेक के पूरा होने के बाद ही, आपका सदस्य सेव होता है और सेहत का डेटा सूचनाएं पाने के लिए चालू होता है.
डेटा सुरक्षित करने वाली कुंजी का नया वर्शन बनाना
अगर आपको endpointAuthorization के लिए कुंजियों का नया वर्शन बनाना है, तो यह तरीका अपनाएं:
- अपने एंडपॉइंट को,
endpointAuthorizationकी पुरानी और नई, दोनों वैल्यू स्वीकार करने के लिए कॉन्फ़िगर करें. - सदस्य के कॉन्फ़िगरेशन को नई
endpointAuthorizationवैल्यू के साथ अपडेट करें. इसके लिए,patchअनुरोध का इस्तेमाल करें?updateMask=endpointAuthorization. - दूसरे चरण के पूरा होने की पुष्टि करने के बाद, अपने एंडपॉइंट को
endpointAuthorizationकी सिर्फ़ नई वैल्यू स्वीकार करने के लिए कॉन्फ़िगर करें.
उपयोगकर्ता की सदस्यताएं
Google Health API, उपयोगकर्ता की सदस्यताओं को आसानी से मैनेज करने में आपकी मदद करता है. इससे, उपयोगकर्ता के ऑनबोर्डिंग के दौरान, मैन्युअल तरीके से रजिस्ट्रेशन करने की ज़रूरत कम हो जाती है.
ऑटोमैटिक सदस्यताएं
हमारा सुझाव है कि आप ऑटोमैटिक सदस्यताओं का इस्तेमाल करें. इस सुविधा को चालू करने के लिए, खास डेटा टाइप के लिए अपने subscriberConfigs में subscriptionCreatePolicy को AUTOMATIC पर सेट करें. AUTOMATIC नीति के साथ बताए गए dataTypes, वही डेटा टाइप होते हैं जिनके लिए Google Health API सूचनाएं भेजता है. हालांकि, इसके लिए यह ज़रूरी है कि उपयोगकर्ता ने उन डेटा टाइप के लिए सहमति दी हो.
जब कोई उपयोगकर्ता, AUTOMATIC नीति वाले डेटा टाइप से जुड़े स्कोप के लिए ऐप्लिकेशन को सहमति देता है, तो Google Health API, उपयोगकर्ता की सहमति वाले डेटा टाइप और उस उपयोगकर्ता के लिए ऑटोमैटिक सदस्य कॉन्फ़िगरेशन वाले डेटा टाइप के इंटरसेक्शन से मिलने वाले डेटा टाइप को अपने-आप ट्रैक करता है और उनकी सूचनाएं भेजता है. इसके बाद, जब भी वह उपयोगकर्ता उन टाइप के लिए नया डेटा जनरेट करता है, तो सूचनाएं आपके एंडपॉइंट पर भेजी जाती हैं. यह सुविधा, उन उपयोगकर्ताओं के लिए काम करती है जो सदस्य बनाने से पहले या बाद में सहमति देते हैं. सदस्य बनाने से पहले जनरेट किए गए डेटा के लिए, सूचनाएं बैकफ़िल नहीं की जाती हैं.
अगर कोई उपयोगकर्ता सहमति वापस लेता है, तो उससे जुड़े डेटा टाइप के लिए सूचनाएं मिलनी बंद हो जाएंगी. ऑटोमैटिक सदस्यताओं को Google मैनेज करता है. इन्हें अलग-अलग सूची में शामिल नहीं किया जा सकता या मिटाया नहीं जा सकता. इन्हें सिर्फ़ तब हटाया जाता है, जब पैरंट सदस्य को मिटाया जाता है.
मैन्युअल सदस्यताएं
अगर आपका सदस्य, खास डेटा टाइप के लिए मैन्युअल subscription_create_policy के साथ कॉन्फ़िगर किया गया है, तो आपको हर उपयोगकर्ता के लिए सदस्यताओं को साफ़ तौर पर बनाना और मैनेज करना होगा. सदस्यता, डेटा टाइप के तय सेट के लिए, किसी खास उपयोगकर्ता को आपके सदस्य एंडपॉइंट से लिंक करती है. डेवलपर, इन कामों के लिए खास एपीआई का इस्तेमाल कर सकते हैं:
- हर
healthUserIdके लिए (मैन्युअल) सदस्यताएं बनाना - किसी खास उपयोगकर्ता के लिए नई सदस्यता बनाता है. इस तरीके के लिए, ज़रूरी है कि सदस्य के पास अनुरोध किए गए डेटा टाइप के लिएSubscriptionCreatePolicyकोMANUALपर सेट किया गया हो. - (मैन्युअल) सदस्यता अपडेट करना - किसी मौजूदा उपयोगकर्ता की सदस्यता के लिए डेटा टाइप अपडेट करता है.
- (मैन्युअल) सदस्यता मिटाना - किसी खास उपयोगकर्ता की सदस्यता मिटाता है. सदस्यता मिटाने के बाद, आपके सदस्य एंडपॉइंट को इस उपयोगकर्ता के लिए, जुड़े डेटा टाइप के लिए सूचनाएं नहीं मिलेंगी.
- (मैन्युअल) सदस्यताओं की सूची देखना - किसी दिए गए सदस्य के लिए, चालू सभी सदस्यताओं की सूची दिखाता है. उपयोगकर्ता या डेटा टाइप के हिसाब से, नतीजों को फ़िल्टर किया जा सकता है.
सूचनाएं
जब किसी सदस्य डेटा टाइप के लिए उपयोगकर्ता का डेटा बदलता है, तो Google Health API, सदस्य एंडपॉइंट यूआरएल पर एक एचटीटीपीएस पोस्ट अनुरोध भेजता है.
सूचना का फ़ॉर्मैट
सूचना का पेलोड, एक JSON ऑब्जेक्ट होता है. इसमें डेटा में हुए बदलाव के बारे में जानकारी होती है. इसमें उपयोगकर्ता आईडी, डेटा टाइप, और समय के इंटरवल शामिल होते हैं. इनका इस्तेमाल, अपडेट किए गए डेटा के बारे में क्वेरी करने के लिए किया जा सकता है.
{
"data": {
"version": "1",
"clientProvidedSubscriptionName": "subscription-name",
"healthUserId": "health-user-id",
"operation": "UPSERT",
"dataType": "steps",
"intervals": [
{
"physicalTimeInterval": {
"startTime": "2026-03-08T01:29:00Z",
"endTime": "2026-03-08T01:34:00Z"
},
"civilDateTimeInterval": {
"startDateTime": {
"date": {
"year": 2026,
"month": 3,
"day": 7
},
"time": {
"hours": 17,
"minutes": 29
}
},
"endDateTime": {
"date": {
"year": 2026,
"month": 3,
"day": 7
},
"time": {
"hours": 17,
"minutes": 34
}
}
},
"civilIso8601TimeInterval": {
"startTime": "2026-03-07T17:29:00",
"endTime": "2026-03-07T17:34:00"
}
}
]
}
}
operation फ़ील्ड, उस बदलाव के टाइप को दिखाता है जिसकी वजह से सूचना मिली है:
UPSERT: डेटा जोड़ने या उसमें बदलाव करने पर भेजा जाता है.DELETE: उपयोगकर्ता के डेटा मिटाने पर भेजा जाता है.
हमारा सुझाव है कि सूचना को मैनेज करने के लॉजिक को आइडमपोटेंट बनाएं. खास तौर पर, UPSERT कार्रवाइयों के लिए, क्योंकि दोबारा कोशिश करने पर डुप्लीकेट सूचनाएं भेजी जा सकती हैं.
clientProvidedSubscriptionName फ़ील्ड, एक यूनीक आइडेंटिफ़ायर है. MANUAL नीति वाली सदस्यताओं के लिए, इस फ़ील्ड में डेवलपर की ओर से दिया गया, स्थायी सदस्यता का नाम शामिल होता है. यह नाम, सदस्यता बनाते समय बताया जाता है.
इससे, मैन्युअल सदस्यताओं को मैनेज करने के लिए एक स्थायी आईडी मिलता है. AUTOMATIC नीति वाली सदस्यताओं के लिए, Google Health API, हर सूचना के लिए इस फ़ील्ड में एक यूनीक आइडेंटिफ़ायर (रैंडम यूयूआईडी) अपने-आप जनरेट करता है और असाइन करता है. मैन्युअल और ऑटोमैटिक, दोनों नीतियों के लिए clientProvidedSubscriptionName को शामिल करने से, सभी तरह की सदस्यताओं के लिए सूचना के पेलोड का फ़ॉर्मैट एक जैसा रहता है.
healthUserId, उस उपयोगकर्ता के लिए Google Health API का आइडेंटिफ़ायर है जिसका डेटा बदला है. अगर आपका ऐप्लिकेशन एक से ज़्यादा उपयोगकर्ताओं के लिए काम करता है, तो आपको उस उपयोगकर्ता के लिए सूचनाएं मिल सकती हैं जिसने आपके ऐप्लिकेशन को सहमति दी है. सूचना मिलने पर, healthUserId का इस्तेमाल करके यह पता करें कि किस उपयोगकर्ता का डेटा बदला है. इससे, उसके डेटा के बारे में क्वेरी करने के लिए, उसके OAuth क्रेडेंशियल का इस्तेमाल किया जा सकता है.
किसी उपयोगकर्ता के OAuth क्रेडेंशियल को उनके healthUserId से मैप करने के लिए, getIdentity एंडपॉइंट का इस्तेमाल करें. उपयोगकर्ता के ऑनबोर्डिंग के दौरान, उसके क्रेडेंशियल के साथ इस एंडपॉइंट को कॉल करें, ताकि उसका healthUserId वापस पाया जा सके. इसके बाद, इस मैपिंग को सेव करें. यह मैपिंग समय के साथ नहीं बदलती है. इसलिए, इसे हमेशा के लिए कैश किया जा सकता है. उदाहरण के लिए, उपयोगकर्ता आईडी पाना देखें. इससे, सूचना में मौजूद healthUserId के आधार पर डेटा के बारे में क्वेरी करते समय, सही उपयोगकर्ता क्रेडेंशियल चुने जा सकते हैं.
किसी सूचना का जवाब देना
आपके सर्वर को सूचनाओं का जवाब, तुरंत एचटीटीपी 204 No Content स्टेटस कोड के साथ देना होगा. टाइम आउट से बचने के लिए, जवाब भेजने के बाद, सूचना के पेलोड को एसिंक्रोनस तरीके से प्रोसेस करें. अगर Google Health API को कोई दूसरा स्टेटस कोड मिलता है या अनुरोध टाइम आउट हो जाता है, तो वह सूचना को बाद में दोबारा भेजने की कोशिश करता है.
Node.js (Express) का उदाहरण:
app.post('/webhook-receiver', (req, res) => {
// 1. Immediately acknowledge the notification
res.status(204).send();
// 2. Process the data asynchronously in the background
const notification = req.body;
setImmediate(() => {
console.log(`Update for user ${notification.data.healthUserId} of type ${notification.data.dataType}`);
// Trigger your data retrieval logic here
});
});
हस्ताक्षर की पुष्टि करना
वेबहुक सूचनाओं की पुष्टि करने के लिए, हर आउटगोइंग वेबहुक सूचना के रॉ JSON पेलोड पर,
Tink's
PublicKeySign का इस्तेमाल करके, निजी कुंजी से हस्ताक्षर किया जाता है.
इससे, अनुरोध में GOOGLE-HEALTH-API-SIGNATURE एचटीटीपी
हेडर में, Base64-एन्कोडेड हस्ताक्षर मिलता है. हस्ताक्षर करने वाली इन कुंजियों को हर 30 दिनों में अपने-आप रोटेट किया जाता है. साथ ही, इनसे जुड़े आधिकारिक सार्वजनिक कीसेट को JSON फ़ाइल के तौर पर, स्थायी यूआरएल https://www.gstatic.com/googlehealthapi/webhooks/webhooks_public_keyset.json पर डिस्ट्रिब्यूट किया जाता है.
हस्ताक्षर की पुष्टि करने का तरीका
Tink का इस्तेमाल करना (सुझाया जाता है): डेवलपर, Tink के
PublicKeyVerify
प्रिमिटिव का इस्तेमाल करके, हस्ताक्षर की पुष्टि कर सकते हैं. स्थायी यूआरएल से सार्वजनिक कीसेट फ़ेच करें, कीसेट के साथ PublicKeyVerify प्रिमिटिव को इंस्टैंशिएट करें, और डिकोड किए गए GOOGLE-HEALTH-API-SIGNATURE हेडर की पुष्टि, रॉ वेबहुक JSON पेलोड के ख़िलाफ़ करें.
मैन्युअल तरीके से पुष्टि करना (Tink के बिना): अगर डेवलपर Tink का इस्तेमाल नहीं करना चाहते हैं, तो वे मैन्युअल तरीके से हस्ताक्षर की पुष्टि कर सकते हैं. इसके लिए, यह तरीका अपनाएं:
GOOGLE-HEALTH-API-SIGNATUREहेडर को Base64-डिकोड करें, ताकि 5-बाइट Tink प्रीफ़िक्स (जिसमें 1-बाइट वर्शन प्रीफ़िक्स और 4-बाइट keyId शामिल है) को, असल DER-एन्कोडेड हस्ताक्षर से अलग किया जा सके.- https://www.gstatic.com/googlehealthapi/webhooks/webhooks_public_keyset.json से JSON कीसेट फ़ेच करें.
- पार्स किए गए keyId से मेल खाने वाली कुंजी ढूंढें और उसके वैल्यू फ़ील्ड को Base64-डिकोड करें. इसमें, क्रम से लगाया गया EcdsaPublicKey प्रोटोकॉल बफ़र शामिल होता है.
- इस बाइनरी पेलोड से, बड़े एंडियन x और y कोऑर्डिनेट (Protobuf टैग 3 और 4) निकालें.
- निकाले गए x और y कोऑर्डिनेट का इस्तेमाल करके, बिल्ट-इन क्रिप्टोग्राफ़ी लाइब्रेरी में, स्टैंडर्ड ECDSA P-256 सार्वजनिक कुंजी को इंस्टैंशिएट करें.
- SHA-256 एल्गोरिदम का इस्तेमाल करके, निकाले गए DER हस्ताक्षर के ख़िलाफ़, रॉ वेबहुक JSON पेलोड की पुष्टि करें.
सदस्य का स्टेटस और उसे वापस लाना
अगर आपका सदस्य एंडपॉइंट उपलब्ध नहीं है या गड़बड़ी का स्टेटस कोड
(204 के अलावा कोई भी कोड) दिखाता है, तो Google Health API, सात दिनों तक सूचनाओं को सेव रखता है. साथ ही, एक्सपोनेंशियल बैकऑफ़ के साथ, उन्हें डिलीवर करने की कोशिश करता है.
जब आपका एंडपॉइंट फिर से ऑनलाइन होता है और 204 के साथ जवाब देता है, तो एपीआई, सेव किए गए मैसेज का बैकलॉग अपने-आप डिलीवर कर देता है. सात दिनों से ज़्यादा पुरानी सूचनाएं हटा दी जाती हैं और उन्हें वापस नहीं लाया जा सकता.
आम तौर पर होने वाली गड़बड़ियां
| गड़बड़ी का कोड | मैसेज | ब्यौरा | सुझाव |
|---|---|---|---|
| 400 खराब अनुरोध | संसाधन के नाम में प्रोजेक्ट नंबर अमान्य है | अनुरोध के यूआरएल में प्रोजेक्ट नंबर के बजाय, Google Cloud प्रोजेक्ट आईडी का इस्तेमाल करके किसी सदस्य को मिटाने या अपडेट करने पर. यह projects.subscribers एंडपॉइंट का इस्तेमाल करने वाली वेबहुक सदस्यताओं पर लागू होता है. |
अनुरोध के यूआरएल में, प्रोजेक्ट आईडी के बजाय Google Cloud प्रोजेक्ट नंबर का इस्तेमाल करें. |
| 403 निषिद्ध | कॉल करने वाले के पास अनुमति नहीं है | अनुरोध के यूआरएल में प्रोजेक्ट नंबर के बजाय, Google Cloud प्रोजेक्ट आईडी का इस्तेमाल करके सदस्यों को बनाने या उनकी सूची देखने पर. यह projects.subscribers एंडपॉइंट का इस्तेमाल करने वाली वेबहुक सदस्यताओं पर लागू होता है. |
अनुरोध के यूआरएल में, प्रोजेक्ट आईडी के बजाय Google Cloud प्रोजेक्ट नंबर का इस्तेमाल करें. |