Kako implementirati čekanje (wait) za API?
sobes.tech АИ
Одговор од АИ
Za API testiranje koriste se jasna očekivanja zasnovana na uslovima. Najčešće metode:
-
** polling ** (anketa): Periodični zahtev ka API-ju dok se ne dobije očekivani rezultat ili ne istekne timeout.
import time import requests def wait_for_status(url, expected_status, timeout=30, interval=1): """ Čeka određeni status od API-ja. Args: url: URL krajnje tačke API-ja. expected_status: Očekivani HTTP status kod. timeout: Maksimalno vreme čekanja u sekundama. interval: Interval između pokušaja u sekundama. Returns: requests.Response: Objekat odgovora pri uspehu, None pri timeout-u. """ start_time = time.time() while time.time() - start_time < timeout: try: response = requests.get(url) # Ili druga HTTP metoda if response.status_code == expected_status: return response except requests.exceptions.RequestException as e: print(f"Greška pri zahtevu: {e}") # Logovanje greške zahteva time.sleep(interval) return None # Vraćamo None pri timeout-u # Primer korišćenja # api_url = "http://example.com/api/resource" # expected_status_code = 200 # response = wait_for_status(api_url, expected_status_code) # if response: # print("Očekivani status primljen!") # else: # print("Timeout čekanja statusa.") -
** long polling ** (dugi anketiranje): Klijent šalje zahtev i server drži konekciju otvorenom dok se ne pojave podaci ili ne istekne timeout na serveru. Manje se koristi u standardnim REST API-jevima, češće u arhitekturama zasnovanim na događajima ili WebSocket.
-
** Webhooks ** (povratni pozivi): API poziva zadati URL na strani klijenta pri pojavi određenog događaja. Zahteva dostupnu javnu krajnju tačku na strani klijenta za primanje webhook-a.
- Implementacija:
- Registracija URL-a webhook-a putem API-ja drugog servisa.
- Pisanje koda na strani klijenta za primanje i obradu HTTP POST zahteva od webhook-a.
- Čekanje (najčešće asinhrono) primanja podataka putem webhook-a.
- Implementacija:
Izbor metode zavisi od arhitekture API-ja i zahteva testa. Polling je najčešće i najjednostavnije za implementaciju za većinu REST API-ja.