Poniższy przykład pokazuje, jak wywołać interfejs API za pomocą interfejsu Pythona requests
.
za pomocą klucza interfejsu API
do uwierzytelniania. Aby z niego korzystać:
- Zainstaluj bibliotekę Pythona
requests
. Z poziomu wiersza poleceń:pip install requests
. - Zapisz na komputerze poniższy program w Pythonie, nadając mu nazwę
example.py
. - Zapisz plik example_request.json w tym samym katalogu, w którym znajduje się program (to przykładowe żądanie JSON).
- Utwórz plik
credentials.json
w tym samym katalogu co Twój program, w którym bierze udział{"key": "your_api_key"}
- Uruchom przykład z poziomu 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/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()
Jak ustawić terminy?
Termin określa maksymalny czas działania, jaki powinno zająć wywołanie interfejsu API. Użytkownik może ustawiać terminy zarówno dla klienta, jak i dla serwera. W kontekście interfejsu API LUB na serwer jest bardziej przydatny, bo informuje serwer backendu, w jaki sposób ma dużo czasu na otrzymanie żądania, uruchomienie bazowego rozwiązania i zwrócenie . Natomiast terminy klientów służą natomiast do ustawienia maksymalnego czasu aplikacja kliencka (tj. aplikacja wywołująca interfejs LUB API) wykona oczekiwanie na odpowiedź przed przekroczeniem limitu czasu.
Ten fragment kodu ustawia termin dla klienta i serwera w
nagłówków sesji żądania. Termin dla klienta jest ustawiony na 60 sekund.
termin wykonania usługi powinien być krótszy niż termin, za który odpowiada klient
na wysoki poziom komunikacji. Wyznaczamy termin serwera na 95% wszystkich zadań
ale ten czas może się różnić w zależności od zgłoszenia. Zwróć uwagę, że interfejs API
również został przeniesiony do nagłówków sesji, aby wywołać session.post(...)
jest bardziej przejrzysty.
# 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)