इस दस्तावेज़ में कुछ ऐसी तकनीकों के बारे में बताया गया है जिनका इस्तेमाल करके, आप अपने ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बना सकते हैं. कुछ मामलों में, अन्य एपीआई या सामान्य एपीआई के उदाहरणों का इस्तेमाल, पेश किए गए आइडिया को दिखाने के लिए किया जाता है. हालांकि, Google Forms API पर भी यही कॉन्सेप्ट लागू होते हैं.
gzip का इस्तेमाल करके कंप्रेस करना
हर अनुरोध के लिए ज़रूरी बैंडविड्थ को कम करने का आसान और आसान तरीका, gzip कंप्रेस करने की सुविधा को चालू करना है. हालांकि, नतीजों को कंप्रेस करने के लिए, सीपीयू (CPU) में ज़्यादा समय की ज़रूरत होती है, लेकिन नेटवर्क कीमत की समस्या के चलते आम तौर पर काफ़ी फ़ायदा होता है.
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
में नेस्ट किया गयाc
फ़ील्ड चुनने के लिए,a/b/c
का इस्तेमाल करें.
अपवाद: "डेटा" रैपर का इस्तेमाल करने वाले एपीआई के रिस्पॉन्स के लिए, जहां रिस्पॉन्स को
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
उन सभी ऑब्जेक्ट का href
फ़ील्ड दिखाता है जोlinks
के चाइल्ड हैं.- उप-चुनावों का इस्तेमाल करके, खास फ़ील्ड के सिर्फ़ कुछ हिस्सों का अनुरोध करें.
- अगर आपके अनुरोध में कुछ खास फ़ील्ड के बारे में बताया जाता है, तो सर्वर डिफ़ॉल्ट रूप से ऑब्जेक्ट या ऐरे एलिमेंट को पूरी तरह से दिखाता है. सिर्फ़ कुछ सब-फ़ील्ड वाले रिस्पॉन्स तय किए जा सकते हैं. ऐसा करने के लिए, "
( )
" सब-चुनने के सिंटैक्स का इस्तेमाल करें, जैसा कि इस उदाहरण में दिखाया गया है.उदाहरण असर 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
) के क्वेरी पैरामीटर के साथ काम करते हैं, उन पैरामीटर का इस्तेमाल करके, हर क्वेरी के नतीजों को मैनेज किए जा सकने वाले साइज़ तक कम करें. ऐसा न करने पर, हो सकता है कि अधूरे जवाब देने से परफ़ॉर्मेंस में बढ़ोतरी न हो.