इस दस्तावेज़ में कुछ ऐसी तकनीकें दी गई हैं जिनका इस्तेमाल करके आप अपने ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बना सकते हैं. कुछ मामलों में, दिए गए आइडिया दिखाने के लिए अन्य एपीआई या सामान्य एपीआई के उदाहरण इस्तेमाल किए जाते हैं. हालांकि, यही कॉन्सेप्ट Google विज्ञापन अनुभव रिपोर्ट एपीआई पर लागू होता है.
gzip का इस्तेमाल करके कंप्रेस करना
gzip कंप्रेस करने की सुविधा चालू करना, हर अनुरोध के लिए ज़रूरी बैंडविड्थ को कम करने का एक आसान और सुविधाजनक तरीका है. हालांकि, नतीजों को कंप्रेस करने के लिए, सीपीयू को ज़्यादा समय की ज़रूरत होती है, लेकिन नेटवर्क की कीमतों पर होने वाला उतार-चढ़ाव आम तौर पर बहुत फ़ायदेमंद होता है.
एक gzip-एन्कोडेड जवाब पाने के लिए, आपको दो काम करने होंगे: Accept-Encoding
हेडर सेट करें और स्ट्रिंग gzip
को शामिल करने के लिए अपने उपयोगकर्ता एजेंट में बदलाव करें. gzip कंप्रेस करने की सुविधा चालू करने के लिए सही तरीके से बनाए गए एचटीटीपी हेडर का उदाहरण देखें:
Accept-Encoding: gzip User-Agent: my program (gzip)
आंशिक संसाधनों के साथ काम करना
एपीआई कॉल की परफ़ॉर्मेंस को बेहतर बनाने का एक और तरीका है, डेटा के सिर्फ़ उस हिस्से का अनुरोध करें जिसमें आपकी दिलचस्पी है. यह आपके ऐप्लिकेशन को गैर-ज़रूरी फ़ील्ड ट्रांसफ़र करने, पार्स करने, और सेव करने से रोकता है. इससे, नेटवर्क, सीपीयू, और मेमोरी जैसे संसाधनों को बेहतर तरीके से इस्तेमाल किया जा सकता है.
कुछ हद तक जवाब
डिफ़ॉल्ट रूप से, सर्वर प्रोसेस करने के अनुरोधों के बाद रिसॉर्स को पूरी तरह से दिखाता है. बेहतर परफ़ॉर्मेंस के लिए, आप सर्वर से सिर्फ़ उन फ़ील्ड को भेजने के लिए कह सकते हैं जिनकी आपको वाकई में ज़रूरत है. इसके बजाय, आप कुछ हिस्से का रिस्पॉन्स पा सकते हैं.
कुछ हिस्से के रिस्पॉन्स का अनुरोध करने के लिए, fields
अनुरोध पैरामीटर का इस्तेमाल करके, उन फ़ील्ड के बारे में बताएं जिन्हें आपको दिखाना है. इस पैरामीटर का इस्तेमाल, किसी भी ऐसे अनुरोध के लिए किया जा सकता है जो जवाब का डेटा दिखाता हो.
उदाहरण
नीचे दिए गए उदाहरण में, सामान्य (काल्पनिक) और कोटेशन;डेमो; एपीआई के साथ fields
पैरामीटर का इस्तेमाल करने के बारे में बताया गया है.
आसान अनुरोध: यह एचटीटीपी GET
अनुरोध, fields
पैरामीटर को हटा देता है और पूरा रिसॉर्स दिखाता है.
https://www.googleapis.com/demo/v1
संसाधन का पूरा जवाब: पूरे संसाधन डेटा में, कम शब्दों में जानकारी देने के लिए शामिल किए गए कई फ़ील्ड के साथ-साथ ये फ़ील्ड भी शामिल हैं.
{ "kind": "demo", ... "items": [ { "title": "First title", "comment": "First comment.", "characteristics": { "length": "short", "accuracy": "high", "followers": ["Jo", "Will"], }, "status": "active", ... }, { "title": "Second title", "comment": "Second comment.", "characteristics": { "length": "long", "accuracy": "medium" "followers": [ ], }, "status": "pending", ... }, ... ] }
किसी खास जवाब का अनुरोध करना: इस संसाधन के लिए दिया गया यह अनुरोध, fields
पैरामीटर का इस्तेमाल करके, दिखाए जाने वाले डेटा को बहुत कम करता है.
https://www.googleapis.com/demo/v1?fields=kind,items(title,characteristics/length)
कुछ हिस्से के जवाब: ऊपर दिए गए अनुरोध के जवाब में, सर्वर एक रिस्पॉन्स भेजता है जिसमें कम जानकारी वाले सिर्फ़ एक आइटम की जानकारी होती है. इसमें, हर आइटम में सिर्फ़ एचटीएमएल शीर्षक और लंबाई वाली विशेषता शामिल होती है.
200 OK
{ "kind": "demo", "items": [{ "title": "First title", "characteristics": { "length": "short" } }, { "title": "Second title", "characteristics": { "length": "long" } }, ... ] }
ध्यान दें कि जवाब एक JSON ऑब्जेक्ट है, जिसमें सिर्फ़ चुने गए फ़ील्ड और साथ में मौजूद पैरंट ऑब्जेक्ट शामिल हैं.
इसके बाद, fields
पैरामीटर को फ़ॉर्मैट करने के तरीके के बारे में जानकारी मिलती है. इसके बाद, रिस्पॉन्स में क्या मिलता है, इस बारे में ज़्यादा जानकारी दी गई है.
फ़ील्ड पैरामीटर के सिंटैक्स की खास जानकारी
fields
अनुरोध के पैरामीटर की वैल्यू मुख्य रूप से XPath सिंटैक्स के आधार पर तय की जाती है. इस्तेमाल किए जा सकने वाले सिंटैक्स की खास जानकारी नीचे दी गई है. साथ ही, नीचे दिए गए सेक्शन में और भी उदाहरण दिए गए हैं.
- एक से ज़्यादा फ़ील्ड चुनने के लिए, कॉमा-सेपरेटेड लिस्ट का इस्तेमाल करें.
a
का इस्तेमाल करने वाली फ़ील्डb
को चुनने के लिए,a/b
का इस्तेमाल करें.b
में नेस्ट की गई फ़ील्ड चुनने के लिए,a/b/c
का इस्तेमाल करें.
अपवाद: ऐसे एपीआई रिस्पॉन्स के लिए "data" रैपर, जहां
data: { ... }
जैसाdata
ऑब्जेक्ट में जवाब नेस्ट किया गया है,fields
की खास जानकारी में "data
" शामिल न करें.data/a/b
जैसे फ़ील्ड की खास जानकारी के साथ डेटा ऑब्जेक्ट शामिल करने से गड़बड़ी होती है. इसके बजाय,a/b
जैसीfields
की जानकारी का इस्तेमाल करें.- श्रेणियों या ऑब्जेक्ट में खास सब-फ़ील्ड के सेट का अनुरोध करने के लिए, सब-सिलेक्टर का इस्तेमाल करें. इसके लिए, ब्रैकेट में &कोट करें;
( )
".उदाहरण के लिए:
fields=items(id,author/email)
, आइटम कैटगरी के हर एलिमेंट के लिए, सिर्फ़ सामान का आईडी और लेखक का ईमेल पता दिखाता है. एक सब-फ़ील्ड भी तय किया जा सकता है, जहांfields=items(id)
,fields=items/id
के बराबर है. - अगर ज़रूरी हो, तो फ़ील्ड चुनने के लिए वाइल्डकार्ड का इस्तेमाल करें.
उदाहरण के लिए:
fields=items/pagemap/*
, पेजमैप में सभी ऑब्जेक्ट चुनता है.
फ़ील्ड पैरामीटर का इस्तेमाल करने के ज़्यादा उदाहरण
नीचे दिए गए उदाहरणों में बताया गया है कि fields
पैरामीटर की वैल्यू से रिस्पॉन्स पर क्या असर पड़ता है.
ध्यान दें: सभी क्वेरी पैरामीटर की वैल्यू की तरह ही, fields
पैरामीटर की वैल्यू भी यूआरएल के कोड में होनी चाहिए. बेहतर तरीके से पढ़ने के लिए, इस दस्तावेज़ के उदाहरणों में एन्कोडिंग को छोड़ दिया गया है.
- उन फ़ील्ड की पहचान करें जिन्हें आपको दिखाना है या फ़ील्ड चुनें.
fields
अनुरोध पैरामीटर की वैल्यू, कॉमा लगाकर अलग किए गए फ़ील्ड की सूची है और हर फ़ील्ड, जवाब के रूट के हिसाब से बताया जाता है. इसलिए, अगर सूची वाली कार्रवाई की जा रही है, तो जवाब इकट्ठा होता है. इसमें आम तौर पर कई संसाधन शामिल होते हैं. अगर आप ऐसी कार्रवाई कर रहे हैं जो एक रिसॉर्स दिखाती है, तो फ़ील्ड उस संसाधन से जुड़े होते हैं. अगर आपका चुना गया फ़ील्ड, किसी कैटगरी का हिस्सा है (या उसका हिस्सा है), तो सर्वर, कलेक्शन में मौजूद सभी एलिमेंट का चुनिंदा हिस्सा दिखाता है.
यहां कलेक्शन के लिए कुछ उदाहरण दिए गए हैं:
उदाहरण असर items
आइटम श्रेणी के सभी एलिमेंट दिखाता है, जिसमें हर एलिमेंट के सभी फ़ील्ड शामिल होते हैं, लेकिन कोई दूसरा फ़ील्ड नहीं होता. etag,items
यह etag
फ़ील्ड और आइटम की कैटगरी के सभी एलिमेंट दिखाता है.items/title
आइटम कैटगरी में सभी एलिमेंट के लिए, सिर्फ़ title
फ़ील्ड दिखाता है.
नेस्ट किए गए किसी फ़ील्ड को लौटाने पर, रिस्पॉन्स में एनक्लोज़िंग पैरंट ऑब्जेक्ट शामिल होते हैं. पैरंट फ़ील्ड में कोई अन्य चाइल्ड फ़ील्ड शामिल नहीं होता है, जब तक कि उन्हें भी साफ़ तौर पर नहीं चुना जाता.context/facets/label
facets
कैटगरी के सभी सदस्यों के लिए, सिर्फ़label
फ़ील्ड दिखाता है. इसेcontext
ऑब्जेक्ट के तहत नेस्ट किया जाता है.items/pagemap/*/title
आइटम कैटगरी में हर एलिमेंट के लिए, सिर्फ़ उन सभी ऑब्जेक्ट के title
फ़ील्ड (अगर मौजूद हो) दिखाता है जोpagemap
के चाइल्ड हैं.
यहां रिसॉर्स लेवल के कुछ उदाहरण दिए गए हैं:
उदाहरण असर title
अनुरोध किए गए संसाधन का title
फ़ील्ड दिखाता है.author/uri
अनुरोध किए गए रिसॉर्स में author
ऑब्जेक्ट काuri
सब-फ़ील्ड दिखाता है.links/*/href
links
के चाइल्ड ऑब्जेक्ट के सभी ऑब्जेक्ट काhref
फ़ील्ड दिखाता है.- सब-सिलेक्शन का इस्तेमाल करके, खास फ़ील्ड के सिर्फ़ कुछ हिस्सों के लिए अनुरोध करें.
- डिफ़ॉल्ट रूप से, अगर आपका अनुरोध कुछ खास फ़ील्ड के बारे में बताता है, तो सर्वर ऑब्जेक्ट या कैटगरी के एलिमेंट को पूरी तरह से दिखाता है. आप सिर्फ़ कुछ सब-फ़ील्ड शामिल करके जवाब तय कर सकते हैं. ऐसा करते हुए, नीचे दिए गए उदाहरण की तरह ही "
( )
" सब-चुना गया सिंटैक्स इस्तेमाल करें.उदाहरण असर items(title,author/uri)
आइटम कैटगरी में हर एलिमेंट के लिए, सिर्फ़ title
और लेखक केuri
की वैल्यू दिखाता है.
आंशिक जवाबों को हैंडल करना
जब सर्वर मान्य अनुरोध को प्रोसेस करता है, जिसमें fields
क्वेरी पैरामीटर शामिल होता है, तो यह अनुरोध किए गए डेटा के साथ एचटीटीपी 200 OK
स्टेटस कोड दिखाता है. अगर fields
क्वेरी पैरामीटर में कोई गड़बड़ी है या वह अमान्य है, तो सर्वर एक एचटीटीपी 400 Bad Request
स्टेटस कोड के साथ गड़बड़ी का मैसेज दिखाता है. इसमें उपयोगकर्ता को बताया जाता है कि उनके फ़ील्ड चुनने में क्या समस्या हुई. उदाहरण के लिए, "Invalid field selection a/b"
.
यहां जवाब के तौर पर दिए गए कुछ उदाहरण दिए गए हैं, जो ऊपर शुरुआती सेक्शन में दिखाए गए हैं. अनुरोध में fields
पैरामीटर का इस्तेमाल करके, यह बताया जाता है कि कौनसे फ़ील्ड दिखाने हैं.
https://www.googleapis.com/demo/v1?fields=kind,items(title,characteristics/length)
आंशिक जवाब कुछ ऐसा दिखता है:
200 OK
{ "kind": "demo", "items": [{ "title": "First title", "characteristics": { "length": "short" } }, { "title": "Second title", "characteristics": { "length": "long" } }, ... ] }
ध्यान दें: डेटा पेजों को क्रम में लगाने के लिए क्वेरी पैरामीटर के साथ काम करने वाले एपीआई के लिए (उदाहरण के लिए, maxResults
और nextPageToken
), हर क्वेरी के नतीजों को मैनेज करने लायक साइज़ तक कम करने के लिए, उन पैरामीटर का इस्तेमाल करें. ऐसा न करने पर, हो सकता है कि परफ़ॉर्मेंस का कुछ हिस्सा सही से काम न करे.