Beispiel für ein Netzwerkdesign

Das folgende Beispiel zeigt, wie die API mit dem Python-requests aufgerufen wird. mithilfe eines API-Schlüssels zur Authentifizierung. Dabei gilt:

  • Installieren Sie die Python-Bibliothek requests. Über die Befehlszeile: pip install requests.
  • Speichern Sie das folgende Python-Programm auf Ihrem Computer und benennen Sie es in example.py um.
  • 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 im selben Verzeichnis wie Ihr Programm und fügen Sie {"key": "your_api_key"}
  • 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/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()

So legen Sie Fristen fest

Eine Frist bestimmt die maximale Echtzeit, die ein Aufruf an die API dauern sollte. 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 Frist für den Server sollte kürzer sein als die Frist für den Client, um den Kommunikationsoverhead zu berücksichtigen. Hier setzen wir die Serverfrist auf 95% des Client Frist einzuhalten, die sich jedoch je nach Bewerbung unterscheiden kann. 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)