Ejemplo de programación de turnos

En el siguiente ejemplo, se muestra cómo llamar a la API con el requests de Python con una clave de API para la autenticación. Para usarlo, realiza los pasos siguientes:

  • Instala la biblioteca requests de Python. Desde tu línea de comandos: pip install requests.
  • Guarda el siguiente programa de Python en tu computadora y asígnale el nombre example.py.
  • Guarda el archivo example_request.json en el mismo directorio que el archivo (esta es una solicitud JSON de muestra).
  • Crea un archivo credentials.json en el mismo directorio que tu programa, con {"key": "your_api_key"}
  • Ejecuta el ejemplo desde la línea de comandos: 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()

¿Cómo establecer fechas límite?

Un plazo determina el tiempo máximo que debe tardar una llamada a la API. Un usuario puede establecer plazos tanto del cliente como del servidor. En el contexto de la API OR, un el plazo del servidor es el más útil, ya que informa al servidor backend de qué tiempo que tiene para recibir una solicitud, ejecutar el solucionador subyacente y mostrar un respuesta. Por el contrario, las fechas límite del cliente son útiles para establecer el tiempo máximo que la aplicación cliente (es decir, la aplicación que llama a la API de OR) esperará una respuesta antes de que se agote el tiempo de espera.

El siguiente fragmento de código establece un plazo de cliente y de servidor en la encabezados de sesión de la solicitud. El plazo del cliente está configurado en 60 segundos. El el plazo del servidor debe ser menor que el plazo del cliente para tenerlo la sobrecarga de comunicación. Aquí fijamos el plazo del servidor para que sea del 95% del cliente la fecha límite, pero esto puede variar según la postulación. Ten en cuenta que la API también se movió a los encabezados de la sesión para hacer la llamada a session.post(...) limpia.



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