ভূ-অবস্থান API ওয়েব পরিষেবাগুলি ব্যবহার করে সর্বোত্তম অনুশীলন

Google মানচিত্র প্ল্যাটফর্ম ওয়েব পরিষেবাগুলি হল আপনার মানচিত্র অ্যাপ্লিকেশনগুলির জন্য ভৌগলিক ডেটা প্রদান করে Google পরিষেবাগুলিতে HTTP ইন্টারফেসের একটি সংগ্রহ৷

এই নির্দেশিকাটি আপনার ওয়েব পরিষেবার অনুরোধগুলি সেট আপ করতে এবং পরিষেবা প্রতিক্রিয়া প্রক্রিয়াকরণের জন্য দরকারী কিছু সাধারণ অনুশীলন বর্ণনা করে৷ জিওলোকেশন API-এর সম্পূর্ণ ডকুমেন্টেশনের জন্য বিকাশকারীর নির্দেশিকা পড়ুন।

একটি ওয়েব পরিষেবা কি?

Google মানচিত্র প্ল্যাটফর্ম ওয়েব পরিষেবাগুলি বহিরাগত পরিষেবাগুলি থেকে মানচিত্র API ডেটা অনুরোধ করার এবং আপনার মানচিত্র অ্যাপ্লিকেশনগুলির মধ্যে ডেটা ব্যবহার করার জন্য একটি ইন্টারফেস৷ Google মানচিত্র প্ল্যাটফর্ম পরিষেবার শর্তাবলীতে লাইসেন্স সীমাবদ্ধতা অনুসারে এই পরিষেবাগুলি একটি মানচিত্রের সাথে ব্যবহার করার জন্য ডিজাইন করা হয়েছে৷

মানচিত্র API-এর ওয়েব পরিষেবাগুলি পরিষেবাগুলির আর্গুমেন্ট হিসাবে নির্দিষ্ট URLগুলিতে HTTP(S) অনুরোধগুলি ব্যবহার করে, URL প্যারামিটার এবং/অথবা JSON- ফর্ম্যাট পোস্ট ডেটা ব্যবহার করে৷ সাধারণত, এই পরিষেবাগুলি আপনার অ্যাপ্লিকেশন দ্বারা পার্সিং এবং/অথবা প্রক্রিয়াকরণের জন্য JSON হিসাবে প্রতিক্রিয়া বডিতে ডেটা ফেরত দেয়।

ভৌগলিক অবস্থানের অনুরোধগুলি POST ব্যবহার করে নিম্নলিখিত URL এ পাঠানো হয়:

https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY

দ্রষ্টব্য : সমস্ত ভূ-অবস্থান API অ্যাপ্লিকেশনের প্রমাণীকরণ প্রয়োজন। প্রমাণীকরণ শংসাপত্র সম্পর্কে আরও তথ্য পান।

SSL/TLS অ্যাক্সেস

API কী ব্যবহার করে বা ব্যবহারকারীর ডেটা ধারণ করে এমন সমস্ত Google মানচিত্র প্ল্যাটফর্ম অনুরোধের জন্য HTTPS প্রয়োজন। সংবেদনশীল ডেটা ধারণ করে HTTP-এর মাধ্যমে করা অনুরোধ প্রত্যাখ্যান করা হতে পারে।

Google API-এর ভদ্র ব্যবহার

খারাপভাবে ডিজাইন করা এপিআই ক্লায়েন্টরা ইন্টারনেট এবং গুগল সার্ভার উভয়েই প্রয়োজনের চেয়ে বেশি লোড রাখতে পারে। এই বিভাগে API-এর ক্লায়েন্টদের জন্য কিছু সেরা অনুশীলন রয়েছে। এই সর্বোত্তম অনুশীলনগুলি অনুসরণ করা আপনাকে API গুলির অসাবধানতাবশত অপব্যবহারের জন্য আপনার অ্যাপ্লিকেশন ব্লক হওয়া এড়াতে সহায়তা করতে পারে।

সূচকীয় ব্যাকঅফ

বিরল ক্ষেত্রে আপনার অনুরোধ পরিবেশন করতে কিছু ভুল হতে পারে; আপনি একটি 4XX বা 5XX HTTP প্রতিক্রিয়া কোড পেতে পারেন, অথবা TCP সংযোগটি আপনার ক্লায়েন্ট এবং Google এর সার্ভারের মধ্যে কোথাও ব্যর্থ হতে পারে৷ প্রায়শই অনুরোধটি পুনরায় চেষ্টা করা সার্থক কারণ মূল ব্যর্থ হলে ফলোআপ অনুরোধ সফল হতে পারে। যাইহোক, Google-এর সার্ভারে বারবার অনুরোধ করা সহজভাবে লুপ না করা গুরুত্বপূর্ণ। এই লুপিং আচরণ আপনার ক্লায়েন্ট এবং Google এর মধ্যে নেটওয়ার্ককে ওভারলোড করতে পারে যা অনেক পক্ষের জন্য সমস্যা সৃষ্টি করে।

