בדוגמה הבאה אפשר לראות איך קוראים ל-API באמצעות קוד Python requests
.
באמצעות מפתח API לאימות. כדי להשתמש בה:
- מתקינים את ספריית
requests
של Python. משורת הפקודה שלך:pip install requests
. - שומרים במחשב את תוכנת Python הבאה ולתת לה את השם
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)