Shift शेड्यूलिंग का उदाहरण

नीचे दिए गए उदाहरण में, पुष्टि करने के लिए एपीआई पासकोड का इस्तेमाल करके, Python requests लाइब्रेरी की मदद से एपीआई को कॉल करने का तरीका बताया गया है. इसका इस्तेमाल करने के लिए:

  • Python requests लाइब्रेरी इंस्टॉल करें. आपकी कमांड लाइन से: pip install requests.
  • नीचे दिए गए Python प्रोग्राम को अपने कंप्यूटर पर सेव करें और इसका नाम 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()

समयसीमा कैसे तय करें?

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

नीचे दिया गया कोड स्निपेट, अनुरोध के सेशन हेडर में क्लाइंट और सर्वर, दोनों की समयसीमा सेट करता है. क्लाइंट के लिए, इसकी समयसीमा 60 सेकंड पर सेट है. सर्वर की समयसीमा, कम्यूनिकेशन ओवरहेड के लिए क्लाइंट की समयसीमा से कम होनी चाहिए. यहां हमने सर्वर की समयसीमा को क्लाइंट की तय समयसीमा के 95% पर सेट किया है. हालांकि, ऐप्लिकेशन के हिसाब से यह अलग-अलग हो सकती है. ध्यान दें कि session.post(...) कॉल क्लीनर को बनाने के लिए, एपीआई पासकोड को सेशन हेडर में भी भेजा गया.



# 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)