YouTube Data API की खास जानकारी

शुरुआती जानकारी

यह दस्तावेज़ उन डेवलपर के लिए है जो YouTube से इंटरैक्ट करने वाले ऐप्लिकेशन लिखना चाहते हैं. इसमें YouTube और एपीआई की बुनियादी बातों को समझाया गया है. इसमें, एपीआई पर काम करने वाले अलग-अलग फ़ंक्शन की खास जानकारी भी दी गई है.

शुरू करने से पहले

  1. Google API (एपीआई) कंसोल को ऐक्सेस करने, एपीआई कुंजी का अनुरोध करने, और अपना ऐप्लिकेशन रजिस्टर करने के लिए, आपको एक Google खाते की ज़रूरत होगी.

  2. Google Developers Console में कोई प्रोजेक्ट बनाएं और अनुमति देने के क्रेडेंशियल पाएं, ताकि आपका ऐप्लिकेशन एपीआई अनुरोध सबमिट कर सके.

  3. अपना प्रोजेक्ट बनाने के बाद, पक्का करें कि YouTube Data API उन सेवाओं में से एक है जिन्हें इस्तेमाल करने के लिए आपका ऐप्लिकेशन रजिस्टर किया गया है:

    1. एपीआई कंसोल पर जाएं और वह प्रोजेक्ट चुनें जिसे आपने अभी-अभी रजिस्टर किया है.
    2. चालू एपीआई पेज पर जाएं. एपीआई की सूची में यह पक्का करें कि YouTube Data API v3 के लिए, स्टेटस चालू हो.

  4. अगर आपका ऐप्लिकेशन एपीआई के ऐसे किसी भी तरीके का इस्तेमाल करेगा जिसके लिए उपयोगकर्ता की अनुमति की ज़रूरत है, तो OAuth 2.0 की पुष्टि करने की प्रक्रिया को लागू करने का तरीका जानने के लिए पुष्टि करने से जुड़ी गाइड पढ़ें.

  5. एपीआई को आसानी से लागू करने के लिए, कोई क्लाइंट लाइब्रेरी चुनें.

  6. JSON (JavaScript ऑब्जेक्ट नोटेशन) डेटा फ़ॉर्मैट की मुख्य बातों के बारे में जानें. JSON एक आम और भाषा पर निर्भर डेटा फ़ॉर्मैट है. यह आर्बिट्रेरी डेटा स्ट्रक्चर को टेक्स्ट फ़ॉर्मैट में आसानी से दिखाता है. ज़्यादा जानकारी के लिए, json.org देखें.

रिसॉर्स और रिसॉर्स टाइप

संसाधन, यूनीक आइडेंटिफ़ायर वाली अलग-अलग डेटा इकाई होता है. नीचे दी गई टेबल में अलग-अलग तरह के ऐसे संसाधनों के बारे में बताया गया है जिनका इस्तेमाल एपीआई का इस्तेमाल करके किया जा सकता है.

