API OR - Esempio Python

L'esempio seguente mostra come chiamare l'API con l'istruzione Python requests utilizzando una chiave API per l'autenticazione. Seleziona prima il metodo dell'API che ti interessa:


Per provarlo:

  • Installa la libreria Python requests. Dalla riga di comando: pip install requests.
  • Salva il seguente programma Python sul computer e assegnagli il nome example.py.
  • Scarica un file JSON di esempio . Scegli il nome example_request.json
  • Esegui l'esempio dalla riga di comando: 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()

Come si impostano le scadenze?

Una scadenza determina il tempo massimo di esecuzione che deve essere effettuato da una chiamata all'API. Un utente può impostare scadenze sia per il client che per il server. Nel contesto dell'API OR, viene eseguita una la scadenza del server è la più utile, in quanto informa il server di backend per il tempo necessario a ricevere una richiesta, eseguire il risolutore sottostante e restituire risposta. Al contrario, le scadenze del cliente sono utili per impostare il tempo massimo l'applicazione client (ovvero l'applicazione che chiama l'API OR) verrà attendere una risposta prima di scadere.

Il seguente snippet di codice imposta una scadenza per il client e per il server le intestazioni di sessione della richiesta. La scadenza del client è impostata su 60 secondi. La la scadenza del server deve essere inferiore a quella del cliente di cui tenere conto overhead di comunicazione. Qui impostiamo la scadenza del server al 95% del client ma questo può variare a seconda dell'applicazione. Nota che l'API è stata spostata anche nelle intestazioni di sessione per effettuare la chiamata session.post(...) più pulito.



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