Ako implementovať čakanie (wait) pre API?
sobes.tech AI
Odpoveď od AI
Pre testovanie API sa používajú jasné očakávania založené na podmienkach. Najbežnejšie metódy:
-
** polling ** (anketa): Periodická požiadavka na API, kým sa nedosiahne očakávaný výsledok alebo nevyprší časový limit.
import time import requests def wait_for_status(url, expected_status, timeout=30, interval=1): """ Čaká na určitý stav od API. Args: url: URL koncového bodu API. expected_status: Očakávaný kód stavu HTTP. timeout: Maximálny čas čakania v sekundách. interval: Interval medzi pokusmi v sekundách. Returns: requests.Response: Objekt odpovede pri úspechu, None pri timeoute. """ start_time = time.time() while time.time() - start_time < timeout: try: response = requests.get(url) # Alebo iná HTTP metóda if response.status_code == expected_status: return response except requests.exceptions.RequestException as e: print(f"Chyba pri požiadavke: {e}") # Logovanie chyby požiadavky time.sleep(interval) return None # Vrátime None pri timeoute # Príklad použitia # api_url = "http://example.com/api/resource" # expected_status_code = 200 # response = wait_for_status(api_url, expected_status_code) # if response: # print("Očakávaný stav prijatý!") # else: # print("Čakanie na stav vypršalo.") -
** long polling ** (dlhé ankety): Klient odosiela požiadavku a server udržiava spojenie otvorené, kým sa neobjavia údaje alebo nevyprší časový limit na serveri. Menej sa používa v štandardných REST API, častejšie v architektúrach založených na udalostiach alebo WebSocket.
-
** Webhooks ** (zpětné volání): API volá zadanú URL na strane klienta pri výskyte určitej udalosti. Vyžaduje dostupnú verejnú koncovú bodku na strane klienta na príjem webhooku.
- Implementácia:
- Registrácia URL webhooku cez API iného servisu.
- Písanie kódu na strane klienta na príjem a spracovanie HTTP POST požiadaviek od webhooku.
- Čakanie (najčastejšie asynchrónne) na prijatie dát cez webhook.
- Implementácia:
Výber metódy závisí od architektúry API a požiadaviek testu. Polling je najbežnejší a najjednoduchší na implementáciu pre väčšinu REST API.