Ejemplo de programación de turnos

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

  • 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 tu programa (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 puedo establecer los plazos?

Una fecha límite determina el tiempo máximo que debe tomar una llamada a la API. Un usuario puede establecer plazos tanto para el cliente como para el servidor. En el contexto de la API de OR, un plazo de servidor es el más útil, ya que informa al servidor de backend cuánto tiempo tiene para recibir una solicitud, ejecutar el solucionador de problemas subyacente y mostrar una respuesta. Por el contrario, los plazos 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 agotar el tiempo de espera.

El siguiente fragmento de código establece una fecha límite de cliente y de servidor en los encabezados de la sesión de la solicitud. El plazo para el cliente se establece en 60 segundos. La fecha límite del servidor debe ser inferior a la del cliente para tener en cuenta la sobrecarga de comunicación. Aquí establecemos el plazo del servidor para que sea el 95% del plazo del cliente, pero esto puede variar según la aplicación. Ten en cuenta que la clave de API también se movió a los encabezados de la sesión para que la llamada a session.post(...) sea más 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)