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

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