교대 근무 예약 예
컬렉션을 사용해 정리하기
내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.
다음 예에서는 인증용 API 키를 사용하여 Python requests
라이브러리로 API를 호출하는 방법을 보여줍니다. 사용하려면 다음 안내를 따르세요.
- Python
requests
라이브러리를 설치합니다. 명령줄에서: 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 호출에 걸리는 최대 실제 경과 시간이 결정됩니다.
사용자는 클라이언트 및 서버 기한을 모두 설정할 수 있습니다. OR API의 맥락에서 서버 기한은 백엔드 서버에 요청을 수신하고, 기본 솔버를 실행하고, 응답을 반환하는 데 걸리는 시간을 알려주므로 더 유용합니다. 반면 클라이언트 기한은 클라이언트 애플리케이션(즉, OR API를 호출하는 애플리케이션)이 제한 시간 전에 응답을 기다릴 최대 시간을 설정하는 데 유용합니다.
다음 코드 스니펫은
요청의 세션 헤더입니다. 클라이언트 기한은 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)
달리 명시되지 않는 한 이 페이지의 콘텐츠에는 Creative Commons Attribution 4.0 라이선스에 따라 라이선스가 부여되며, 코드 샘플에는 Apache 2.0 라이선스에 따라 라이선스가 부여됩니다. 자세한 내용은 Google Developers 사이트 정책을 참조하세요. 자바는 Oracle 및/또는 Oracle 계열사의 등록 상표입니다.
최종 업데이트: 2024-09-12(UTC)
[null,null,["최종 업데이트: 2024-09-12(UTC)"],[[["\u003cp\u003eThis page provides a Python example using the \u003ccode\u003erequests\u003c/code\u003e library to call the Optimization API's shift scheduling solver.\u003c/p\u003e\n"],["\u003cp\u003eUsers need to install the \u003ccode\u003erequests\u003c/code\u003e library, prepare an API key, and use the provided JSON request file to run the example.\u003c/p\u003e\n"],["\u003cp\u003eThe example demonstrates how to send a request to the API, handle the response, and save the solution to a file.\u003c/p\u003e\n"],["\u003cp\u003eThe page also explains how to set client and server deadlines to manage the request's execution time.\u003c/p\u003e\n"]]],["This document details using Python's `requests` library to call an API with authentication. Key steps include installing `requests`, saving example Python and JSON files, and creating a `credentials.json` file with the API key. The `example.py` script reads the API key and request data, makes a POST request to the API endpoint, and processes the response. It also explains setting client and server deadlines, demonstrated by defining both in the request session headers.\n"],null,["# Shift Scheduling Example\n\nThe following example showcases how to call the API with the Python `requests`\nlibrary, using an API key for authentication. To use it:\n\n- Install the Python `requests` library. From your command line: `pip install\n requests`.\n- Save the following Python program to your computer, naming it `example.py`.\n- Save the [example_request.json](/static/optimization/service/scheduling/shift_scheduling_request.json) file in the same directory as your program (this is a sample JSON [request](/optimization/service/reference/rest/v1/scheduling/solveShiftScheduling)).\n- Create a `credentials.json` file in the same directory as your program, with `{\"key\": \"your_api_key\"}`\n- Run the example from the command line: `python example.py`.\n\n\n # example.py\n import json\n import requests\n\n def run_example():\n \"\"\"Calls the OR API to solve a shift scheduling problem.\"\"\"\n \n # Endpoint for the workforce scheduling solver in the OR API.\n end_point = \"https://optimization.googleapis.com/v1/scheduling:solveShiftScheduling\"\n \n # Read the API Key from a JSON file with the format:\n # {\"key\": \"your_api_key\"}\n with open(\"credentials.json\") as f:\n credentials = json.load(f)\n api_key = credentials[\"key\"]\n\n # Load the JSON file with the request.\n with open(\"example_request.json\", \"r\") as f:\n json_request = json.load(f)\n\n # Call the API post method.\n response = requests.post(f\"{end_point}?key={api_key}\", json=json_request)\n\n # Process the response.\n if response.ok:\n solution = json.loads(response.content)\n with open(\"example_response.json\", \"w\") as f:\n json.dump(solution, f, indent=2)\n print(solution)\n else:\n error = json.loads(response.content)[\"error\"]\n print(f'Status code {error[\"code\"]}: {error[\"message\"]}')\n\n if __name__ == \"__main__\":\n run_example()\n\nHow to set deadlines?\n---------------------\n\nA deadline determines the maximum wall time that a call to the API should take.\nA user can set both client and server deadlines. In the context of the OR API, a\nserver deadline is the more useful one as it informs the backend server of how\nmuch time it has to receive a request, run the underlying solver, and return a\nresponse. In contrast, client deadlines are useful to set the maximum time that\nthe client application (i.e., the application calling the OR API) is going to\nwait for a response, before timing out.\n\nThe following code snippet sets both a client and a server deadline in the\nsession headers of the request. The client deadline is set to 60 seconds. The\nserver deadline should be less than the client deadline to account for\ncommunication overhead. Here we set the server deadline to be 95% of the client\ndeadline, but this can vary depending on the application. Notice that the API\nkey was also moved to the session headers to make the `session.post(...)` call\ncleaner. \n\n\n\n # Call the API post method.\n session = requests.Session()\n client_deadline_seconds = 60\n server_deadline_seconds = 0.95 * client_deadline_seconds\n session.headers = {\n \"Content-Type\": \"application/json\",\n \"Connection\": \"keep-alive\",\n \"Keep-Alive\": f\"timeout={client_deadline_seconds}, max=1\",\n \"X-Server-Timeout\": f\"{server_deadline_seconds}\",\n \"X-Goog-Api-Key\": api_key,\n }\n response = session.post(end_point, json=json_request, timeout=client_deadline_seconds)"]]