يوضّح المثال التالي كيفية طلب واجهة برمجة التطبيقات من خلال مكتبة requests
في Python، باستخدام مفتاح واجهة برمجة تطبيقات للمصادقة. لاستخدامه:
- ثبِّت مكتبة
requests
في Python. من سطر الأوامر:pip install requests
. - احفظ برنامج Python التالي على جهاز الكمبيوتر الخاص بك، وقم بتسميته
example.py
. - احفظ ملف example_request.json في الدليل نفسه الذي يتضمّن برنامجك (هذا نموذج JSON request).
- أنشئ ملف
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:solveShiftGeneration"
# 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)