संसाधन
activity इसमें किसी खास उपयोगकर्ता की YouTube साइट पर की गई कार्रवाई की जानकारी शामिल होती है. गतिविधि फ़ीड में उपयोगकर्ता की कार्रवाइयों के तौर पर, किसी वीडियो को रेटिंग देना, उसे शेयर करना, किसी वीडियो को पसंदीदा के तौर पर मार्क करना, और चैनल का बुलेटिन पोस्ट करना वगैरह शामिल हैं.
channel इसमें एक YouTube चैनल की जानकारी होती है.
channelBanner यह उस यूआरएल की पहचान करता है जिसका इस्तेमाल करके, अपलोड की गई नई इमेज को चैनल के लिए बैनर इमेज के तौर पर सेट किया जा सकता है.
channelSection इसमें उन वीडियो के बारे में जानकारी होती है जिन्हें किसी चैनल ने दिखाने के लिए चुना है. उदाहरण के लिए, किसी सेक्शन में किसी चैनल पर हाल ही में अपलोड किए गए वीडियो, सबसे लोकप्रिय अपलोड किए गए वीडियो या एक या उससे ज़्यादा प्लेलिस्ट के वीडियो दिखाए जा सकते हैं.
guideCategory ऐसी कैटगरी की पहचान करता है जिसे YouTube, चैनलों के साथ जोड़ता है. यह, उनके कॉन्टेंट या दूसरी चीज़ों के आधार पर तय होता है, जैसे कि लोकप्रियता. गाइड की कैटगरी, चैनलों को इस तरह व्यवस्थित करती हैं जिससे YouTube इस्तेमाल करने वाले लोगों को, अपनी पसंद का कॉन्टेंट ढूंढने में आसानी हो. चैनल, गाइड की एक या उससे ज़्यादा कैटगरी से जुड़े हो सकते हैं. हालांकि, इस बात की कोई गारंटी नहीं है कि वे गाइड की किसी कैटगरी में होंगे.
i18nLanguage यह ऐप्लिकेशन की ऐसी भाषा की पहचान करता है जो YouTube वेबसाइट पर काम करती है. ऐप्लिकेशन की भाषा को यूज़र इंटरफ़ेस (यूआई) भाषा भी कहा जा सकता है.
i18nRegion इससे उस भौगोलिक इलाके की पहचान की जाती है जिसे YouTube उपयोगकर्ता अपनी पसंदीदा जगह के तौर पर चुन सकता है. कॉन्टेंट के इलाके को कॉन्टेंट की स्थान-भाषा भी कहा जा सकता है.
playlist इससे सिंगल YouTube प्लेलिस्ट के बारे में पता चलता है. प्लेलिस्ट उन वीडियो का एक संग्रह है जिन्हें एक के बाद एक देखा जा सकता है और दूसरे उपयोगकर्ताओं के साथ शेयर किया जा सकता है.
playlistItem किसी संसाधन की पहचान करता है, जैसे कि वीडियो, जो किसी प्लेलिस्ट का हिस्सा है. प्लेलिस्ट आइटम के संसाधन में, यह जानकारी भी होती है कि प्लेलिस्ट में शामिल संसाधन का इस्तेमाल कैसे किया जाता है.
search result इसमें उस YouTube वीडियो, चैनल या प्लेलिस्ट की जानकारी शामिल होती है जो एपीआई अनुरोध में तय खोज पैरामीटर से मेल खाती है. खोज के नतीजे में वीडियो जैसे एक खास तरह के संसाधन के बारे में बताया जाता है. हालांकि, इसके लिए इसका स्थायी डेटा मौजूद नहीं होता.
subscription इसमें YouTube उपयोगकर्ता की सदस्यता के बारे में जानकारी होती है. जब किसी चैनल पर नए वीडियो जोड़े जाते हैं या कोई दूसरा उपयोगकर्ता YouTube पर वीडियो अपलोड करने, वीडियो को रेटिंग देने या किसी वीडियो पर टिप्पणी करने जैसी कई कार्रवाइयों में से कोई कार्रवाई करता है, तो सदस्यता से उपयोगकर्ता को सूचना मिलती है.
thumbnail यह संसाधन से जुड़े थंबनेल इमेज की पहचान करता है.
video यह किसी एक YouTube वीडियो के बारे में बताता है.
videoCategory इससे ऐसी कैटगरी की पहचान होती है जो अपलोड किए गए वीडियो से जुड़ी है या हो सकती है.
watermark किसी खास चैनल के वीडियो को चलाने के दौरान दिखाई जाने वाली इमेज की पहचान करता है. चैनल का मालिक, टारगेट किए गए चैनल पर इमेज के लिंक होने की जानकारी दे सकता है. साथ ही, वह उसके दिखने के समय की जानकारी भी दे सकता है. इससे यह तय होता है कि वीडियो चलने के दौरान वॉटरमार्क कब दिखेगा और फिर कितने समय तक दिखेगा.

