يوضّح المثال التالي كيفية طلب بيانات من واجهة برمجة التطبيقات باستخدام Python requests
المكتبة، باستخدام مفتاح واجهة برمجة التطبيقات للمصادقة. لاستخدامها:
- ثبِّت مكتبة Python
requests
. من سطر الأوامر: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()
كيف يمكن تحديد المواعيد النهائية؟
يحدِّد الموعد النهائي الحد الأقصى للوقت الذي يجب أن تستغرقه أيّ طلب إلى واجهة برمجة التطبيقات. يمكن للمستخدم ضبط الموعد النهائي لكل من العميل والخادم. في سياق واجهة برمجة التطبيقات 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)