Jak implementovat čekání (wait) pro API?
sobes.tech AI
Odpověď od AI
Pro testování API se používají explicitní očekávání založená na podmínkách. Nejčastější metody:
-
Polling (dotazování): Periodický požadavek na API, dokud není dosažen očekávaný výsledek nebo nevyprší časový limit.
import time import requests def wait_for_status(url, expected_status, timeout=30, interval=1): """ Čeká na určitý stav od API. Args: url: URL koncového bodu API. expected_status: Očekávaný kód stavu HTTP. timeout: Maximální doba čekání v sekundách. interval: Interval mezi pokusy v sekundách. Returns: requests.Response: Objekt odpovědi při úspěchu, None při timeoutu. """ start_time = time.time() while time.time() - start_time < timeout: try: response = requests.get(url) # Nebo jiná HTTP metoda if response.status_code == expected_status: return response except requests.exceptions.RequestException as e: print(f"Chyba při požadavku: {e}") # Logování chyby time.sleep(interval) return None # Vrací None při timeoutu # Příklad použití # api_url = "http://example.com/api/resource" # expected_status_code = 200 # response = wait_for_status(api_url, expected_status_code) # if response: # print("Očekávaný stav obdržen!") # else: # print("Čas vypršel při čekání na stav.") -
Long polling (dlouhé dotazování): Klient odešle požadavek a server udrží spojení otevřené, dokud se neobjeví data nebo nevyprší časový limit na serveru. Méně běžné v standardních REST API, častěji v architekturách založených na událostech nebo WebSocket.
-
Webhooks (zpětné volání): API volá zadanou URL na straně klienta při vzniku určité události. Vyžaduje veřejně dostupný endpoint na straně klienta pro příjem webhooku.
- Implementace:
- Registrace URL webhooku přes API jiného servisu.
- Psaní kódu na straně klienta pro příjem a zpracování HTTP POST požadavků od webhooku.
- Čekání (obvykle asynchronně) na přijetí dat přes webhook.
- Implementace:
Volba metody závisí na architektuře API a požadavcích testu. Polling je nejrozšířenější a nejjednodušší na implementaci pro většinu REST API.