Как да реализираме изчакване (wait) за API?
sobes.tech AI
Отговор от AI
За тестване на API се използват ясни очаквания, базирани на условия. Най-често срещаните методи:
-
Polling (пулване): Периодично изпращане на заявка към API, докато не бъде получен очакваният резултат или не изтече таймаутът.
import time import requests def wait_for_status(url, expected_status, timeout=30, interval=1): """ Изчаква определен статус от API. Args: url: URL на крайната точка на API. expected_status: Очакван код на статус HTTP. timeout: Максимално време за изчакване в секунди. interval: Интервал между опитите в секунди. Returns: requests.Response: Обект на отговор при успех, None при изтичане на таймаута. """ start_time = time.time() while time.time() - start_time < timeout: try: response = requests.get(url) # Или друг HTTP метод if response.status_code == expected_status: return response except requests.exceptions.RequestException as e: print(f"Грешка при заявката: {e}") # Регистриране на грешката time.sleep(interval) return None # Връща None при изтичане на таймаута # Пример за използване # api_url = "http://example.com/api/resource" # expected_status_code = 200 # response = wait_for_status(api_url, expected_status_code) # if response: # print("Очакваният статус е получен!") # else: # print("Изтече времето за изчакване на статуса.") -
Long polling (дълго изчакване): Клиентът изпраща заявка и сървърът държи връзката отворена, докато не се появят данни или не изтече таймаутът на сървъра. По-рядко се използва в стандартните REST API, по-често в архитектури, базирани на събития или WebSocket.
-
Webhooks (обратни извиквания): API извиква зададения URL на клиента при възникване на определено събитие. Изисква публично достъпна крайна точка на клиента за получаване на webhook.
- Реализация:
- Регистрация на URL на webhook чрез API на друг сервис.
- Написване на код на клиента за приемане и обработка на HTTP POST заявки от webhook.
- Изчакване (обикновено асинхронно) на получаване на данни чрез webhook.
- Реализация:
Изборът на метод зависи от архитектурата на API и изискванията на теста. Polling е най-разпространеният и най-лесният за реализиране за повечето REST API.