ध्यान दें कि कई मामलों में, एक संसाधन में दूसरे संसाधनों के रेफ़रंस शामिल होते हैं. उदाहरण के लिए, playlistItem संसाधन की snippet.resourceId.videoId प्रॉपर्टी में, ऐसे वीडियो संसाधन की पहचान की जाती है जिसमें वीडियो के बारे में पूरी जानकारी मौजूद होती है. इसी तरह, खोज के नतीजे में videoId, playlistId या channelId प्रॉपर्टी मौजूद होती है. इससे किसी वीडियो, प्लेलिस्ट या चैनल के रिसॉर्स की पहचान की जाती है.

इस्तेमाल की जा सकने वाली कार्रवाइयां

नीचे दी गई टेबल में, एपीआई पर काम करने वाले सबसे सामान्य तरीके बताए गए हैं. कुछ संसाधन ऐसे दूसरे तरीकों के साथ भी काम करते हैं जो उन संसाधनों के हिसाब से खास तरह से काम करते हैं. उदाहरण के लिए, videos.rate तरीका किसी उपयोगकर्ता रेटिंग को वीडियो के साथ जोड़ता है. thumbnails.set तरीका, YouTube पर वीडियो की थंबनेल इमेज अपलोड करता है और उसे वीडियो से जोड़ता है.

ऑपरेशंस
list शून्य या उससे ज़्यादा रिसॉर्स की सूची (GET) हासिल करता है.
insert एक नया संसाधन (POST) बनाता है.
update आपके अनुरोध में मौजूद डेटा को दिखाने के लिए, मौजूदा संसाधन (PUT) में बदलाव करता है.
delete किसी खास संसाधन (DELETE) को हटाता है.

फ़िलहाल, एपीआई हर तरह के रिसॉर्स की सूची बनाने के लिए तरीकों का इस्तेमाल करता है. साथ ही, यह कई संसाधनों के लिए राइट ऑपरेशन की सुविधा देता है.

नीचे दी गई टेबल में अलग-अलग तरह के संसाधनों के लिए काम करने वाली कार्रवाइयों की जानकारी दी गई है. संसाधनों को डालने, अपडेट करने या मिटाने वाली कार्रवाइयों के लिए, उपयोगकर्ता की अनुमति की ज़रूरत होती है. कुछ मामलों में, list के तरीकों में अनुमति वाले और बिना अनुमति वाले, दोनों तरह के अनुरोध काम करते हैं. इनमें ऐसे अनुरोध भी शामिल हैं जो सिर्फ़ सार्वजनिक डेटा को शामिल करते हैं. वहीं, अनुमति वाले अनुरोध भी मौजूदा पुष्टि वाले उपयोगकर्ता की जानकारी या निजी जानकारी हासिल कर सकते हैं.

ऐसी कार्रवाइयां की जा सकती हैं जिन्हें सपोर्ट किया जा सकता है
list insert update delete
activity
caption
channel
channelBanner
channelSection
comment
commentThread
guideCategory
i18nLanguage
i18nRegion
playlist
playlistItem
search result
subscription
thumbnail
video
videoCategory
watermark

कोटा का इस्तेमाल

YouTube Data API, कोटा का इस्तेमाल यह पक्का करने के लिए करता है कि डेवलपर अपनी सेवा का इस्तेमाल सही तरीके से करें. साथ ही, ऐसे ऐप्लिकेशन न बनाएं जो सेवा की क्वालिटी को गलत तरीके से कम करते हों या दूसरों के लिए ऐक्सेस को सीमित करते हों. सभी एपीआई अनुरोधों पर, कम से कम एक वन-पॉइंट कोटा शुल्क लगता है. इनमें अमान्य अनुरोध भी शामिल हैं. आपके आवेदन के लिए उपलब्ध कोटा API Console में देखा जा सकता है.

