OR API – Python-Beispiel

Das folgende Beispiel zeigt, wie die API mit dem Python-requests aufgerufen wird. mithilfe eines API-Schlüssels zur Authentifizierung. Wählen Sie zuerst die Methode der API aus, die Sie verwenden möchten:


Probieren Sie es aus:

  • Installieren Sie die Python-Bibliothek requests. Über die Befehlszeile: pip install requests.
  • Speichern Sie das folgende Python-Programm auf Ihrem Computer und nennen Sie es example.py.
  • JSON-Beispiel herunterladen Name example_request.json
  • 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/"
    
    # 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()

So legen Sie Fristen fest

Ein Termin gibt die maximale Zeit an, die ein API-Aufruf dauern darf. Ein Nutzer kann sowohl Client- als auch Serverfristen festlegen. Im Zusammenhang mit OR API ist die sinnvollere Angabe, da sie den Backend-Server darüber informiert, wie viel Zeit er hat, um eine Anfrage zu erhalten, den zugrunde liegenden Solver auszuführen und eine Antwort. Im Gegensatz dazu sind Fristen von Kunden hilfreich, um die maximale Zeit wird die Clientanwendung (d.h. die Anwendung, die die OR API aufruft) auf eine Antwort warten, bevor eine Zeitüberschreitung auftritt.

Das folgende Code-Snippet legt sowohl ein Client- als auch ein Server-Zeitlimit im Sitzungsheader der Anfrage. Das Zeitlimit des Clients ist auf 60 Sekunden festgelegt. Die Server-Frist sollte kürzer sein als die Client-Frist zur Berücksichtigung Kommunikationsaufwand. Hier haben wir den Servertermin auf 95 % des Kundentermins festgelegt. Dies kann je nach Anwendung variieren. Beachten Sie, dass die API Der Schlüssel wurde auch in die Sitzungsheader verschoben, um den session.post(...)-Aufruf auszuführen sauberer machen.



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