इस दस्तावेज़ में, ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बनाने के लिए इस्तेमाल की जा सकने वाली कुछ तकनीकों के बारे में बताया गया है. कुछ मामलों में, पेश किए गए आइडिया को समझाने के लिए, अन्य एपीआई या सामान्य एपीआई के उदाहरणों का इस्तेमाल किया जाता है. हालांकि, यही सिद्धांत Google Sheets API पर भी लागू होते हैं.
gzip का इस्तेमाल करके कंप्रेस करना
gzip कंप्रेशन को चालू करना, हर अनुरोध के लिए ज़रूरी बैंडविथ को कम करने का एक आसान और सीधा तरीका है. हालांकि, कंप्रेस किए गए नतीजों को खोलने के लिए ज़्यादा सीपीयू समय की ज़रूरत होती है, लेकिन नेटवर्क की लागत के साथ ट्रेड-ऑफ़ आम तौर पर इसे बहुत फ़ायदेमंद बनाता है.
gzip कोड में बदले गए जवाब पाने के लिए, आपको ये दो काम करने होंगे: Accept-Encoding
हेडर सेट करना और अपने उपयोगकर्ता एजेंट में बदलाव करके, उसमें gzip
स्ट्रिंग शामिल करना. gzip कंप्रेशन को चालू करने के लिए, सही तरीके से बनाए गए एचटीटीपी हेडर का उदाहरण यहां दिया गया है:
Accept-Encoding: gzip User-Agent: my program (gzip)
कुछ संसाधनों के साथ काम करना
एपीआई कॉल की परफ़ॉर्मेंस को बेहतर बनाने का एक और तरीका यह है कि सिर्फ़ उस डेटा का अनुरोध किया जाए जिसमें आपकी दिलचस्पी हो. इससे आपका ऐप्लिकेशन, गैर-ज़रूरी फ़ील्ड को ट्रांसफ़र, पार्स, और सेव करने से बचता है. इसलिए, यह नेटवर्क, सीपीयू, और मेमोरी जैसे संसाधनों का ज़्यादा बेहतर तरीके से इस्तेमाल कर सकता है.
अधूरे जवाब
डिफ़ॉल्ट रूप से, सर्वर अनुरोधों को प्रोसेस करने के बाद, किसी संसाधन का पूरा डेटा वापस भेजा जाता है. बेहतर परफ़ॉर्मेंस के लिए, सर्वर से सिर्फ़ वे फ़ील्ड भेजने के लिए कहा जा सकता है जिनकी आपको ज़रूरत है. ऐसा न होने पर आपको अधूरा जवाब मिलेगा.
कुछ हिस्से का जवाब पाने का अनुरोध करने के लिए, fields
अनुरोध पैरामीटर का इस्तेमाल करके वे फ़ील्ड तय करें जो आपको वापस चाहिए. इस पैरामीटर का इस्तेमाल, ऐसे किसी भी अनुरोध के साथ किया जा सकता है जिससे जवाब का डेटा मिलता है.
उदाहरण
इस उदाहरण में, "Demo" नाम के फ़िक्शनल (काल्पनिक) एपीआई के साथ 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
ऑब्जेक्ट में नेस्ट किया गया है और वहdata: { ... }
जैसा दिखता है, इसेfields
खास जानकारी में "data
" शामिल न करें.data/a/b
जैसे फ़ील्ड से जुड़े खास जानकारी वाले डेटा ऑब्जेक्ट को शामिल करने से गड़बड़ी होती है. इसके बजाय, सिर्फ़fields
जैसी खास जानकारी का इस्तेमाल करें. जैसे,a/b
.- कलेक्शन या ऑब्जेक्ट के सब-फ़ील्ड के किसी खास सेट का अनुरोध करने के लिए, सब-चुनने वाले का इस्तेमाल करें. इसके लिए, एक्सप्रेशन को ब्रैकेट "
( )
" में रखें.उदाहरण के लिए:
fields=items(id,author/email)
, आइटम कलेक्शन में मौजूद हर एलिमेंट के लिए सिर्फ़ आइटम आईडी और लेखक का ईमेल दिखाता है. एक सब-फ़ील्ड भी तय किया जा सकता है, जहांfields=items(id)
का मतलबfields=items/id
से है. - ज़रूरत पड़ने पर, फ़ील्ड चुनने के लिए वाइल्डकार्ड का इस्तेमाल करें.
उदाहरण के लिए:
fields=items/pagemap/*
, पेजमैप में मौजूद सभी ऑब्जेक्ट चुनता है.
फ़ील्ड पैरामीटर इस्तेमाल करने के अन्य उदाहरण
यहां दिए गए उदाहरणों में बताया गया है कि fields
पैरामीटर की वैल्यू, जवाब पर कैसे असर डालती है.
ध्यान दें: पूरी क्वेरी पैरामीटर वैल्यू की तरह, fields
पैरामीटर वैल्यू को भी कोड में बदलना ज़रूरी है. इस दस्तावेज़ में दिए गए उदाहरणों में कोड में बदलने के तरीके को शामिल नहीं किया गया है, ताकि उन्हें आसानी से पढ़ा जा सके.
- उन फ़ील्ड की पहचान करें जिनकी वैल्यू आपको चाहिए या फ़ील्ड चुनें.
- अनुरोध पैरामीटर की वैल्यू, कॉमा से अलग किए गए फ़ील्ड की सूची होती है. साथ ही, हर फ़ील्ड को जवाब के रूट के हिसाब से तय किया जाता है.
fields
इसलिए, अगर किसी लिस्ट को ऑपरेट किया जा रहा है, तो जवाब एक कलेक्शन होता है. इसमें आम तौर पर संसाधनों का एक कलेक्शन शामिल होता है. अगर आपको ऐसी कार्रवाई करनी है जिससे सिर्फ़ एक संसाधन मिलता हो, तो फ़ील्ड उस संसाधन के हिसाब से तय किए जाते हैं. अगर चुना गया फ़ील्ड, किसी कलेक्शन का हिस्सा है या कोई कलेक्शन है, तो सर्वर, कलेक्शन में मौजूद सभी एलिमेंट का चुना गया हिस्सा दिखाता है.
यहां कलेक्शन-लेवल के कुछ उदाहरण दिए गए हैं:
उदाहरण प्रभाव items
यह फ़ंक्शन, items कलेक्शन में मौजूद सभी एलिमेंट दिखाता है. इनमें हर एलिमेंट के सभी फ़ील्ड शामिल होते हैं, लेकिन कोई अन्य फ़ील्ड शामिल नहीं होता. etag,items
etag
फ़ील्ड और items कलेक्शन में मौजूद सभी एलिमेंट दिखाता है.items/title
यह फ़ंक्शन, items कलेक्शन में मौजूद सभी एलिमेंट के लिए सिर्फ़ title
फ़ील्ड की वैल्यू दिखाता है.
जब भी कोई नेस्ट किया गया फ़ील्ड दिखाया जाता है, तो जवाब में पैरंट ऑब्जेक्ट भी शामिल होते हैं. पैरंट फ़ील्ड में कोई अन्य चाइल्ड फ़ील्ड शामिल नहीं होता, जब तक कि उसे साफ़ तौर पर नहीं चुना जाता.context/facets/label
यह facets
कलेक्शन के सभी सदस्यों के लिए, सिर्फ़label
फ़ील्ड दिखाता है. यह फ़ील्ड,context
ऑब्जेक्ट में नेस्ट किया गया है.items/pagemap/*/title
आइटम कलेक्शन में मौजूद हर एलिमेंट के लिए, सिर्फ़ title
फ़ील्ड (अगर मौजूद है) दिखाता है. यह उन सभी ऑब्जेक्ट के लिए होता है जोpagemap
के चाइल्ड हैं.
यहां संसाधन-लेवल के कुछ उदाहरण दिए गए हैं:
उदाहरण प्रभाव title
यह अनुरोध किए गए संसाधन का title
फ़ील्ड दिखाता है.author/uri
यह अनुरोध किए गए संसाधन में मौजूद author
ऑब्जेक्ट काuri
सब-फ़ील्ड दिखाता है.links/*/href
यह फ़ंक्शन, 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
) का इस्तेमाल करते हैं, उन पैरामीटर का इस्तेमाल करके हर क्वेरी के नतीजों को कम करें, ताकि उन्हें मैनेज किया जा सके. ऐसा न करने पर, अधूरे जवाब से मिलने वाले परफ़ॉर्मेंस के फ़ायदे नहीं मिल पाएंगे.