YouTube Data API चालू करने वाले प्रोजेक्ट के लिए,डिफ़ॉल्ट तौर पर हर दिन 10, 000 यूनिट तय की जाती हैं. यह हमारे ज़्यादातर एपीआई उपयोगकर्ताओं के लिए काफ़ी है. डिफ़ॉल्ट कोटा में बदलाव हो सकता है. इससे हमें कोटा के बंटवारे को ऑप्टिमाइज़ करने और अपने इंफ़्रास्ट्रक्चर को बेहतर बनाने में मदद मिलती है, जो हमारे एपीआई उपयोगकर्ताओं के लिए ज़्यादा फ़ायदेमंद हो. एपीआई कंसोल में कोटा पेज पर जाकर, देखा जा सकता है कि आपने कितना कोटा इस्तेमाल किया है.

ध्यान दें: अगर कोटा की तय सीमा पूरी हो चुकी है, तो YouTube API सेवाओं के लिए, कोटा एक्सटेंशन का अनुरोध करने का फ़ॉर्म भरकर, कोटा बढ़ाने का अनुरोध किया जा सकता है.

कोटा उपयोग की गणना की जा रही है

Google हर अनुरोध के लिए एक शुल्क असाइन करके, आपके कोटा के इस्तेमाल का हिसाब लगाता है. अलग-अलग तरह की कार्रवाइयों के लिए, कोटा की लागत अलग-अलग होती है. उदाहरण के लिए:

  • पढ़ने की एक कार्रवाई जिसमें संसाधनों की एक सूची मिलती है -- चैनल, वीडियो, प्लेलिस्ट -- आम तौर पर एक यूनिट खर्च होती है.
  • लिखने की ऐसी कार्रवाई जिसमें कोई संसाधन बनाया जाता है, अपडेट किया जाता है या मिटाया जाता है, तो आम तौर पर इसकी लागत 50 यूनिट होती है.
  • एक खोज अनुरोध की कीमत 100 यूनिट है.
  • एक वीडियो अपलोड करने की कीमत 1600 यूनिट है.

एपीआई अनुरोधों के लिए कोटा की लागत टेबल में, एपीआई के हर तरीके की कोटा लागत दिखती है. इन नियमों को ध्यान में रखते हुए, अपने कोटा से बाहर निकले बिना, हर दिन अपने ऐप्लिकेशन से भेजे जाने वाले अनुरोधों की संख्या का अनुमान लगाया जा सकता है.

कुछ संसाधन

API, आंशिक संसाधनों को वापस पाने की अनुमति देता है और असल में इसकी ज़रूरत होती है, ताकि ऐप्लिकेशन बिना काम के डेटा को ट्रांसफ़र, पार्स, और स्टोर करने से बचें. इस तरीके से यह भी पक्का होता है कि एपीआई, नेटवर्क, CPU, और मेमोरी रिसॉर्स को बेहतर तरीके से इस्तेमाल करे.

एपीआई, दो अनुरोध पैरामीटर के साथ काम करता है. इनके बारे में नीचे दिए गए सेक्शन में बताया गया है. इन संसाधनों से उन संसाधन प्रॉपर्टी की पहचान की जा सकती है जिन्हें एपीआई के रिस्पॉन्स में शामिल किया जाना चाहिए.

  • part पैरामीटर, उन प्रॉपर्टी के ग्रुप की पहचान करता है जिन्हें किसी संसाधन के लिए दिखाया जाना चाहिए.
  • fields पैरामीटर, एपीआई के रिस्पॉन्स को फ़िल्टर करता है, ताकि अनुरोध किए गए रिसॉर्स पार्ट में सिर्फ़ खास प्रॉपर्टी दिखाई जा सकें.

part पैरामीटर को इस्तेमाल करने का तरीका

