다음 예에서는 인증용 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)