Beispiel für Schichterstellung

Das folgende Beispiel zeigt, wie die API mit der Python-Bibliothek requests aufgerufen wird und für die Authentifizierung ein API-Schlüssel verwendet wird. So verwenden Sie sie:

  • Installieren Sie die Python-Bibliothek requests. Über die Befehlszeile: pip install requests.
  • Speichern Sie das folgende Python-Programm auf Ihrem Computer. Nennen Sie es example.py.
  • Speichern Sie die Datei example_request.json im selben Verzeichnis wie Ihr Programm (dies ist eine Beispiel-JSON-Anfrage).
  • Erstellen Sie eine credentials.json-Datei mit {"key": "your_api_key"} im selben Verzeichnis wie Ihr Programm.
  • Führen Sie das Beispiel über die Befehlszeile aus: 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()

Wie lege ich Fristen fest?

Ein Zeitlimit bestimmt die maximale Echtzeit, die ein Aufruf der API in Anspruch nehmen sollte. Ein Nutzer kann sowohl Client- als auch Serverzeitlimits festlegen. Im Kontext der OR API ist ein Serverzeitlimit die nützlicher, da es dem Back-End-Server mitteilt, wie viel Zeit er hat, um eine Anfrage zu empfangen, den zugrunde liegenden Solver ausführen und eine Antwort zurückzugeben. Client-Zeitlimits sind dagegen nützlich, um die maximale Zeit festzulegen, die die Clientanwendung (d.h. die Anwendung, die die OR API aufruft) auf eine Antwort wartet, bevor eine Zeitüberschreitung auftritt.

Mit dem folgenden Code-Snippet werden sowohl ein Client- als auch ein Serverzeitlimit in den Sitzungsheadern der Anfrage festgelegt. Das Zeitlimit des Clients ist auf 60 Sekunden festgelegt. Das Zeitlimit für den Server sollte kürzer als das Zeitlimit des Clients sein, um den Kommunikationsaufwand zu berücksichtigen. Hier legen wir eine Frist für den Server von 95% der Frist fest, die jedoch je nach Anwendung variieren kann. Außerdem wurde der API-Schlüssel in die Sitzungsheader verschoben, um den session.post(...)-Aufruf zu bereinigen.



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