परफ़ॉर्मेंस को बेहतर करें

इस दस्तावेज़ में कुछ ऐसी तकनीकों के बारे में बताया गया है जिनका इस्तेमाल करके, आप अपने ऐप्लिकेशन की परफ़ॉर्मेंस को बेहतर बना सकते हैं. कुछ मामलों में, अन्य एपीआई या सामान्य एपीआई के उदाहरणों का इस्तेमाल, पेश किए गए आइडिया को दिखाने के लिए किया जाता है. हालांकि, Google Classroom 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) के क्वेरी पैरामीटर के साथ काम करते हैं, उन पैरामीटर का इस्तेमाल करके, हर क्वेरी के नतीजों को मैनेज किए जा सकने वाले साइज़ तक कम करें. ऐसा न करने पर, हो सकता है कि अधूरे जवाब देने से परफ़ॉर्मेंस में बढ़ोतरी न हो.