Places Insights API की वेब सेवाओं के इस्तेमाल के सबसे सही तरीके

Google Maps Platform की वेब सेवाएं, Google के लिए एचटीटीपी इंटरफ़ेस का कलेक्शन हैं आपके मैप ऐप्लिकेशन के लिए भौगोलिक डेटा देने वाली सेवाएं.

इस गाइड में, कुछ सामान्य तरीक़ों के बारे में बताया गया है. वेब सेवा अनुरोध और सेवा से जुड़े जवाबों को प्रोसेस किया जा सकता है. डेवलपर की गाइड देखें Places Insights API के पूरे दस्तावेज़ देखने के लिए.

वेब सेवा क्या है?

Google Maps Platform की वेब सेवाएं, बाहरी सेवाओं से Maps API के डेटा का अनुरोध करने और अपने Maps ऐप्लिकेशन में डेटा का इस्तेमाल करने के लिए एक इंटरफ़ेस हैं. ये सेवाएं हैं: के अनुसार उपयोग किए जाने के लिए डिज़ाइन किया गया है, लाइसेंस से जुड़ी पाबंदियां देखें.

Maps APIs की वेब सेवाएं, खास यूआरएल के लिए एचटीटीपी(एस) अनुरोधों का इस्तेमाल करती हैं. साथ ही, सेवाओं के लिए यूआरएल पैरामीटर और/या JSON फ़ॉर्मैट में पोस्ट किया गया डेटा, आर्ग्युमेंट के तौर पर पास करती हैं. आम तौर पर, ये सेवाएं आपके ऐप्लिकेशन के लिए, पार्स करने और/या प्रोसेस करने के लिए, रिस्पॉन्स बॉडी में JSON के तौर पर डेटा दिखाती हैं.

नीचे दिए गए उदाहरण में GET से जुड़ा अनुरोध बाकी करें:

AN ACTUAL API CALL INCLUDING THE API_KEY&key=API_KEY

ध्यान दें: Places Insights API के सभी ऐप्लिकेशन के लिए पुष्टि करना ज़रूरी है. पुष्टि करने के क्रेडेंशियल के बारे में ज़्यादा जानें.

एसएसएल/टीएलएस ऐक्सेस

एचटीटीपीएस, Google Maps Platform के उन सभी अनुरोधों के लिए ज़रूरी है जिनमें एपीआई पासकोड का इस्तेमाल किया जाता है या जिनमें उपयोगकर्ता शामिल होता है डेटा शामिल है. एचटीटीपी पर किए गए ऐसे अनुरोध जिनमें संवेदनशील जानकारी शामिल है, उन्हें अस्वीकार किया जा सकता है.

मान्य यूआरएल बनाना

आपको लग सकता है कि "मान्य" यूआरएल साफ़ तौर पर दिखता है, लेकिन ऐसा नहीं है. पता बार में डाला गया कोई यूआरएल ब्राउज़र में खास वर्ण (जैसे, "上海+中國"); ब्राउज़र को आंतरिक रूप से अनुवाद करने की ज़रूरत है. ट्रांसमिशन से पहले उन वर्णों को कोड में बदलने के अलग-अलग तरीके का इस्तेमाल कर सकते हैं. इसी तरह, UTF-8 इनपुट जनरेट करने या स्वीकार करने वाला कोई भी कोड, UTF-8 वर्णों वाले यूआरएल को "मान्य" के तौर पर ले सकता है. हालांकि, वेब सर्वर पर भेजने से पहले, उन वर्णों का अनुवाद करना भी ज़रूरी होगा. इस प्रक्रिया को कहा जाता है यूआरएल को कोड में बदलने की सुविधा या प्रतिशत में कोड में बदलने का तरीका.

विशेष वर्ण

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

