مثال على جدولة نوبات العمل
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
يوضّح المثال التالي كيفية طلب بيانات من واجهة برمجة التطبيقات باستخدام 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)
إنّ محتوى هذه الصفحة مرخّص بموجب ترخيص Creative Commons Attribution 4.0 ما لم يُنصّ على خلاف ذلك، ونماذج الرموز مرخّصة بموجب ترخيص Apache 2.0. للاطّلاع على التفاصيل، يُرجى مراجعة سياسات موقع Google Developers. إنّ Java هي علامة تجارية مسجَّلة لشركة Oracle و/أو شركائها التابعين.
تاريخ التعديل الأخير: 2024-09-12 (حسب التوقيت العالمي المتفَّق عليه)
[null,null,["تاريخ التعديل الأخير: 2024-09-12 (حسب التوقيت العالمي المتفَّق عليه)"],[[["\u003cp\u003eThis page provides a Python example using the \u003ccode\u003erequests\u003c/code\u003e library to call the Optimization API's shift scheduling solver.\u003c/p\u003e\n"],["\u003cp\u003eUsers need to install the \u003ccode\u003erequests\u003c/code\u003e library, prepare an API key, and use the provided JSON request file to run the example.\u003c/p\u003e\n"],["\u003cp\u003eThe example demonstrates how to send a request to the API, handle the response, and save the solution to a file.\u003c/p\u003e\n"],["\u003cp\u003eThe page also explains how to set client and server deadlines to manage the request's execution time.\u003c/p\u003e\n"]]],["This document details using Python's `requests` library to call an API with authentication. Key steps include installing `requests`, saving example Python and JSON files, and creating a `credentials.json` file with the API key. The `example.py` script reads the API key and request data, makes a POST request to the API endpoint, and processes the response. It also explains setting client and server deadlines, demonstrated by defining both in the request session headers.\n"],null,["# Shift Scheduling Example\n\nThe following example showcases how to call the API with the Python `requests`\nlibrary, using an API key for authentication. To use it:\n\n- Install the Python `requests` library. From your command line: `pip install\n requests`.\n- Save the following Python program to your computer, naming it `example.py`.\n- Save the [example_request.json](/static/optimization/service/scheduling/shift_scheduling_request.json) file in the same directory as your program (this is a sample JSON [request](/optimization/service/reference/rest/v1/scheduling/solveShiftScheduling)).\n- Create a `credentials.json` file in the same directory as your program, with `{\"key\": \"your_api_key\"}`\n- Run the example from the command line: `python example.py`.\n\n\n # example.py\n import json\n import requests\n\n def run_example():\n \"\"\"Calls the OR API to solve a shift scheduling problem.\"\"\"\n \n # Endpoint for the workforce scheduling solver in the OR API.\n end_point = \"https://optimization.googleapis.com/v1/scheduling:solveShiftScheduling\"\n \n # Read the API Key from a JSON file with the format:\n # {\"key\": \"your_api_key\"}\n with open(\"credentials.json\") as f:\n credentials = json.load(f)\n api_key = credentials[\"key\"]\n\n # Load the JSON file with the request.\n with open(\"example_request.json\", \"r\") as f:\n json_request = json.load(f)\n\n # Call the API post method.\n response = requests.post(f\"{end_point}?key={api_key}\", json=json_request)\n\n # Process the response.\n if response.ok:\n solution = json.loads(response.content)\n with open(\"example_response.json\", \"w\") as f:\n json.dump(solution, f, indent=2)\n print(solution)\n else:\n error = json.loads(response.content)[\"error\"]\n print(f'Status code {error[\"code\"]}: {error[\"message\"]}')\n\n if __name__ == \"__main__\":\n run_example()\n\nHow to set deadlines?\n---------------------\n\nA deadline determines the maximum wall time that a call to the API should take.\nA user can set both client and server deadlines. In the context of the OR API, a\nserver deadline is the more useful one as it informs the backend server of how\nmuch time it has to receive a request, run the underlying solver, and return a\nresponse. In contrast, client deadlines are useful to set the maximum time that\nthe client application (i.e., the application calling the OR API) is going to\nwait for a response, before timing out.\n\nThe following code snippet sets both a client and a server deadline in the\nsession headers of the request. The client deadline is set to 60 seconds. The\nserver deadline should be less than the client deadline to account for\ncommunication overhead. Here we set the server deadline to be 95% of the client\ndeadline, but this can vary depending on the application. Notice that the API\nkey was also moved to the session headers to make the `session.post(...)` call\ncleaner. \n\n\n\n # Call the API post method.\n session = requests.Session()\n client_deadline_seconds = 60\n server_deadline_seconds = 0.95 * client_deadline_seconds\n session.headers = {\n \"Content-Type\": \"application/json\",\n \"Connection\": \"keep-alive\",\n \"Keep-Alive\": f\"timeout={client_deadline_seconds}, max=1\",\n \"X-Server-Timeout\": f\"{server_deadline_seconds}\",\n \"X-Goog-Api-Key\": api_key,\n }\n response = session.post(end_point, json=json_request, timeout=client_deadline_seconds)"]]