Exemplo de programação de turnos

O exemplo a seguir mostra como chamar a API com a biblioteca requests do Python usando uma chave de API para autenticação. Para usá-lo, faça o seguinte:

  • Instale a biblioteca requests do Python. Na linha de comando: pip install requests.
  • Salve o programa Python a seguir no computador, nomeando-o como example.py.
  • Salve o arquivo example_request.json no mesmo diretório que seu programa. Este é um exemplo de solicitação JSON.
  • Crie um arquivo credentials.json no mesmo diretório que seu programa, com {"key": "your_api_key"}.
  • Execute o exemplo na linha de 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()

Como definir prazos?

Um prazo determina o tempo máximo decorrido que uma chamada para a API deve levar. Um usuário pode definir prazos para o cliente e o servidor. No contexto da API OR, um prazo do servidor é o mais útil, porque informa ao servidor de back-end quanto tempo ele tem para receber uma solicitação, executar o solucionador e retornar uma resposta. Por outro lado, os prazos do cliente são úteis para definir o tempo máximo que o aplicativo cliente (ou seja, o aplicativo que chama a API OR) aguardará uma resposta antes de expirar.

O snippet de código a seguir define um prazo de cliente e um servidor nos cabeçalhos de sessão da solicitação. O prazo do cliente é definido como 60 segundos. O prazo do servidor deve ser menor que o do cliente para contabilizar a sobrecarga de comunicação. Aqui, definimos o prazo do servidor para 95% do prazo do cliente, mas isso pode variar dependendo da aplicação. A chave de API também foi movida para os cabeçalhos da sessão para limpar a chamada session.post(...).



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