次の例は、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% に設定し、
アプリケーションによって異なりますが、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)