Contoh Penjadwalan Shift

Contoh berikut menunjukkan cara memanggil API dengan Python requests library, menggunakan kunci API untuk otentikasi. Untuk menggunakannya:

  • Instal library requests Python. Dari command line: pip install requests.
  • Simpan program Python berikut ke komputer Anda, dan beri nama example.py.
  • Simpan file example_request.json di direktori yang sama dengan (ini adalah contoh permintaan JSON).
  • Buat file credentials.json di direktori yang sama dengan program Anda, dengan {"key": "your_api_key"}
  • Jalankan contoh dari command line: 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()

Bagaimana cara menetapkan tenggat waktu?

Batas waktu menentukan waktu maksimal yang diperlukan panggilan ke API. Pengguna dapat menetapkan tenggat waktu klien dan server. Dalam konteks OR API, batas waktu server lebih berguna karena memberi tahu server backend tentang berapa lama waktu yang diperlukan untuk menerima permintaan, menjalankan solver yang mendasarinya, dan menampilkan respons. Sebaliknya, tenggat waktu klien berguna untuk menetapkan waktu maksimum yang aplikasi klien (yaitu, aplikasi yang memanggil OR API) akan menunggu respons, sebelum {i>time out<i} (waktu tunggu).

Cuplikan kode berikut menetapkan batas waktu klien dan server dalam header sesi permintaan. Batas waktu klien ditetapkan ke 60 detik. Tujuan batas waktu server harus lebih kecil dari tenggat waktu klien untuk memperhitungkan overhead komunikasi. Di sini, kita menetapkan batas waktu server menjadi 95% dari batas waktu klien, tetapi hal ini dapat bervariasi bergantung pada aplikasi. Perhatikan bahwa API tombol juga dipindahkan ke header sesi untuk melakukan panggilan session.post(...) lebih bersih.



# 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)