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 में, अपने प्रोजेक्ट के आईएएम और एडमिन पेज पर जाएं. इसके बाद, उपयोगकर्ता के मैनेज किए जाने वाले नए सेवा खाते बनाएं.
- ज़रूरी आईएएम रोल देना: सेवा खाते को वे ज़रूरी रोल असाइन करें जिनकी ज़रूरत, 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 को MANUAL पर सेट करके कॉन्फ़िगर किया गया है, तो आपको हर उपयोगकर्ता के लिए, सदस्यताओं को साफ़ तौर पर बनाना और मैनेज करना होगा. सदस्यता, किसी खास उपयोगकर्ता को, तय किए गए डेटा टाइप के सेट के लिए आपके सदस्य एंडपॉइंट से लिंक करती है. डेवलपर, इन कामों के लिए खास एपीआई का इस्तेमाल कर सकते हैं:
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 प्रोजेक्ट नंबर का इस्तेमाल करें. |