مثال على تصميم الشبكات

يوضّح المثال التالي كيفية طلب البيانات من واجهة برمجة التطبيقات باستخدام مكتبة requests Python، وذلك باستخدام مفتاح واجهة برمجة التطبيقات للمصادقة. لاستخدامها:

  • ثبِّت مكتبة 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/shipping:designShippingNetwork"
    
    # 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)