Exemple de planification d'équipes

L'exemple suivant montre comment appeler l'API avec la bibliothèque Python requests en utilisant une clé API pour l'authentification. Pour l'utiliser :

  • Installez la bibliothèque Python requests. Depuis la ligne de commande: pip install requests.
  • Enregistrez le programme Python suivant sur votre ordinateur, puis nommez-le example.py.
  • Enregistrez le fichier example_request.json dans le même répertoire que votre programme (il s'agit d'un exemple de requête JSON).
  • Créez un fichier credentials.json dans le même répertoire que votre programme, avec {"key": "your_api_key"}.
  • Exécutez l'exemple à partir de la ligne de commande: 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()

Comment définir des délais ?

Un délai détermine la durée maximale d'exécution d'un appel à l'API. Un utilisateur peut définir des échéances client et serveur. Dans le contexte de l'API OR, la date limite du serveur est la plus utile, car elle informe le serveur backend du temps dont il dispose pour recevoir une requête, exécuter le résolveur sous-jacent et renvoyer une réponse. En revanche, les délais côté client sont utiles pour définir le délai maximal pendant lequel l'application cliente (c'est-à-dire l'application appelant l'API OR) attend une réponse avant d'expirer.

L'extrait de code suivant définit un délai côté client et serveur dans les en-têtes de session de la requête. Le délai côté client est défini sur 60 secondes. Le délai du serveur doit être inférieur à celui du client pour tenir compte de la surcharge de communication. Ici, nous définissons le délai du serveur à 95% de la date limite du client, mais cela peut varier en fonction de l'application. Notez que la clé API a également été déplacée dans les en-têtes de session pour que l'appel session.post(...) soit plus nettoyé.



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