以下示例展示了如何使用 Python requests
调用该 API
库,使用 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/shipping:designShippingNetwork"
# 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%
但此期限可能会因申请而异请注意
键也移到了会话标头中,以进行 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)