Jak zaimplementować oczekiwanie (wait) dla API?
sobes.tech AI
Odpowiedź od AI
Do testowania API stosuje się oczekiwania jawne oparte na warunkach. Najczęstsze metody:
-
Polling (sondowanie): okresowe zapytanie do API, aż do uzyskania oczekiwanego wyniku lub wygaśnięcia limitu czasu.
import time import requests def wait_for_status(url, expected_status, timeout=30, interval=1): """ Oczekuje określonego statusu od API. Args: url: URL końcowego punktu API. expected_status: Oczekiwany kod statusu HTTP. timeout: Maksymalny czas oczekiwania w sekundach. interval: Interwał między próbami w sekundach. Returns: requests.Response: Obiekt odpowiedzi w przypadku sukcesu, None w przypadku przekroczenia limitu czasu. """ start_time = time.time() while time.time() - start_time < timeout: try: response = requests.get(url) # Lub inna metoda HTTP if response.status_code == expected_status: return response except requests.exceptions.RequestException as e: print(f"Błąd podczas żądania: {e}") # Logowanie błędu time.sleep(interval) return None # Zwraca None w przypadku przekroczenia limitu czasu # Przykład użycia # api_url = "http://example.com/api/resource" # expected_status_code = 200 # response = wait_for_status(api_url, expected_status_code) # if response: # print("Oczekiwany status otrzymano!") # else: # print("Przekroczono czas oczekiwania na status.") -
Long polling (długie sondowanie): Klient wysyła żądanie, a serwer utrzymuje połączenie otwarte do momentu pojawienia się danych lub wygaśnięcia limitu czasu na serwerze. Mniej stosowane w standardowych API REST, częściej w architekturach opartych na zdarzeniach lub WebSocket.
-
Webhooks (zwrotne wywołania): API wywołuje określony URL po stronie klienta, gdy wystąpi określone zdarzenie. Wymaga dostępnego publicznie endpointu po stronie klienta do odbioru webhooka.
- Implementacja:
- Rejestracja URL webhooka przez API innej usługi.
- Pisanie kodu po stronie klienta do odbioru i obsługi żądań HTTP POST od webhooka.
- Oczekiwanie (najczęściej asynchronicznie) na dane przez webhook.
- Implementacja:
Wybór metody zależy od architektury API i wymagań testu. Polling jest najpowszechniejszy i najprostszy do implementacji dla większości API REST.