ऐसे किसी भी एपीआई अनुरोध के लिए, part पैरामीटर एक ज़रूरी पैरामीटर होता है जो संसाधन को हासिल करता है या उसे लौटाता है. पैरामीटर, एक या एक से ज़्यादा टॉप लेवल (नॉन-नेस्ट की गई) रिसॉर्स प्रॉपर्टी की पहचान करता है, जिन्हें एपीआई के रिस्पॉन्स में शामिल किया जाना चाहिए. उदाहरण के लिए, किसी video संसाधन में ये हिस्से होते हैं:

  • snippet
  • contentDetails
  • fileDetails
  • player
  • processingDetails
  • recordingDetails
  • statistics
  • status
  • suggestions
  • topicDetails

ये सभी हिस्से ऐसे ऑब्जेक्ट हैं जिनमें नेस्ट की गई प्रॉपर्टी होती हैं. इन ऑब्जेक्ट को मेटाडेटा फ़ील्ड के ग्रुप के तौर पर माना जा सकता है. इन्हें एपीआई का सर्वर हासिल कर सकता है (या शायद नहीं भी हासिल कर सकता हो). इसलिए, part पैरामीटर के लिए, आपको उन रिसॉर्स कॉम्पोनेंट को चुनना होगा जिनका इस्तेमाल आपका ऐप्लिकेशन असल में करता है. यह शर्त, दो खास मकसद के लिए है:

  • यह एपीआई सर्वर को उन मेटाडेटा फ़ील्ड को वापस पाने में लगने वाले समय को रोककर, इंतज़ार का समय कम करता है जिनका इस्तेमाल आपका ऐप्लिकेशन नहीं करता.
  • यह आपके ऐप्लिकेशन से रिकवर किए जा सकने वाले ग़ैर-ज़रूरी डेटा को कम करके (या खत्म करके) बैंडविड्थ का इस्तेमाल कम करता है.

समय के साथ, जैसे-जैसे संसाधन ज़्यादा हिस्सों में जोड़े जाते हैं, ये फ़ायदे सिर्फ़ बढ़ते जाएंगे. ऐसा इसलिए होगा, क्योंकि आपका ऐप्लिकेशन उन नई प्रॉपर्टी के लिए अनुरोध नहीं करेगा जिन्हें वह के साथ काम नहीं करता.

fields पैरामीटर को इस्तेमाल करने का तरीका

fields पैरामीटर, एपीआई के रिस्पॉन्स को फ़िल्टर करता है. इसमें सिर्फ़ वे रिसॉर्स पार्ट शामिल होते हैं जिनकी पहचान part पैरामीटर वैल्यू में की गई है. इससे रिस्पॉन्स में सिर्फ़ फ़ील्ड का खास सेट शामिल होता है. fields पैरामीटर की मदद से, एपीआई के रिस्पॉन्स से नेस्ट की गई प्रॉपर्टी हटाई जा सकती हैं. इससे, आपके बैंडविड्थ का इस्तेमाल और भी कम हो जाता है. (किसी रिस्पॉन्स से, नेस्ट की गई प्रॉपर्टी को फ़िल्टर करने के लिए, part पैरामीटर का इस्तेमाल नहीं किया जा सकता.)

यहां दिए गए नियम, fields पैरामीटर वैल्यू के लिए इस्तेमाल किए जा सकने वाले सिंटैक्स के बारे में बताते हैं. यह वैल्यू आम तौर पर XPath सिंटैक्स पर आधारित नहीं होती है:

  • एक से ज़्यादा फ़ील्ड चुनने के लिए, कॉमा लगाकर अलग की गई सूची (fields=a,b) का इस्तेमाल करें.
  • सभी फ़ील्ड की पहचान करने के लिए, वाइल्डकार्ड के तौर पर तारे के निशान (fields=*) का इस्तेमाल करें.
  • एपीआई के रिस्पॉन्स में शामिल की जाने वाली नेस्ट की गई प्रॉपर्टी के ग्रुप को तय करने के लिए, ब्रैकेट (fields=a(b,c)) का इस्तेमाल करें.
  • नेस्ट की गई प्रॉपर्टी की पहचान करने के लिए, फ़ॉरवर्ड स्लैश (fields=a/b) का इस्तेमाल करें.