यूआरएल में इस्तेमाल किए जा सकने वाले वर्ण
सेट करेंवर्णयूआरएल का इस्तेमाल
अक्षर और अंक अ ख दू ना प रा ग ग ता है ए बी सी डी ई एफ़ जी एच आई जे के एल एम न ओ पी क्यू री एस टी यू डब्ल्यू डब्ल्यू एक्स वाई ज़ेड 0 1 2 3 4 5 6 7 8 9 टेक्स्ट स्ट्रिंग, स्कीम का इस्तेमाल (http), पोर्ट (8080) वगैरह.
गैर-आरक्षित - _ . ~ टेक्स्ट स्ट्रिंग
बुकिंग की गई ! * ' ( ) ; : @ & = + $ , / ? % # [ ] कंट्रोल वर्ण और/या टेक्स्ट स्ट्रिंग

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

  • आपको जिन वर्णों को हैंडल करना है वे ऊपर दिए गए सेट में शामिल नहीं हैं. उदाहरण के लिए, विदेशी भाषाओं के वर्ण जैसे कि 上海+中國 को दिए गए वर्ण से बड़ा है. आम तौर पर, यूआरएल में स्पेस का इस्तेमाल नहीं किया जा सकता. हालांकि, अक्सर स्पेस को प्लस '+' वर्ण का इस्तेमाल करके दिखाया जाता है.
  • ऊपर दिए गए सेट में वर्ण, रिज़र्व किए गए वर्णों के तौर पर मौजूद हैं, लेकिन इसका शाब्दिक इस्तेमाल करना ज़रूरी है. उदाहरण के लिए, यूआरएल में ? का इस्तेमाल यह बताने के लिए किया जाता है कि क्वेरी स्ट्रिंग की शुरुआत में; अगर आपको इसका इस्तेमाल करना है, स्ट्रिंग "? और द मिस्टीरियन्स," आपको उसे एन्कोड करना होगा '?' वर्ण.

यूआरएल के कोड में बदलने के लिए इस्तेमाल किए गए सभी वर्ण, कोड में बदले जाते हैं '%' वर्ण और दो वर्ण के हेक्स कोड का इस्तेमाल करके वैल्यू, जो वर्ण UTF-8 से जुड़ी होनी चाहिए. उदाहरण के लिए, UTF-8 में 上海+中國 को यूआरएल के तौर पर इस तरह एन्कोड किया जाएगा %E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B. कॉन्टेंट बनाने स्ट्रिंग ? and the Mysterians को इस तरह यूआरएल कोड में बदला जाएगा %3F+and+the+Mysterians या %3F%20and%20the%20Mysterians.

वे सामान्य वर्ण जिन्हें एन्कोडिंग की ज़रूरत होती है

कुछ सामान्य वर्ण जिन्हें कोड में बदलना ज़रूरी होता है, वे हैं:

असुरक्षित वर्ण कोड में बदला गया मान
स्पेस %20
" %22
< %3C
> %3E
# %23
% %25
| %7C

उपयोगकर्ता के इनपुट से मिले यूआरएल को कभी-कभी बदलना पेचीदा. उदाहरण के लिए, कोई उपयोगकर्ता "5th&Main St." के रूप में पता दर्ज कर सकता है आम तौर पर, आपको यूआरएल को इसके अलग-अलग हिस्सों से बनाना चाहिए. लिटरल वर्णों के तौर पर किसी भी उपयोगकर्ता के इनपुट को शामिल करता है.

इसके अलावा, Google Maps Platform की सभी वेब सेवाओं के यूआरएल में ज़्यादा से ज़्यादा 16384 वर्ण हो सकते हैं और स्टैटिक वेब एपीआई का इस्तेमाल करें. ज़्यादातर सेवाओं के लिए, इस वर्ण सीमा तक शायद ही कभी पहुंचना होगा. हालांकि, ध्यान रखें कि कुछ सेवाओं के कई पैरामीटर होते हैं, जिनकी वजह से लंबे यूआरएल हो सकते हैं.

Google API का सही तरीके से इस्तेमाल करना

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

एक्स्पोनेंशियल बैकऑफ़

बहुत कम मामलों में, आपके अनुरोध को पूरा करने में कोई गड़बड़ी हो सकती है; तो आपको 4XX या 5XX या तो टीसीपी कनेक्शन आपके क्लाइंट और Google के सर्वर. अक्सर अनुरोध को इस तरह से करना अच्छा रहता है कि पहला अनुरोध पूरा न होने पर, फ़ॉलोअप अनुरोध पूरा हो सकता है. हालांकि, यह ज़रूरी है कि इस प्रोसेस के दौरान, Google के सर्वर से बार-बार अनुरोध करने के लिए लूप में जाते हैं. इस लूपिंग व्यवहार की वजह से, आपके क्लाइंट और Google के बीच नेटवर्क पर लोड बढ़ सकता है. इससे कई लोगों को समस्याएं हो सकती हैं.

