শিফট শিডিউলিং উদাহরণ

নিম্নলিখিত উদাহরণটি প্রমাণীকরণের জন্য একটি API কী ব্যবহার করে পাইথন requests লাইব্রেরি সহ API-কে কীভাবে কল করতে হয় তা দেখায়। এটি ব্যবহার করতে:

  • পাইথন requests লাইব্রেরি ইনস্টল করুন। আপনার কমান্ড লাইন থেকে: pip install requests
  • আপনার কম্পিউটারে নিম্নলিখিত পাইথন প্রোগ্রামটি সংরক্ষণ করুন, এটির নাম example.py
  • আপনার প্রোগ্রামের মতো একই ডিরেক্টরিতে example_request.json ফাইলটি সংরক্ষণ করুন (এটি একটি নমুনা JSON অনুরোধ )।
  • আপনার প্রোগ্রামের মতো একই ডিরেক্টরিতে {"key": "your_api_key"} দিয়ে একটি credentials.json ফাইল তৈরি করুন
  • কমান্ড লাইন থেকে উদাহরণটি চালান: python example.py

# example.py
import json
import requests

def run_example():
    """Calls the OR API to solve a shift scheduling problem."""
    
    # Endpoint for the workforce scheduling solver in the OR API.
    end_point = "https://optimization.googleapis.com/v1/scheduling:solveShiftScheduling"
    
    # Read the API Key from a JSON file with the format:
    # {"key": "your_api_key"}
    with open("credentials.json") as f:
        credentials = json.load(f)
        api_key = credentials["key"]

    # Load the JSON file with the request.
    with open("example_request.json", "r") as f:
        json_request = json.load(f)

    # Call the API post method.
    response = requests.post(f"{end_point}?key={api_key}", json=json_request)

    # Process the response.
    if response.ok:
        solution = json.loads(response.content)
        with open("example_response.json", "w") as f:
            json.dump(solution, f, indent=2)
        print(solution)
    else:
        error = json.loads(response.content)["error"]
        print(f'Status code {error["code"]}: {error["message"]}')

if __name__ == "__main__":
    run_example()

কিভাবে সময়সীমা সেট করতে?

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

নিম্নলিখিত কোড স্নিপেট অনুরোধের সেশন শিরোনামে একটি ক্লায়েন্ট এবং একটি সার্ভারের সময়সীমা উভয়ই সেট করে। ক্লায়েন্টের সময়সীমা 60 সেকেন্ডে সেট করা হয়েছে। সার্ভারের সময়সীমাটি যোগাযোগের ওভারহেডের জন্য অ্যাকাউন্টের জন্য ক্লায়েন্টের সময়সীমার চেয়ে কম হওয়া উচিত। এখানে আমরা ক্লায়েন্টের সময়সীমার 95% সার্ভারের সময়সীমা সেট করেছি, তবে এটি অ্যাপ্লিকেশনের উপর নির্ভর করে পরিবর্তিত হতে পারে। লক্ষ্য করুন যে session.post(...) কল ক্লিনার করার জন্য API কীটি সেশন শিরোনামেও সরানো হয়েছে।



# Call the API post method.
session = requests.Session()
client_deadline_seconds = 60
server_deadline_seconds = 0.95 * client_deadline_seconds
session.headers = {
    "Content-Type": "application/json",
    "Connection": "keep-alive",
    "Keep-Alive": f"timeout={client_deadline_seconds}, max=1",
    "X-Server-Timeout": f"{server_deadline_seconds}",
    "X-Goog-Api-Key": api_key,
}
response = session.post(end_point, json=json_request, timeout=client_deadline_seconds)