Пример планирования смен

В следующем примере показано, как вызвать API с помощью библиотеки requests Python, используя ключ API для аутентификации. Чтобы использовать его:

  • Установите библиотеку requests Python. Из командной строки: pip install requests .
  • Сохраните следующую программу Python на своем компьютере, назвав ее example.py .
  • Сохраните файл example_request.json в том же каталоге, что и ваша программа (это пример запроса JSON).
  • Создайте файл credentials.json в том же каталоге, что и ваша программа, с помощью {"key": "your_api_key"}
  • Запустите пример из командной строки: 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()

Как установить сроки?

Крайний срок определяет максимальное время, которое должен занять вызов API. Пользователь может установить сроки как для клиента, так и для сервера. В контексте API OR крайний срок сервера является более полезным, поскольку он информирует внутренний сервер о том, сколько времени ему нужно для получения запроса, запуска базового решателя и возврата ответа. Напротив, крайние сроки для клиента полезны для установки максимального времени, в течение которого клиентское приложение (т. е. приложение, вызывающее API OR) будет ожидать ответа до истечения времени ожидания.

Следующий фрагмент кода устанавливает крайний срок как для клиента, так и для сервера в заголовках сеанса запроса. Срок выполнения клиента установлен на 60 секунд. Крайний срок сервера должен быть меньше крайнего срока клиента, чтобы учесть накладные расходы на связь. Здесь мы устанавливаем крайний срок сервера на уровне 95 % от крайнего срока клиента, но он может варьироваться в зависимости от приложения. Обратите внимание, что ключ API также был перенесен в заголовки сеанса, чтобы сделать вызов 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)