Sobes.tech
Middle

Как да реализираме изчакване (wait) за API?

sobes.tech AI

Отговор от AI

За тестване на API се използват ясни очаквания, базирани на условия. Най-често срещаните методи:

  1. 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("Изтече времето за изчакване на статуса.")
    
  2. Long polling (дълго изчакване): Клиентът изпраща заявка и сървърът държи връзката отворена, докато не се появят данни или не изтече таймаутът на сървъра. По-рядко се използва в стандартните REST API, по-често в архитектури, базирани на събития или WebSocket.

  3. Webhooks (обратни извиквания): API извиква зададения URL на клиента при възникване на определено събитие. Изисква публично достъпна крайна точка на клиента за получаване на webhook.

    • Реализация:
      • Регистрация на URL на webhook чрез API на друг сервис.
      • Написване на код на клиента за приемане и обработка на HTTP POST заявки от webhook.
      • Изчакване (обикновено асинхронно) на получаване на данни чрез webhook.

Изборът на метод зависи от архитектурата на API и изискванията на теста. Polling е най-разпространеният и най-лесният за реализиране за повечето REST API.