একটি ভাল পদ্ধতি হল প্রচেষ্টার মধ্যে ক্রমবর্ধমান বিলম্বের সাথে পুনরায় চেষ্টা করা। সাধারণত বিলম্ব প্রতিটি প্রচেষ্টার সাথে একটি গুণক ফ্যাক্টর দ্বারা বৃদ্ধি করা হয়, একটি পদ্ধতি যা এক্সপোনেনশিয়াল ব্যাকঅফ নামে পরিচিত।

উদাহরণস্বরূপ, এমন একটি অ্যাপ্লিকেশন বিবেচনা করুন যা টাইম জোন এপিআইতে এই অনুরোধ করতে চায়:

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

নিম্নলিখিত পাইথন উদাহরণটি দেখায় কিভাবে সূচকীয় ব্যাকঅফের সাথে অনুরোধ করা যায়:

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-এর পরিকাঠামোতে ডিস্ট্রিবিউটেড ডিনায়েল অফ সার্ভিস (DDoS) আক্রমণের মতো দেখতে পারে এবং সেই অনুযায়ী আচরণ করা হবে। এটি এড়াতে, আপনাকে নিশ্চিত করতে হবে যে API অনুরোধগুলি ক্লায়েন্টদের মধ্যে সিঙ্ক্রোনাইজ করা হয়নি।

উদাহরণস্বরূপ, একটি অ্যাপ্লিকেশন বিবেচনা করুন যা বর্তমান সময় অঞ্চলে সময় প্রদর্শন করে। এই অ্যাপ্লিকেশনটি সম্ভবত ক্লায়েন্ট অপারেটিং সিস্টেমে একটি অ্যালার্ম সেট করবে যা মিনিটের শুরুতে এটিকে জাগিয়ে দেবে যাতে প্রদর্শিত সময় আপডেট করা যায়। সেই অ্যালার্মের সাথে যুক্ত প্রক্রিয়াকরণের অংশ হিসাবে অ্যাপ্লিকেশনটির কোনো API কল করা উচিত নয়

একটি নির্দিষ্ট অ্যালার্মের প্রতিক্রিয়া হিসাবে API কল করা খারাপ কারণ এর ফলে API কলগুলি সময়ের সাথে সমানভাবে বিতরণ না করে এমনকি বিভিন্ন ডিভাইসের মধ্যেও মিনিটের শুরুতে সিঙ্ক্রোনাইজ করা হয়। এটি করার একটি খারাপভাবে ডিজাইন করা অ্যাপ্লিকেশন প্রতিটি মিনিটের শুরুতে স্বাভাবিক মাত্রার ষাট গুণে ট্রাফিকের একটি স্পাইক তৈরি করবে।

পরিবর্তে, একটি সম্ভাব্য ভাল ডিজাইন হল একটি এলোমেলোভাবে নির্বাচিত সময়ে একটি দ্বিতীয় অ্যালার্ম সেট করা। যখন এই দ্বিতীয় অ্যালার্মটি ফায়ার হয় তখন অ্যাপ্লিকেশনটি প্রয়োজনীয় যেকোন API কল করে এবং ফলাফল সংরক্ষণ করে। যখন অ্যাপ্লিকেশনটি মিনিটের শুরুতে তার প্রদর্শন আপডেট করতে চায়, তখন এটি আবার API কল করার পরিবর্তে পূর্বে সংরক্ষিত ফলাফলগুলি ব্যবহার করে। এই পদ্ধতির সাথে, API কলগুলি সময়ের সাথে সমানভাবে ছড়িয়ে পড়ে। আরও, যখন ডিসপ্লে আপডেট করা হচ্ছে তখন API কল রেন্ডারিং করতে দেরি করে না।

মিনিটের শুরুর পাশাপাশি, অন্যান্য সাধারণ সিঙ্ক্রোনাইজেশন সময়গুলিকে লক্ষ্য করা উচিত নয় যাতে লক্ষ্য করা যায় এক ঘন্টার শুরুতে, এবং প্রতিটি দিনের শুরু মধ্যরাতে।

প্রতিক্রিয়া প্রক্রিয়াকরণ

এই বিভাগে আলোচনা করা হয়েছে কিভাবে ওয়েব পরিষেবার প্রতিক্রিয়াগুলি থেকে গতিশীলভাবে এই মানগুলি বের করা যায়।

Google মানচিত্র ওয়েব পরিষেবাগুলি এমন প্রতিক্রিয়াগুলি প্রদান করে যা বোঝা সহজ, কিন্তু ঠিক ব্যবহারকারী বান্ধব নয়৷ একটি কোয়েরি সম্পাদন করার সময়, ডেটার একটি সেট প্রদর্শন করার পরিবর্তে, আপনি সম্ভবত কয়েকটি নির্দিষ্ট মান বের করতে চান। সাধারণত, আপনি ওয়েব পরিষেবা থেকে প্রতিক্রিয়া বিশ্লেষণ করতে চান এবং শুধুমাত্র সেই মানগুলি বের করতে চান যা আপনার আগ্রহের।

আপনি যে পার্সিং স্কিমটি ব্যবহার করেন তা নির্ভর করে আপনি JSON-এ আউটপুট ফেরত দিচ্ছেন কিনা। JSON প্রতিক্রিয়া, ইতিমধ্যে জাভাস্ক্রিপ্ট অবজেক্টের আকারে, ক্লায়েন্টে জাভাস্ক্রিপ্টের মধ্যেই প্রক্রিয়া করা হতে পারে।