يوضّح المثال التالي كيفية طلب بيانات من واجهة برمجة التطبيقات باستخدام Python requests
المكتبة، باستخدام مفتاح واجهة برمجة التطبيقات للمصادقة. اختَر أولاً طريقة واجهة برمجة التطبيقات
أنت مهتم بـ:
لتجربتها:
- ثبِّت مكتبة Python
requests
. من سطر الأوامر:pip install requests
. - احفظ برنامج Python التالي على جهاز الكمبيوتر، وأطلق عليه اسم
example.py
. - تنزيل نموذج JSON
اختيار الاسم
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()
كيف يمكن تحديد المواعيد النهائية؟
يحدِّد الموعد النهائي الحد الأقصى للوقت الذي يجب أن تستغرقه طلب البيانات من واجهة برمجة التطبيقات. يمكن للمستخدم تحديد مواعيد نهائية للعميل والخادم. في سياق OR API، يكون مهلة المعالج هو الخيار الأكثر فائدة، لأنّه يُعلم خادم الخلفية بالوقت الذي يمكنه فيه تلقّي طلب وتشغيل أداة حلّ المشاكل الأساسية وتقديم ردّ. في المقابل، تعد المواعيد النهائية للعميل مفيدة لتحديد الحد الأقصى للوقت الذي تطبيق العميل (أي التطبيق الذي يستدعي واجهة برمجة تطبيقات 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)