व्यावहारिक तौर पर, ये नियम अक्सर एक जैसा एपीआई रिस्पॉन्स पाने के लिए, कई अलग-अलग fields पैरामीटर वैल्यू की अनुमति देते हैं. उदाहरण के लिए, अगर आपको किसी प्लेलिस्ट में मौजूद हर आइटम के लिए, प्लेलिस्ट आइटम का आईडी, टाइटल, और रैंक की जानकारी फिर से चाहिए, तो इनमें से किसी भी वैल्यू का इस्तेमाल करें:

  • fields=items/id,playlistItems/snippet/title,playlistItems/snippet/position
  • fields=items(id,snippet/title,snippet/position)
  • fields=items(id,snippet(title,position))

ध्यान दें: क्वेरी पैरामीटर की सभी वैल्यू की तरह ही, fields पैरामीटर वैल्यू के लिए भी यूआरएल कोड में बदलना ज़रूरी है. डेटा को बेहतर ढंग से पढ़ने के लिए, इस दस्तावेज़ में दिए गए उदाहरणों में एन्कोडिंग को शामिल नहीं किया गया है.

आंशिक अनुरोधों का नमूना

यहां दिए गए उदाहरणों में बताया गया है कि part और fields पैरामीटर को कैसे इस्तेमाल किया जा सकता है, ताकि यह पक्का किया जा सके कि एपीआई से मिले रिस्पॉन्स में सिर्फ़ वह डेटा शामिल है जिसका इस्तेमाल आपका ऐप्लिकेशन करता है:

  1. पहले उदाहरण में, एक ऐसा वीडियो रिसॉर्स दिखाया गया है जिसमें चार हिस्सों के साथ-साथ kind और etag प्रॉपर्टी भी शामिल हैं.
  2. दूसरे उदाहरण में, एक ऐसा वीडियो रिसॉर्स दिखाया गया है जिसमें दो हिस्सों के साथ-साथ kind और etag प्रॉपर्टी भी शामिल हैं.
  3. तीसरे उदाहरण में, एक ऐसा वीडियो रिसॉर्स दिखाया गया है जिसमें दो हिस्से शामिल हैं. हालांकि, इसमें kind और etag प्रॉपर्टी शामिल नहीं हैं.
  4. चौथे उदाहरण में, एक ऐसा वीडियो रिसॉर्स दिखाया गया है जिसमें दो हिस्से शामिल हैं. हालांकि, इसमें kind और etag के साथ-साथ रिसॉर्स के snippet ऑब्जेक्ट में नेस्ट की गई कुछ प्रॉपर्टी शामिल नहीं हैं.
