Esempio di programmazione a turni

L'esempio seguente mostra come chiamare l'API con l'istruzione Python requests utilizzando una chiave API per l'autenticazione. Per utilizzarla:

  • Installa la libreria Python requests. Dalla riga di comando: pip install requests.
  • Salva il seguente programma Python sul tuo computer, assegnandogli il nome example.py.
  • Salva il file example_request.json nella stessa directory del (questa è una richiesta JSON di esempio).
  • Crea un file credentials.json nella stessa directory del programma, con {"key": "your_api_key"}
  • 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/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()

Come impostare 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 sia per il client sia per il server nelle intestazioni della sessione della richiesta. La scadenza del cliente è impostata su 60 secondi. La scadenza del server deve essere inferiore a quella del client per tenere conto del sovraccarico di comunicazione. Qui impostiamo la scadenza del server sul 95% della scadenza 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)