Sobes.tech
Middle

Jak zaimplementować oczekiwanie (wait) dla API?

sobes.tech AI

Odpowiedź od AI

Do testowania API stosuje się oczekiwania jawne oparte na warunkach. Najczęstsze metody:

  1. Polling (sondowanie): okresowe zapytanie do API, aż do uzyskania oczekiwanego wyniku lub wygaśnięcia limitu czasu.

    import time
    import requests
    
    def wait_for_status(url, expected_status, timeout=30, interval=1):
        """
        Oczekuje określonego statusu od API.
    
        Args:
            url: URL końcowego punktu API.
            expected_status: Oczekiwany kod statusu HTTP.
            timeout: Maksymalny czas oczekiwania w sekundach.
            interval: Interwał między próbami w sekundach.
    
        Returns:
            requests.Response: Obiekt odpowiedzi w przypadku sukcesu, None w przypadku przekroczenia limitu czasu.
        """
        start_time = time.time()
        while time.time() - start_time < timeout:
            try:
                response = requests.get(url)  # Lub inna metoda HTTP
                if response.status_code == expected_status:
                    return response
            except requests.exceptions.RequestException as e:
                print(f"Błąd podczas żądania: {e}") # Logowanie błędu
            time.sleep(interval)
        return None # Zwraca None w przypadku przekroczenia limitu czasu
    
    # Przykład użycia
    # api_url = "http://example.com/api/resource"
    # expected_status_code = 200
    # response = wait_for_status(api_url, expected_status_code)
    # if response:
    #     print("Oczekiwany status otrzymano!")
    # else:
    #     print("Przekroczono czas oczekiwania na status.")
    
  2. Long polling (długie sondowanie): Klient wysyła żądanie, a serwer utrzymuje połączenie otwarte do momentu pojawienia się danych lub wygaśnięcia limitu czasu na serwerze. Mniej stosowane w standardowych API REST, częściej w architekturach opartych na zdarzeniach lub WebSocket.

  3. Webhooks (zwrotne wywołania): API wywołuje określony URL po stronie klienta, gdy wystąpi określone zdarzenie. Wymaga dostępnego publicznie endpointu po stronie klienta do odbioru webhooka.

    • Implementacja:
      • Rejestracja URL webhooka przez API innej usługi.
      • Pisanie kodu po stronie klienta do odbioru i obsługi żądań HTTP POST od webhooka.
      • Oczekiwanie (najczęściej asynchronicznie) na dane przez webhook.

Wybór metody zależy od architektury API i wymagań testu. Polling jest najpowszechniejszy i najprostszy do implementacji dla większości API REST.