Z przykładu poniżej dowiesz się, jak wywołać interfejs API za pomocą biblioteki requests
w Pythonie i użyć klucza interfejsu API do uwierzytelniania. Aby go użyć:
- Zainstaluj bibliotekę
requests
w Pythonie. Z poziomu wiersza poleceń:pip install requests
. - Zapisz na komputerze poniższy program w Pythonie, nazywając go
example.py
. - Zapisz plik example_request.json w tym samym katalogu co program (to jest przykładowe żądanie JSON).
- Utwórz plik
credentials.json
w tym samym katalogu co program, za pomocą polecenia{"key": "your_api_key"}
- Uruchom przykład z wiersza poleceń:
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:solveShiftGeneration"
# 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()
Jak ustawić terminy?
Termin określa maksymalny czas działania, jakie powinno trwać wywołanie interfejsu API. Użytkownik może ustawić terminy zarówno klienta, jak i serwera. W kontekście interfejsu API LUB bardziej przydatny jest termin serwera, ponieważ informuje on serwer backendu, ile czasu musi otrzymać żądanie, uruchomić bazowe rozwiązanie i zwrócić odpowiedź. Z kolei terminy dla klienta ułatwiają ustawienie maksymalnego czasu, przez jaki aplikacja kliencka (tj. wywołująca interfejs API OR API) będzie czekać na odpowiedź, zanim przekroczy limit czasu.
Ten fragment kodu podaje w nagłówkach sesji żądania termin upływający zarówno dla klienta, jak i serwera. Ostateczny termin dla klienta jest ustawiony na 60 sekund. Termin ustanowienia serwera powinien być krótszy niż termin dla klienta w związku z kosztami z zakresu komunikacji. W tym miejscu ustawiamy termin dla serwera na 95% terminu dostawy dla klienta, ale ten czas może się różnić w zależności od aplikacji. Zwróć uwagę, że klucz interfejsu API został również przeniesiony do nagłówków sesji, aby usprawnić działanie wywołania 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)