एक बेहतर तरीका यह है कि दो कोशिशों के बीच में देरी होने पर, फिर से कोशिश करें. आम तौर पर हर कोशिश में एक से ज़्यादा कारक की मदद से देरी होती है. इसे इस तरीके से जाना जाता है: एक्सपोनेन्शियल बैकऑफ़.

उदाहरण के लिए, वह ऐप्लिकेशन देखें जो Time Zone API:

https://maps.googleapis.com/maps/api/timezone/json?location=39.6034810,-119.6822510&timestamp=1331161200&key=YOUR_API_KEY

Python के इस उदाहरण में, एक्स्पोनेंशियल बैकऑफ़ के साथ अनुरोध करने का तरीका बताया गया है:

import json
import time
import urllib.error
import urllib.parse
import urllib.request

# The maps_key defined below isn't a valid Google Maps API key.
# You need to get your own API key.
# See https://developers.google.com/maps/documentation/timezone/get-api-key
API_KEY = "YOUR_KEY_HERE"
TIMEZONE_BASE_URL = "https://maps.googleapis.com/maps/api/timezone/json"


def timezone(lat, lng, timestamp):

    # Join the parts of the URL together into one string.
    params = urllib.parse.urlencode(
        {"location": f"{lat},{lng}", "timestamp": timestamp, "key": API_KEY,}
    )
    url = f"{TIMEZONE_BASE_URL}?{params}"

    current_delay = 0.1  # Set the initial retry delay to 100ms.
    max_delay = 5  # Set the maximum retry delay to 5 seconds.

    while True:
        try:
            # Get the API response.
            response = urllib.request.urlopen(url)
        except urllib.error.URLError:
            pass  # Fall through to the retry loop.
        else:
            # If we didn't get an IOError then parse the result.
            result = json.load(response)

            if result["status"] == "OK":
                return result["timeZoneId"]
            elif result["status"] != "UNKNOWN_ERROR":
                # Many API errors cannot be fixed by a retry, e.g. INVALID_REQUEST or
                # ZERO_RESULTS. There is no point retrying these requests.
                raise Exception(result["error_message"])

        if current_delay > max_delay:
            raise Exception("Too many retry attempts.")

        print("Waiting", current_delay, "seconds before retrying.")

        time.sleep(current_delay)
        current_delay *= 2  # Increase the delay each time we retry.


if __name__ == "__main__":
    tz = timezone(39.6034810, -119.6822510, 1331161200)
    print(f"Timezone: {tz}")

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

सिंक किए गए अनुरोध

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

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

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

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

मिनट की शुरुआत के अलावा, सिंक करने के अन्य सामान्य समय, आपको सावधान रहना चाहिए टारगेट करने के लिए नहीं का समय घंटे की शुरुआत में होता है और हर दिन की आधी रात को शुरू होता है.

जवाब प्रोसेस किए जा रहे हैं

इस सेक्शन में बताया गया है कि वेब सेवा से मिले जवाबों से, इन वैल्यू को डाइनैमिक तौर पर कैसे एक्सट्रैक्ट किया जा सकता है.

Google Maps की वेब सेवाएं ऐसे जवाब देती हैं जिन्हें भरना आसान होता है समझने में आसान है, लेकिन लोगों के लिए आसान नहीं है. क्वेरी करते समय, का इस्तेमाल करते हैं, तो हो सकता है कि आप कुछ सटीक वैल्यू. आम तौर पर, आपको वेब से मिले जवाबों को पार्स करना होगा और केवल उन मानों को एक्सट्रैक्ट करें जिनमें आपकी रुचि है.

पार्स करने की आपकी स्कीम, इस बात पर निर्भर करती है कि क्या आप लौट रहे हैं JSON में मिला आउटपुट. JSON रिस्पॉन्स, जो पहले से इस फ़ॉर्मैट में हो सकते हैं JavaScript ऑब्जेक्ट, JavaScript में ही प्रोसेस किए जा सकते हैं क्लाइंट-साइड पर.