Sobes.tech
Middle

Cum se implementează o așteptare (wait) pentru API?

sobes.tech AI

Răspuns de la AI

Pentru testarea API-urilor, se utilizează așteptări explicite bazate pe condiții. Cele mai comune metode:

  1. Polling (sondare): Solicitare periodică către API până când se obține rezultatul așteptat sau expiră timeout-ul.

    import time
    import requests
    
    def wait_for_status(url, expected_status, timeout=30, interval=1):
        """
        Așteaptă un anumit status de la API.
    
        Args:
            url: URL-ul endpoint-ului API.
            expected_status: Codul de stare HTTP așteptat.
            timeout: Timpul maxim de așteptare în secunde.
            interval: Intervalul între încercări în secunde.
    
        Returns:
            requests.Response: Obiectul de răspuns în caz de succes, None în caz de timeout.
        """
        start_time = time.time()
        while time.time() - start_time < timeout:
            try:
                response = requests.get(url)  # Sau altă metodă HTTP
                if response.status_code == expected_status:
                    return response
            except requests.exceptions.RequestException as e:
                print(f"Eroare la solicitare: {e}") # Logare eroare
            time.sleep(interval)
        return None # Returnează None în caz de timeout
    
    # Exemplu de utilizare
    # api_url = "http://example.com/api/resource"
    # expected_status_code = 200
    # response = wait_for_status(api_url, expected_status_code)
    # if response:
    #     print("Statusul așteptat primit!")
    # else:
    #     print("Timeout așteptând statusul.")
    
  2. Long polling (sondare lungă): Clientul trimite o solicitare și serverul menține conexiunea deschisă până când apar date sau expiră timeout-ul pe server. Mai puțin folosit în API-urile REST standard, mai frecvent în arhitecturi bazate pe evenimente sau WebSocket.

  3. Webhooks (apeluri de întoarcere): API-ul apelează un URL specificat pe partea clientului atunci când are loc un anumit eveniment. Necesită un endpoint accesibil public pe partea clientului pentru a primi webhook-ul.

    • Implementare:
      • Înregistrarea URL-ului webhook prin API-ul unui alt serviciu.
      • Scrierea de cod pe partea clientului pentru a primi și procesa cererile HTTP POST de la webhook.
      • Așteptarea (de obicei asincron) a primirii datelor prin webhook.

Alegerea metodei depinde de arhitectura API-ului și de cerințele testului. Polling-ul este cel mai comun și cel mai simplu de implementat pentru majoritatea API-urilor REST.