مثال زمانبندی شیفت

مثال زیر نحوه فراخوانی API را با کتابخانه requests پایتون، با استفاده از یک کلید API برای احراز هویت نشان می‌دهد. برای استفاده از آن:

  • کتابخانه requests پایتون را نصب کنید. از خط فرمان شما: pip install requests .
  • برنامه پایتون زیر را با نام example.py در رایانه خود ذخیره کنید.
  • فایل example_request.json را در همان دایرکتوری برنامه خود ذخیره کنید (این یک نمونه درخواست JSON است).
  • یک فایل credentials.json در همان دایرکتوری برنامه خود با {"key": "your_api_key"} ایجاد کنید.
  • مثال را از خط فرمان اجرا کنید: 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٪ از مهلت مشتری تعیین می کنیم، اما بسته به برنامه می تواند متفاوت باشد. توجه داشته باشید که کلید API نیز به سرفصل‌های جلسه منتقل شد تا تماس 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)