पहला उदाहरण
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&part=snippet,contentDetails,statistics,status
Description: This example retrieves a video resource and identifies several resource parts that should be included in the API response. API response:
{ "kind": "youtube#videoListResponse", "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/sDAlsG9NGKfr6v5AlPZKSEZdtqA\"", "videos": [ { "id": "7lCDEYXw3mM", "kind": "youtube#video", "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/iYynQR8AtacsFUwWmrVaw4Smb_Q\"", "snippet": { "publishedAt": "2012-06-20T22:45:24.000Z", "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", "title": "Google I/O 101: Q&A On Using Google APIs", "description": "Antonio Fuentes speaks to us and takes questions on working with Google APIs and OAuth 2.0.", "thumbnails": { "default": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/default.jpg" }, "medium": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/mqdefault.jpg" }, "high": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/hqdefault.jpg" } }, "categoryId": "28" }, "contentDetails": { "duration": "PT15M51S", "aspectRatio": "RATIO_16_9" }, "statistics": { "viewCount": "3057", "likeCount": "25", "dislikeCount": "0", "favoriteCount": "17", "commentCount": "12" }, "status": { "uploadStatus": "STATUS_PROCESSED", "privacyStatus": "PRIVACY_PUBLIC" } } ] }
उदाहरण 2
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&part=snippet,statistics
Description: This example modifies the part parameter value so that the contentDetails and status properties are not included in the response. API response:
{ "kind": "youtube#videoListResponse", "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/sDAlsG9NGKfr6v5AlPZKSEZdtqA\"", "videos": [ { "id": "7lCDEYXw3mM", "kind": "youtube#video", "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/iYynQR8AtacsFUwWmrVaw4Smb_Q\"", "snippet": { "publishedAt": "2012-06-20T22:45:24.000Z", "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", "title": "Google I/O 101: Q&A On Using Google APIs", "description": "Antonio Fuentes speaks to us and takes questions on working with Google APIs and OAuth 2.0.", "thumbnails": { "default": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/default.jpg" }, "medium": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/mqdefault.jpg" }, "high": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/hqdefault.jpg" } }, "categoryId": "28" }, "statistics": { "viewCount": "3057", "likeCount": "25", "dislikeCount": "0", "favoriteCount": "17", "commentCount": "12" } } ] }
उदाहरण 3
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&part=snippet,statistics&fields=items(id,snippet,statistics)
Description: This example adds the fields parameter to remove all kind and etag properties from the API response. API response:
{ "videos": [ { "id": "7lCDEYXw3mM", "snippet": { "publishedAt": "2012-06-20T22:45:24.000Z", "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", "title": "Google I/O 101: Q&A On Using Google APIs", "description": "Antonio Fuentes speaks to us and takes questions on working with Google APIs and OAuth 2.0.", "thumbnails": { "default": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/default.jpg" }, "medium": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/mqdefault.jpg" }, "high": { "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/hqdefault.jpg" } }, "categoryId": "28" }, "statistics": { "viewCount": "3057", "likeCount": "25", "dislikeCount": "0", "favoriteCount": "17", "commentCount": "12" } } ] }
उदाहरण 4
URL: https://www.googleapis.com/youtube/v3/videos?id=7lCDEYXw3mM&key=YOUR_API_KEY
&fields=items(id,snippet(channelId,title,categoryId),statistics)&part=snippet,statistics
Description: This example modifies the fields parameter from example 3 so that in the API response, each video resource's snippet object only includes the channelId, title, and categoryId properties. API response:
{ "videos": [ { "id": "7lCDEYXw3mM", "snippet": { "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw", "title": "Google I/O 101: Q&A On Using Google APIs", "categoryId": "28" }, "statistics": { "viewCount": "3057", "likeCount": "25", "dislikeCount": "0", "favoriteCount": "17", "commentCount": "12" } } ] }

परफ़ॉर्मेंस ऑप्टिमाइज़ करना

ETag इस्तेमाल करना

ETags, एचटीटीपी प्रोटोकॉल का स्टैंडर्ड हिस्सा है. इससे ऐप्लिकेशन, किसी खास एपीआई संसाधन के खास वर्शन के बारे में बता सकते हैं. संसाधन एक पूरा फ़ीड या उस फ़ीड का कोई आइटम हो सकता है. इस सुविधा का इस्तेमाल, यहां दिए गए मामलों में किया जा सकता है:

  • कैशिंग और शर्तों के साथ डेटा वापस पाना – आपका ऐप्लिकेशन, एपीआई संसाधनों और उनके ETag को कैश मेमोरी में सेव कर सकता है. इसके बाद, जब आपका ऐप्लिकेशन किसी सेव किए गए संसाधन के लिए फिर से अनुरोध करता है, तो यह उस संसाधन से जुड़े ETag के बारे में बताता है. अगर संसाधन में बदलाव किया गया है, तो एपीआई, संसाधन के उस वर्शन से जुड़े ETag और बदले गए रिसॉर्स को दिखाता है. अगर रिसॉर्स में कोई बदलाव नहीं किया गया है, तो एपीआई, एचटीटीपी 304 रिस्पॉन्स (Not Modified) दिखाता है. इससे पता चलता है कि रिसॉर्स में कोई बदलाव नहीं हुआ है. आपका ऐप्लिकेशन इस तरीके से कैश मेमोरी में सेव किए गए संसाधनों को भेजकर, इंतज़ार का समय और बैंडविड्थ के इस्तेमाल को कम कर सकता है.

    Google API के लिए क्लाइंट लाइब्रेरी, ETag के साथ अलग तरह से काम करती है. उदाहरण के लिए, JavaScript क्लाइंट लाइब्रेरी, अनुमति वाले अनुरोध के हेडर के लिए अनुमति वाले अनुरोध के हेडर के लिए, अनुमति वाली सूची के ज़रिए ETag के साथ काम करती है. इन हेडर में If-Match और If-None-Match शामिल हैं. व्हाइटलिस्ट, ब्राउज़र को सामान्य कैश मेमोरी में सेव करने की अनुमति देती है, ताकि अगर किसी रिसॉर्स के ETag में बदलाव न हुआ हो, तो रिसॉर्स को ब्राउज़र की कैश मेमोरी से दिखाया जा सके. वहीं दूसरी ओर, ऑब्जे-सी क्लाइंट में ETag काम नहीं करता है.

  • अनजाने में हुए बदलावों से सुरक्षा करना – ETag यह पक्का करने में मदद करता है कि एक से ज़्यादा एपीआई क्लाइंट अनजाने में एक-दूसरे के बदलावों को ओवरराइट न कर दें. किसी संसाधन को अपडेट करते या मिटाते समय, आपका ऐप्लिकेशन संसाधन के ETag के बारे में बता सकता है. अगर ETag, उस रिसॉर्स के सबसे नए वर्शन से मेल नहीं खाता है, तो एपीआई अनुरोध पूरा नहीं हो पाता.

अपने ऐप्लिकेशन में ETag इस्तेमाल करने के कई फ़ायदे हैं:

  • एपीआई, कैश मेमोरी में सेव किए गए, लेकिन बिना बदलाव वाले संसाधनों के अनुरोधों पर तेज़ी से जवाब देता है. इससे इंतज़ार का समय कम होता है और बैंडविड्थ का कम इस्तेमाल होता है.
  • आपका ऐप्लिकेशन अनजाने में किसी ऐसे संसाधन में किए गए बदलावों को ओवरराइट नहीं करेगा जो किसी अन्य एपीआई क्लाइंट से किए गए हैं.

Google APIs Client Library for JavaScript, If-Match और If-None-Match एचटीटीपी अनुरोध हेडर के साथ काम करता है. इस वजह से, Eटैग सामान्य ब्राउज़र कैशिंग के हिसाब से काम करने के लिए चालू करते हैं.

gzip का उपयोग करना

gzip कंप्रेशन को चालू करके, हर एपीआई रिस्पॉन्स के लिए ज़रूरी बैंडविड्थ को भी कम किया जा सकता है. आपके ऐप्लिकेशन को एपीआई रिस्पॉन्स को अनकंप्रेस करने में सीपीयू का ज़्यादा समय लगेगा. हालांकि, नेटवर्क के कम संसाधनों का इस्तेमाल करने का फ़ायदा, आम तौर पर इस लागत से ज़्यादा होता है.

gzip-कोड में बदला गया जवाब पाने के लिए आपको दो काम करने होंगे:

  • Accept-Encoding एचटीटीपी अनुरोध के हेडर को gzip पर सेट करें.
  • अपने उपयोगकर्ता एजेंट में बदलाव करें, ताकि उसमें gzip स्ट्रिंग शामिल हो.

नीचे दिए गए एचटीटीपी हेडर के नमूने में gzip कंप्रेस करने की सुविधा को चालू करने की इन ज़रूरी शर्तों के बारे में बताया गया है:

Accept-Encoding: gzip
User-Agent: my program (gzip)