इस पेज पर बताया गया है कि क्वेरी क्लास का इस्तेमाल करके, चार्ट टूल में डेटा दिखाने के लिए चार्ट टूल के डेटा सोर्स प्रोटोकॉल का इस्तेमाल करने वाली सेवा कैसे लागू की जा सकती है.
कॉन्टेंट
दर्शक
यह पेज उन डेवलपर के लिए है जो चार्ट टूल टूल की लाइब्रेरी की मदद किए बिना ही अपना डेटा सोर्स बनाएंगे. अगर आप उस लाइब्रेरी या किसी दूसरी हेल्पर लाइब्रेरी का इस्तेमाल कर रहे हैं, तो सबसे पहले अपनी लाइब्रेरी के दस्तावेज़ पढ़ें.
यह पेज उन पाठकों के लिए भी है जो क्लाइंट विज़ुअलाइज़ेशन और डेटा सोर्स के बीच कम्यूनिकेशन के लिए इस्तेमाल किए जाने वाले वायर प्रोटोकॉल को समझना चाहते हैं.
विज़ुअलाइज़ेशन बनाते या इस्तेमाल करते समय, आपको यह पेज पढ़ने की ज़रूरत नहीं है.
इस दस्तावेज़ को पढ़ने के लिए, आपको JSON और एचटीटीपी अनुरोध के बुनियादी सिंटैक्स को समझना होगा. आपको यह भी समझना चाहिए कि चार्ट, उपयोगकर्ता के नज़रिये से कैसे काम करते हैं.
खास जानकारी
अपने चार्ट या दूसरे चार्ट के लिए डेटा सोर्स सेवा देने वाली कंपनी बनने के लिए, चार्ट टूल के डेटा सोर्स प्रोटोकॉल को लागू किया जा सकता है. चार्ट टूल के डेटा सोर्स में एक यूआरएल दिखता है, जिसे डेटासोर्स यूआरएल कहा जाता है. इस पर चार्ट पाने के लिए, एचटीटीपी जीईटी अनुरोध भेजे जा सकते हैं. इसके जवाब में, डेटा सोर्स उस फ़ॉर्मैट में मौजूद डेटा को ठीक से दिखाता है जिसका इस्तेमाल चार्ट, पेज पर ग्राफ़िक को रेंडर करने के लिए कर सकता है. इस अनुरोध-रिस्पॉन्स प्रोटोकॉल को Google विज़ुअलाइज़ेशन एपीआई वायर प्रोटोकॉल के नाम से जाना जाता है.
डेटा सोर्स से दिखाया जाने वाला डेटा, फ़ाइल या डेटाबेस जैसे कई संसाधनों से निकाला जा सकता है. सिर्फ़ एक पाबंदी यह है कि डेटा को टाइप किए गए कॉलम वाली दो डाइमेंशन वाली टेबल के तौर पर फ़ॉर्मैट किया जा सकता है.
चार्ट टूल के डेटा सोर्स के तौर पर, आपको अनुरोध को एक खास फ़ॉर्मैट में पार्स करना होगा. उसके बाद, जवाब को खास फ़ॉर्मैट में दिखाना होगा. ऐसा करने के दो सामान्य तरीकों में से एक है:
-
अनुरोध और रिस्पॉन्स को मैनेज करने के लिए, इन हेल्पर लाइब्रेरी में से किसी एक का इस्तेमाल करें.
साथ ही, दिखाए जाने के लिए DataTable बनाएं. अगर इनमें से किसी एक लाइब्रेरी का इस्तेमाल किया जाता है, तो टेबल में मौजूद कोड को लाइब्रेरी में उपलब्ध कराने के लिए, सिर्फ़ कोड लिखना होगा.
- Java डेटा सोर्स लाइब्रेरी - आपके अनुरोध और रिस्पॉन्स को हैंडल करती है. साथ ही, आपके दिए गए डेटा से रिस्पॉन्स टेबल बनाती है. साथ ही, Google चार्ट टूल SQL क्वेरी लैंग्वेज को लागू करती है.
-
Python डेटा सोर्स लाइब्रेरी -
रिस्पॉन्स टेबल बनाने से रिस्पॉन्स सिंटैक्स बनता है. अनुरोध को पार्स करने
या Google चार्ट टूल SQL क्वेरी भाषा को लागू करने को हैंडल नहीं करता है.
या
- अनुरोध को हैंडल करके, डेटाटेबल बनाकर, और जवाब भेजकर अपने डेटा सोर्स को शुरू से लिखें.
यह कैसे काम करता है:
- डेटा सोर्स, डेटासोर्स यूआरएल नाम का यूआरएल दिखाता है. इस पर चार्ट, एचटीटीपी GET अनुरोध भेजते हैं.
- क्लाइंट, पैरामीटर के साथ एचटीटीपी जीईटी अनुरोध करता है. इस पैरामीटर से पता चलता है कि दिखाए गए डेटा के लिए, कौनसा फ़ॉर्मैट इस्तेमाल करना है, वैकल्पिक क्वेरी स्ट्रिंग, और कस्टम पैरामीटर ज़रूरी नहीं हैं.
- Datasource, अनुरोध को स्वीकार करता है और उसे पार्स करता है, जैसा कि अनुरोध के फ़ॉर्मैट में बताया गया है.
- डेटा सोर्स, अनुरोध किए गए फ़ॉर्मैट में डेटा तैयार करता है; आम तौर पर, यह एक JSON टेबल होती है. रिस्पॉन्स फ़ॉर्मैट, रिस्पॉन्स फ़ॉर्मैट सेक्शन में शामिल किए गए हैं. डेटा सोर्स वैकल्पिक रूप से विज़ुअलाइज़ेशन एपीआई क्वेरी की भाषा के साथ काम कर सकता है, जो फ़िल्टर करने, क्रम से लगाने, और डेटा में दूसरी तरह की बदलाव करने की जानकारी देता है.
- डेटासोर्स एक एचटीटीपी रिस्पॉन्स बनाता है, जिसमें सीरियल डेटा और अन्य रिस्पॉन्स पैरामीटर शामिल होते हैं. साथ ही, यह रिस्पॉन्स फ़ॉर्मैट में बताए गए तरीके से क्लाइंट के पास वापस भेजता है
ध्यान दें: अनुरोध और जवाबों के लिए इस दस्तावेज़ में दिए गए सभी पैरामीटर और स्ट्रिंग के कॉन्सटेंट (जैसे, responseHandler
और "ठीक") अंग्रेज़ी के छोटे और केस-सेंसिटिव (बड़े और छोटे अक्षरों में अंतर) होते हैं.
ज़रूरी शर्तें
ये सबसे ज़रूरी शर्तें हैं जिन्हें चार्ट टूल के डेटा सोर्स के तौर पर इस्तेमाल करना है:
- डेटा सोर्स को एचटीटीपी जीईटी अनुरोध स्वीकार करने चाहिए. साथ ही, यह आपके क्लाइंट के लिए उपलब्ध होना चाहिए.
- प्रोटोकॉल, वर्शन स्कीम (मौजूदा वर्शन 0.6 है) को बदल सकता है और इस पर काम करता है. इसलिए, आपके डेटा सोर्स में पिछले वर्शन के साथ-साथ मौजूदा वर्शन को इस्तेमाल करने के अनुरोध शामिल होने चाहिए. नए वर्शन के रिलीज़ होने के साथ ही, आपको उसके लिए सहायता उपलब्ध कराने की कोशिश करनी चाहिए. इससे, ऐसे क्लाइंट के साथ छेड़छाड़ नहीं की जा सकेगी जो नए वर्शन में तुरंत अपग्रेड करते हैं.
- अगर अनुरोध के तौर पर अज्ञात प्रॉपर्टी भेजी जाती हैं, तो अनुरोध की पुष्टि करें. इसकी वजह यह है कि नए वर्शन में ऐसी नई प्रॉपर्टी शामिल हो सकती हैं जिनके बारे में आपको जानकारी नहीं है.
- सिर्फ़ उन प्रॉपर्टी को पार्स करें जिनकी आपको उम्मीद थी. हो सकता है कि नए वर्शन में नई प्रॉपर्टी शामिल की गई हों. ऐसे में, बिना अनुरोध किए अपनी प्रॉपर्टी के लिए पूरी स्ट्रिंग का इस्तेमाल न करें. नुकसान पहुंचाने वाले हमलों से बचने के लिए, सावधानी से पार्स करें और सिर्फ़ उन प्रॉपर्टी का इस्तेमाल करें जिनकी आपको उम्मीद थी.
- अगर आपने क्लाइंट चार्ट को खुद कोड नहीं किया है, तो डेटा सोर्स से जुड़ी ज़रूरी शर्तों का ध्यान रखें. इसमें यह जानकारी शामिल करना शामिल है:
- आप जिन कस्टम पैरामीटर को स्वीकार करते हैं,
- आप Google विज़ुअलाइज़ेशन एपीआई क्वेरी की भाषा को पार्स कर सकते हैं या नहीं और
- आपको किस तरह का डेटा मिलता है और उस डेटा का स्ट्रक्चर क्या होता है, वे किन लाइनों और कॉलम से दिखते हैं, और उनका लेबल क्या होता है.
- ऐसी साइट के लिए सुरक्षा से जुड़ी सभी सावधानियां बरतनी चाहिए जो अनजान क्लाइंट से अनुरोध स्वीकार करती है. अपने पैरामीटर में MD5, हैशिंग, और दूसरे सुरक्षा सिस्टम को सही तरीके से काम करने के लिए कहा जा सकता है. इससे, अनुरोधों की पुष्टि की जा सकती है और नुकसान पहुंचाने वाले हमलों से सुरक्षित रहने में मदद मिलती है. साथ ही, क्लाइंट से यह उम्मीद भी की जा सकती है कि उन्हें आपकी ज़रूरतों के बारे में पता होना चाहिए. हालांकि, अगर आपने चार्ट को खुद कोड नहीं किया है, तो सभी ज़रूरी बातों का ध्यान रखें. नीचे सुरक्षा से जुड़ी ज़रूरी बातें देखें.
- अनुरोध और रिस्पॉन्स स्ट्रिंग, UTF-8 कोड में बदली गई होनी चाहिए.
- सबसे अहम जवाब फ़ॉर्मैट, JSON है. पहले JSON को लागू करें. ऐसा इसलिए, क्योंकि यह वह फ़ॉर्मैट है जिसका इस्तेमाल ज़्यादातर चार्ट करते हैं. इसके बाद, रिस्पॉन्स के अन्य टाइप जोड़ें.
- विज़ुअलाइज़ेशन एपीआई क्वेरी की भाषा के हिसाब से काम करना ज़रूरी नहीं है. हालांकि, यह आपके डेटा सोर्स को ग्राहकों के लिए ज़्यादा काम का बनाता है.
- आपके पास किसी भी तरह के सभी चार्ट से मिलने वाले अनुरोधों के लिए ज़रूरी नहीं है. साथ ही, इसमें कस्टम चार्ट के लिए कस्टम पैरामीटर भी इस्तेमाल किए जा सकते हैं. हालांकि, आपको जवाब के बारे में नीचे दिए गए स्टैंडर्ड फ़ॉर्मैट में बताना चाहिए.
सुरक्षा से जुड़ी बातें
अपना डेटा सोर्स डिज़ाइन करते समय, आपको इस बात का ध्यान रखना होगा कि आपका डेटा कितना सुरक्षित होना चाहिए. आप आसान पासवर्ड ऐक्सेस से लेकर सुरक्षित कुकी प्रमाणीकरण तक, अपनी साइट के लिए कई तरह की सुरक्षा स्कीम का इस्तेमाल कर सकते हैं.
XSSI (क्रॉस-साइट स्क्रिप्ट में शामिल किए गए) के हमलों से चार्ट को खतरा हो सकता है. हो सकता है कि कोई उपयोगकर्ता, नुकसान पहुंचाने वाली स्क्रिप्ट दिखाने वाले पेज पर जाए. इसके बाद, वह मौजूदा उपयोगकर्ता के क्रेडेंशियल का इस्तेमाल करके, डेटा सोर्स के यूआरएल पर क्वेरी करने की कोशिश करे. अगर उपयोगकर्ता ने किसी साइट से लॉग आउट नहीं किया है, तो स्क्रिप्ट को मौजूदा उपयोगकर्ता के रूप में पुष्टि की जाएगी और उस साइट पर अनुमतियां होंगी. <script src> टैग का इस्तेमाल करने से, नुकसान पहुंचाने वाली स्क्रिप्ट JSONP के जैसा डेटा सोर्स शामिल कर सकती है.
सुरक्षा के अतिरिक्त स्तर के तौर पर, आप डेटा सोर्स वाले डोमेन से आने वाले अनुरोधों पर पाबंदी लगा सकते हैं. हालांकि, इससे आपके डेटा सोर्स के दिखने पर पाबंदी लग जाएगी. हालांकि, अगर आपकी संवेदनशील जानकारी आपके डोमेन से बाहर नहीं है, तो आपको उसे ऐक्सेस कर लेना चाहिए. बिना पाबंदी वाला डेटा सोर्स ही ऐसा डेटा सोर्स है जो सिर्फ़ एक डोमेन के अनुरोधों को अनुमति देता है. हालांकि, सभी के लिए उपलब्ध डेटा सोर्स ऐसा होता है जिस पर किसी भी डोमेन की क्वेरी स्वीकार की जा सकती हैं. यहां कुछ डेटा सोर्स लागू करने का तरीका बताया गया है:
यह पक्का करने के लिए कि अनुरोध आपके डोमेन से किया जा रहा है, न कि किसी बाहरी डोमेन से (या उस डोमेन के अंदर मौजूद ब्राउज़र पर जो XSRF के हमले के तहत आता है):
- अनुरोध में "X-DataSource-Auth" हेडर की मौजूदगी की पुष्टि करें. यह हेडर Google के विज़ुअलाइज़ेशन एपीआई से तय होता है. आपको इस हेडर के कॉन्टेंट की जांच करने की ज़रूरत नहीं है. आपको सिर्फ़ इस बात की पुष्टि करनी होगी कि यह हेडर वहां मौजूद है या नहीं. अगर आप Google चार्ट टूल डेटा लाइब्रेरी का इस्तेमाल कर रहे हैं, तो आप इसे लाइब्रेरी मैनेज कर सकते हैं.
- क्लाइंट की पुष्टि करने के लिए, कुकी की पुष्टि करने की सुविधा का इस्तेमाल करें. पुष्टि करने वाली कुकी को जगह देते समय, क्रॉस-डोमेन अनुरोध में कस्टम हेडर इंजेक्ट करने का कोई जाना-पहचाना तरीका नहीं है.
- <script src> टैग के साथ शामिल करने पर, JavaScript को एक्ज़ीक्यूट नहीं होने दें. ऐसा करने के लिए, अपने JSON रिस्पॉन्स को )}' से शुरू करें और उसके बाद एक नई लाइन डालें. आपके क्लाइंट में, रिस्पॉन्स से शुरू होने वाला प्रीफ़िक्स हटा दें. XmlHttpRequest के लिए, यह सिर्फ़ तब संभव होता है, जब अनुरोध उसी डोमेन से आता है.
अनुरोध का फ़ॉर्मैट
क्लाइंट कई एलिमेंट के साथ एचटीटीपी जीईटी अनुरोध भेजता है. इसमें, कस्टम एलिमेंट, वैकल्पिक क्वेरी स्ट्रिंग, हस्ताक्षर, और अन्य एलिमेंट शामिल होते हैं. इस सेक्शन में बताए गए पैरामीटर को सिर्फ़ पार्स करने की ज़िम्मेदारी आपकी है. साथ ही, आपको दूसरों को नुकसान पहुंचाने वाले हमलों से बचाने के लिए सावधानी बरतनी चाहिए.
वैकल्पिक पैरामीटर और सामान्य और कस्टम, दोनों के लिए डिफ़ॉल्ट वैल्यू तय करें. साथ ही, साइट के दस्तावेज़ में अपने सभी डिफ़ॉल्ट दस्तावेज़ दें.
यहां कुछ सैंपल अनुरोध दिए गए हैं (उदाहरण में, इस दस्तावेज़ के आखिर में ज़्यादा अनुरोध और रिस्पॉन्स के सैंपल देखे जा सकते हैं):
ध्यान दें: नीचे दी गई अनुरोध स्ट्रिंग और उदाहरण सेक्शन में मौजूद स्ट्रिंग को भेजने से पहले, यूआरएल को एस्केप किया जाना चाहिए.
Basic request, no parameters: http://www.example.com/mydatasource Request with the tqx parameter that contains two properties: http://www.example.com/mydatasource?tqx=reqId:0;sig:4641982796834063168 Request with a query string: http://www.example.com/mydatasource?tq=limit 1
यहां अनुरोध स्ट्रिंग के सभी स्टैंडर्ड पैरामीटर की सूची दी गई है. ध्यान दें कि पैरामीटर के नाम (जैसे कि "वर्शन") और स्थायी स्ट्रिंग वैल्यू (जैसे कि "ठीक है", "चेतावनी", और "not_modified") दोनों केस-सेंसिटिव (बड़े और छोटे अक्षरों में अंतर) होते हैं. टेबल में यह भी बताया जाता है कि पैरामीटर भेजना ज़रूरी है या नहीं. साथ ही, टेबल से यह भी पता चलता है कि पैरामीटर भेजने की ज़रूरत है या नहीं.
पैरामीटर | अनुरोध में शामिल करना है? |
डेटा सोर्स को हैंडल करना चाहिए? |
जानकारी |
---|---|---|---|
क्यू | नहीं |
नहीं |
Google विज़ुअलाइज़ेशन एपीआई क्वेरी भाषा में लिखी गई एक क्वेरी है. इसमें, दिखाए गए डेटा को फ़िल्टर करने, क्रम से लगाने या उसमें हेर-फेर करने का तरीका बताया गया है. स्ट्रिंग को कोट करना ज़रूरी नहीं है. उदाहरण: |
tqx | नहीं |
हां |
मानक या कस्टम पैरामीटर के लिए कोलन से अलग किए गए कुंजी/वैल्यू पेयर का सेट. जोड़े को सेमीकॉलन लगाकर अलग किया जाता है. यहां विज़ुअलाइज़ेशन के स्टैंडर्ड स्टैंडर्ड पैरामीटर की सूची दी गई है:
जैसे: |
टारगेट | नहीं |
नहीं |
आरक्षित: इस पैरामीटर पर ध्यान न दें. क्वेरी भेजने के लिए इस्तेमाल किया गया तरीका. |
रिस्पॉन्स फ़ॉर्मैट
रिस्पॉन्स का फ़ॉर्मैट, अनुरोध के out
पैरामीटर पर निर्भर करता है. यह पैरामीटर रिस्पॉन्स के संभावित टाइप के बारे में बताता है. हर तरह के अनुरोध का जवाब देने का तरीका जानने के लिए, यहां दिए गए सेक्शन देखें:
- JSON - एक JSON रिस्पॉन्स दिखाता है, जिसमें
JavaScript ऑब्जेक्ट का डेटा शामिल होता है. इसे पॉप्युलेट करने के लिए, सीधे किसी
DataTable
कंस्ट्रक्टर में पास किया जा सकता है. यह अब तक का सबसे सामान्य अनुरोध प्रकार है और सही तरीके से लागू करने के लिए सबसे ज़रूरी है. - CSV - कॉमा-सेपरेटेड वैल्यू की सूची दिखाता है, जिसे ब्राउज़र मैनेज करता है.
- TSV - ब्राउज़र से हैंडल किए जाने के लिए, टैब से अलग की गई वैल्यू की सूची दिखाता है.
- एचटीएमएल - ब्राउज़र को रेंडर करने के लिए एचटीएमएल टेबल दिखाता है.
अपने लिए ये आउटपुट फ़ॉर्मैट जनरेट करने के लिए, Google विज़ुअलाइज़ेशन की डेटा सोर्स लाइब्रेरी (Java) या विज़ुअलाइज़ेशन Python लाइब्रेरी का इस्तेमाल करें.
JSON रिस्पॉन्स फ़ॉर्मैट
अगर अनुरोध में "X-DataSource-Auth" हेडर शामिल है, तो डिफ़ॉल्ट रिस्पॉन्स फ़ॉर्मैट JSON होता है. अगर ऐसा नहीं है, तो JSONP. ध्यान दें कि Google चार्ट क्लाइंट, JSON और JSONP के बदले गए वर्शन के साथ काम करता है. अगर Java या Python हेल्पर लाइब्रेरी का इस्तेमाल किया जा रहा है, तो वे आपके लिए सही कोड डालेंगे. अगर आप हाथ से रिस्पॉन्स पार्स करते हैं, तो JSON में बदलाव नीचे देखें.
अगर आपने एक ही डोमेन के लिए अनुरोध लागू किए हैं, तो आपको अनुरोध में "X-DataSource-Auth" की मौजूदगी की पुष्टि करनी चाहिए. साथ ही, अनुमति वाली कुकी का इस्तेमाल करना चाहिए.
Google विज़ुअलाइज़ेशन एपीआई तरीके
google.visualization.Query.send()
से ही रिस्पॉन्स का यह फ़ॉर्मैट तय होता है.
इस उदाहरण के आखिर में, आपको उदाहरण में, JSON अनुरोधों और जवाबों के कुछ उदाहरण दिखेंगे.
अपने लिए रिस्पॉन्स रिस्पॉन्स बनाने के लिए, आप Java या Python हेल्पर लाइब्रेरी
का इस्तेमाल कर सकते हैं.
रिस्पॉन्स का यह फ़ॉर्मैट, UTF-8 कोड में बदला गया
JSON ऑब्जेक्ट है. इसमें {_tag} का रैप किया गया ऑब्जेक्ट होता है. हर ऑब्जेक्ट को कॉमा लगाकर अलग किया जाता है.
इसमें, नीचे दी गई टेबल में मौजूद प्रॉपर्टी शामिल होती हैं (डेटा
table
प्रॉपर्टी को असाइन किया जाता है). इस JSON ऑब्जेक्ट को अनुरोध के
responseHandler
पैरामीटर वैल्यू में रैप किया जाना चाहिए. इसलिए, अगर अनुरोध का responseHandler
मान
"myHandler" था, तो आपको इस तरह का स्ट्रिंग दिखाना चाहिए (कम शब्दों में जानकारी देने के लिए
सिर्फ़ एक प्रॉपर्टी):
"myHandler({status:ok, ...})"
अगर अनुरोध में responseHandler
वैल्यू शामिल नहीं है, तो डिफ़ॉल्ट वैल्यू "google.visualization.Query.setResponse" होती है. इसलिए, आपको इस तरह की एक स्ट्रिंग दिखानी होगी: (कम शब्दों में जानकारी देने के लिए, सिर्फ़ एक प्रॉपर्टी दिखेगी):
"google.visualization.Query.setResponse({status:ok, ...})"
ये रहे उपलब्ध जवाब ऑब्जेक्ट के सदस्य:
प्रॉपर्टी | ज़रूरी है? |
जानकारी |
---|---|---|
वर्शन | नहीं |
Google विज़ुअलाइज़ेशन वायर प्रोटोकॉल वर्शन नंबर देने वाला एक स्ट्रिंग नंबर. अगर इस नीति की जानकारी नहीं दी जाती है, तो क्लाइंट क्लाइंट को नए वर्शन के तौर पर शामिल करता है. उदाहरण: |
अनुरोध आईडी | हां* |
इस अनुरोध के आईडी की जानकारी देने वाली स्ट्रिंग संख्या. अगर यह
अनुरोध में था, तो वही वैल्यू दें. ज़्यादा जानकारी के लिए,
अनुरोध सेक्शन में
reqId का ब्यौरा देखें. * अगर अनुरोध में इस पैरामीटर के बारे में नहीं बताया गया है, तो आपको जवाब के तौर पर इसे सेट करने की ज़रूरत नहीं है. |
स्थिति | हां |
इस कार्रवाई की सफलता या विफलता का वर्णन करने वाली स्ट्रिंग. यह इनमें से एक और सिर्फ़ एक वैल्यू होनी चाहिए:
उदाहरण: |
चेतावनियां | सिर्फ़ तब, जब status=warning |
एक या ज़्यादा ऑब्जेक्ट की श्रेणी, जिसमें से हर एक में गंभीर समस्या के बारे में बताया गया है.
ज़रूरी है, अगर
उदाहरण: |
गड़बड़ियां | ज़रूरी है, अगर status=error |
एक या एक से ज़्यादा ऑब्जेक्ट की श्रेणी, जिसमें से हर एक गड़बड़ी का ब्यौरा देता है. ज़रूरी होने पर, अगर श्रेणी में यहां दिए गए स्ट्रिंग सदस्य होते हैं (हर सदस्य के लिए सिर्फ़ एक वैल्यू मिलती है):
उदाहरण:
|
सिग | नहीं |
टेबल ऑब्जेक्ट की हैश की गई वैल्यू. इससे क्लाइंट और डेटा सोर्स के बीच, डेटा ट्रांसफ़र को ऑप्टिमाइज़ करने में मदद मिलती है. अपनी पसंद का कोई भी हैश एल्गोरिदम चुना जा सकता है. अगर इस प्रॉपर्टी का इस्तेमाल किया जाता है, तो डेटा वापस न आने पर क्लाइंट की दी गई वैल्यू देनी होगी या नया डेटा मिलने पर नया हैश दिखाना चाहिए. उदाहरण: |
टेबल | नहीं |
आपके डेटा के साथ, JavaScript लिटरल नोटेशन में {cols:[{id:'Col1',label:'',type:'number'}], rows:[{c:[{v:1.0,f:'1'}]}, {c:[{v:2.0,f:'2'}]}, {c:[{v:3.0,f:'3'}]}, {c:[{v:1.0,f:'1'}]} ] }
उदाहरण: नीचे उदाहरण देखें. |
Google की हेल्पर लाइब्रेरी और Google को भेजी गई सभी क्वेरी, सख्त JSON/JSONP दिखाती हैं.
अगर आप दिए गए कोड को खुद पार्स नहीं कर रहे हैं, तो इसका आप पर कोई असर नहीं पड़ेगा. अगर आप मौजूद हैं, तो JSON स्ट्रिंग को JavaScript ऑब्जेक्ट में बदलने के लिए, JSON.parse() का इस्तेमाल करें. एपीआई के ज़रिए JSON को प्रोसेस करने के तरीके में एक अंतर यह है कि वह JavaScript में तारीख की वैल्यू (उदाहरण के लिए, "new date(2008,1,28,0,31,26)" के साथ काम नहीं करती है. एपीआई, तारीख के मान्य JSON फ़ॉर्मैट को, इस फ़ॉर्मैट में स्ट्रिंग के तौर पर दिखाता है: Date(year, month, day[,hour, minute, second[, millisecond]])
. इसमें, दिन के बाद की सभी जानकारी वैकल्पिक होती है और महीने शून्य पर आधारित होते हैं.
JSON के रिस्पॉन्स को ऑप्टिमाइज़ करना
अगर कोई क्लाइंट दो अनुरोध करता है और डेटा में अनुरोधों के बीच कोई बदलाव नहीं होता है, तो डेटा को फिर से नहीं भेजने का मतलब है कि ऐसा करने से बैंडविड्थ खराब हो जाएगा. अनुरोधों को ज़्यादा बेहतर बनाने के लिए, प्रोटोकॉल क्लाइंट पर डेटा को कैश मेमोरी में सेव करता है और अगर पिछले अनुरोध के बाद से डेटा में बदलाव नहीं हुआ है, तो रिस्पॉन्स में सिग्नल भेजा जाता है. यह इस तरह काम करता है:
- क्लाइंट, डेटा सोर्स को एक अनुरोध भेजता है.
- डेटा सोर्स,
DataTable
के साथ-साथDataTable
ऑब्जेक्ट का हैश भी जनरेट करता है और उसके रिस्पॉन्स में दोनों हैश दिखाता है. हैशtqx.
sig
पैरामीटर में दिखता है. Google विज़ुअलाइज़ेशन API क्लाइंटDataTable
औरsig
मान कैश करता है. - क्लाइंट, कैश मेमोरी में सेव की गई
tqx.sig
वैल्यू के साथ डेटा का एक और अनुरोध भेजता है. - डेटा सोर्स, इनमें से किसी एक तरीके से जवाब दे सकता है:
- अगर डेटा, पिछले अनुरोध से बदल गया है, तो डेटा सोर्स,
नया
DataTable
और नयाsig
वैल्यू हैश भेजता है. - अगर पिछले अनुरोध के मुकाबले डेटा में बदलाव नहीं हुआ है, तो डेटा सोर्स
status=error
,reason=not_modified
,sig=old_sig_value
भेजता है.
- अगर डेटा, पिछले अनुरोध से बदल गया है, तो डेटा सोर्स,
नया
- दोनों ही मामलों में, चार्ट होस्ट करने वाले पेज को सही रिस्पॉन्स मिलता है. साथ ही, वह
QueryResponse.getDataTable()
को कॉल करके,DataTable
को फिर से पा सकता है. अगर डेटा एक जैसा है, तो वह सिर्फ़ टेबल का कैश मेमोरी में सेव किया गया वर्शन होगा.
ध्यान दें कि यह सिर्फ़ Google विज़ुअलाइज़ेशन एपीआई पर बने चार्ट से JSON अनुरोधों के लिए काम करता है.
CSV रिस्पॉन्स फ़ॉर्मैट
अगर अनुरोध में out:csv
की जानकारी दी गई है, तो रिस्पॉन्स में कोई मेटाडेटा नहीं, बल्कि डेटा दिखाया जाएगा. CSV टेबल आम तौर पर, कॉमा-सेपरेटेड लिस्ट होती है. इसमें, डेटा की हर लाइन, वैल्यू की एक कॉमा-सेपरेटेड लिस्ट होती है जिसके आखिर में एक UNIX न्यूलाइन वर्ण (\n) होता है. सेल की वैल्यू, हर कॉलम के लिए एक ही तरह की होनी चाहिए. पहली पंक्ति कॉलम लेबल है. तीन लाइनों वाले तीन कॉलम वाली टेबल का उदाहरण यहां दिया गया है:
A, B, C 1.0, "yes", true 2.0, "no", false 3.0, "maybe", true
इस प्रोटोकॉल में CSV फ़ॉर्मैट की जानकारी नहीं दी गई है. CSV फ़ॉर्मैट तय करने के लिए, डेटा सोर्स ज़िम्मेदार है. हालांकि, एक सामान्य फ़ॉर्मैट कॉमा का इस्तेमाल करके, वैल्यू का एक सेट होता है (बिना किसी स्पेस के) और हर लाइन के आखिर में एक नई लाइन (\n) होती है. जब किसी ब्राउज़र को CSV स्ट्रिंग का जवाब मिलता है, तो वह उपयोगकर्ता से स्ट्रिंग खोलने के लिए किस ऐप्लिकेशन का इस्तेमाल करने के लिए कह सकता है या उसे स्क्रीन पर रेंडर कर सकता है. Java और Python ओपन सोर्स लाइब्रेरी, DataTable को CSV स्ट्रिंग में बदलने का तरीका बताती हैं.
अगर अनुरोध
में tqx
पैरामीटर का एक outFileName
सदस्य शामिल है,
तो आपको रिस्पॉन्स हेडर में फ़ाइल का नाम शामिल करना चाहिए.
google.visualization.Query
ऑब्जेक्ट, CSV रिस्पॉन्स के लिए अनुरोध नहीं करता. अगर कोई क्लाइंट CSV का अनुरोध करना चाहता है, तो आप अपने पेज पर विज़ुअलाइज़ेशन टूलबार गैजेट एम्बेड कर सकते हैं या अनुरोध बनाने के लिए कस्टम कोड का इस्तेमाल कर सकते हैं या नीचे दिए गए अनुरोध यूआरएल में दिखाए गए तरीके से, tqx
की out:csv
प्रॉपर्टी को सेट करने वाला लिंक दे सकते हैं:
अनुरोध
http://www.example.com/mydatasource?tqx=reqId:1;out:csv
जवाब
Label 1,Label2\n1,a\n2,b\n3,c\n4,d
TSV रिस्पॉन्स फ़ॉर्मैट
अगर अनुरोध में out:tsv-excel
के बारे में बताया गया है, तो रिस्पॉन्स में कोई भी मेटाडेटा शामिल नहीं है. हालांकि, डेटा को सिर्फ़ टैब
से अलग करके दिखाया गया है.
इसके लिए, कोड को utf-16
कोड में बदला गया है. अगर अनुरोध
में tqx
पैरामीटर का एक outFileName
सदस्य शामिल है,
तो आपको रिस्पॉन्स हेडर में फ़ाइल का नाम शामिल करना चाहिए.
एचटीएमएल रिस्पॉन्स फ़ॉर्मैट
अगर अनुरोध में out:html
के बारे में बताया गया है, तो रिस्पॉन्स के तौर पर एचटीएमएल पेज होना चाहिए, जिसमें डेटा वाली एचटीएमएल टेबल के बारे में बताया जाना चाहिए. यह कोड को डीबग करने के लिए मददगार होता है, क्योंकि ब्राउज़र आपके नतीजे को सीधे पढ़ने वाले फ़ॉर्मैट में रेंडर कर सकता है. google.visualization.Query
ऑब्जेक्ट का इस्तेमाल करके,
एचटीएमएल के जवाब के लिए क्वेरी नहीं भेजी जा सकती.
आपको कस्टम कोड का इस्तेमाल करके या अपने ब्राउज़र में इससे मिलते-जुलते यूआरएल टाइप करके, एचटीएमएल के लिए एक क्वेरी बनानी होगी:
अनुरोध
http://www.example.com/mydatasource?tqx=reqId:1;out:html
जवाब
<html><body><table border='1' cellpadding='2' cellspacing='0'><tr style='font-weight: bold; background-color: #aaa;'><td>label 1</td><td>label 2</td></tr><tr bgcolor='#f0f0f0'><td align='right'>1</td><td>a</td></tr><tr bgcolor='#ffffff'><td align='right'>2</td><td>b</td></tr><tr bgcolor='#f0f0f0'><td align='right'>3</td><td>c</td></tr><tr bgcolor='#ffffff'><td align='right'>4</td><td>d</td></tr></table></body></html>
उदाहरण
यहां अनुरोध के कुछ उदाहरण और जवाब दिए गए हैं. ध्यान दें कि
अनुरोधों को यूआरएल से एस्केप नहीं किया गया है; ऐसा आम तौर पर ब्राउज़र या
google.visualization.Query
ऑब्जेक्ट के ज़रिए किया जाता है.
सामान्य अनुरोध: तीन कॉलम, चार लाइन वाली टेबल से बुनियादी जानकारी मिलती है.
Request: http://www.example.com/mydatasource Response google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'ok',sig:'5982206968295329967',table:{cols:[{id:'Col1',label:'',type:'number'},{id:'Col2',label:'',type:'number'},{id:'Col3',label:'',type:'number'}],rows:[{c:[{v:1.0,f:'1'},{v:2.0,f:'2'},{v:3.0,f:'3'}]},{c:[{v:2.0,f:'2'},{v:3.0,f:'3'},{v:4.0,f:'4'}]},{c:[{v:3.0,f:'3'},{v:4.0,f:'4'},{v:5.0,f:'5'}]},{c:[{v:1.0,f:'1'},{v:2.0,f:'2'},{v:3.0,f:'3'}]}]}});
रिस्पॉन्स हैंडलर का आसान अनुरोध: यह तीन कॉलम वाली, टेबल के अलग-अलग टाइप के साथ तीन टेबल दिखाता है.
Request: http://www.example.com/mydatasource?tqx=responseHandler:myHandlerFunction Response myHandlerFunction({version:'0.6',reqId:'0',status:'ok',sig:'4641982796834063168',table:{cols:[{id:'A',label:'NEW A',type:'string'},{id:'B',label:'B-label',type:'number'},{id:'C',label:'C-label',type:'datetime'}],rows:[{c:[{v:'a'},{v:1.0,f:'1'},{v:new Date(2008,1,28,0,31,26),f:'2/28/08 12:31 AM'}]},{c:[{v:'b'},{v:2.0,f:'2'},{v:new Date(2008,2,30,0,31,26),f:'3/30/08 12:31 AM'}]},{c:[{v:'c'},{v:3.0,f:'3'},{v:new Date(2008,3,30,0,31,26),f:'4/30/08 12:31 AM'}]}]}});
क्वेरी को आसान क्वेरी स्ट्रिंग के साथ इस्तेमाल करें: किसी एक कॉलम के लिए अनुरोध करने पर, चार लाइन वाला एक कॉलम दिखता है.
Request: http://www.example.com/mydatasource?tq=select Col1 Response: google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'ok',sig:'6099996038638149313',table:{cols:[{id:'Col1',label:'',type:'number'}],rows:[{c:[{v:1.0,f:'1'}]},{c:[{v:2.0,f:'2'}]},{c:[{v:3.0,f:'3'}]},{c:[{v:1.0,f:'1'}]}]}});
डेटा में बदलाव नहीं किया गया गड़बड़ी: not_modified
गड़बड़ी का उदाहरण.
Request: http://www.example.com/mydatasource?tqx=reqId:0;sig:4641982796834063168 Response: google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'error',errors:[{reason:'not_modified',message:'Data not modified'}]});
डेटा छोटा होने की चेतावनी: data_truncated
चेतावनी का उदाहरण.
ध्यान दें कि अनुरोध अब भी डेटा दिखाता है.
Request: http://www.example.com/mydatasource?tq=limit 1 Response: google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'warning',warnings:[{reason:'data_truncated',message:'Retrieved data was truncated'}],sig:'1928724788649668508',table:{cols:[{id:'A',label:'NEW A',type:'string'},{id:'B',label:'B-label',type:'number'},{id:'C',label:'C-label',type:'datetime'}],rows:[{c:[{v:'a'},{v:1.0,f:'1'},{v:new Date(2008,1,28,0,31,26),f:'2/28/08 12:31 AM'}]}]}});
ऐक्सेस नहीं मिलने की गड़बड़ी: access_denied
गड़बड़ी का उदाहरण.
Request: http://www.example.com/mydatasource Response: google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'error',errors:[{reason:'access_denied',message:'Access denied',detailed_message:'Access Denied'}]});
अमान्य क्वेरी स्ट्रिंग: अमान्य क्वेरी स्ट्रिंग वाले अनुरोध का उदाहरण. ध्यान दें कि ज़्यादा जानकारी देने वाला मैसेज, असल गड़बड़ी का मैसेज दिखाने के बजाय एक सामान्य मैसेज है.
Request: http://www.example.com/mydatasource?tq=select A Response: google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'error',errors:[{reason:'invalid_query',message:'Invalid query',detailed_message:'Bad query string.'}]});
विकास डिवाइस
- Java Datasource लाइब्रेरी (Google से) - अनुरोध और जवाब को मैनेज करता है, आपके दिए गए डेटा से रिस्पॉन्स टेबल बनाता है, और Google चार्ट टूल की SQL क्वेरी भाषा को लागू करता है.
- Python की डेटा सोर्स लाइब्रेरी (Google से) - रिस्पॉन्स टेबल बनाने के बाद, रिस्पॉन्स सिंटैक्स जनरेट होता है. अनुरोध को पार्स करने या Google चार्ट टूल SQL क्वेरी भाषा को लागू करने को हैंडल नहीं करता.
- MC-Google_विज़ुअलाइज़ेशन (तीसरे पक्ष) - यह PHP सर्वर की लाइब्रेरी है. इसका इस्तेमाल करके पीडीओ का इस्तेमाल करके MySQL, SQLite, और PostgreSQL डेटाबेस इंजन के लिए चार्ट टूल डेटा सोर्स लागू किया जा सकता है.
- bortosky-google-विज़ुअलाइज़ेशन (तीसरे पक्ष) - यह .NET के उपयोगकर्ताओं के लिए, Google विज़ुअलाइज़ेशन एपीआई डेटाटेबल बनाने के लिए हेल्पर लाइब्रेरी है.
- GV Streamer (तीसरे पक्ष) - GV Streamer, सर्वर पर मौजूद एक टूल है. यह अलग-अलग सोर्स से डेटा को Google चार्ट के मान्य क्वेरी रिस्पॉन्स में बदल सकता है. GV Streamer कई भाषाओं (उदाहरण के लिए, PHP, Java, .NET) और कई रॉ डेटा सोर्स (उदाहरण के लिए, MySql) के साथ काम करता है.
- TracGViz (तीसरे पक्ष) - TracGViz एक मुफ़्त और ओपन सोर्स टूल है जो कॉम्पोनेंट उपलब्ध कराता है, ताकि Trac, चार्ट गैजेट का इस्तेमाल कर सके. साथ ही, Trac से मैनेज किए जा रहे डेटा को Google चार्ट टूल के डेटा सोर्स के तौर पर लागू करे.
- vis-table (तीसरे पक्ष) - PHP में 'Google चार्ट टूल' के डेटा सोर्स को लागू करने वाली लाइब्रेरी. इसके तीन मुख्य हिस्से हैं. डेटा टेबल लागू करना, क्वेरी की भाषा का पार्सर, और फ़ॉर्मैट करने वाले लोग.
- Oracle PL/SQL में Google डेटा सोर्स लागू करना (तीसरे पक्ष) - Oracle PL/SQL पैकेज, जो Oracle से सीधे डेटा सोर्स को सर्वर से चालू करने की सुविधा देता है. इसलिए, बुनियादी तौर पर Google चार्ट टूल के डेटा सोर्स के तौर पर, किसी भी Oracle क्वेरी का इस्तेमाल किया जा सकता है (पैकेज में डेटा के साथ JSON फ़ाइल दिखेगी). यह Google क्वेरी लैंग्वेज को पूरी तरह से इस्तेमाल करता है.