OR API – דוגמה ל-Python

בדוגמה הבאה אפשר לראות איך קוראים ל-API באמצעות קוד Python requests. באמצעות מפתח API לאימות. קודם בוחרים את השיטה של ה-API הרצוי:


כדי לנסות את הכלים:

  • מתקינים את ספריית requests של Python. משורת הפקודה שלך: pip install requests.
  • שומרים את תוכנית Python הבאה במחשב ומעניקים לה את השם example.py.
  • הורדת עליך לתת לה את השם example_request.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/"
    
    # 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)