Sobes.tech
Middle

Come implementare un'attesa (wait) per l'API?

sobes.tech AI

Risposta dell'AI

Per i test delle API vengono utilizzate aspettative esplicite basate su condizioni. I metodi più comuni:

  1. Polling (sondaggio): richiesta periodica all'API fino a quando non si ottiene il risultato atteso o scade il timeout.

    import time
    import requests
    
    def wait_for_status(url, expected_status, timeout=30, interval=1):
        """
        Attende uno stato specifico dell'API.
    
        Args:
            url: URL dell'endpoint API.
            expected_status: Codice di stato HTTP atteso.
            timeout: Tempo massimo di attesa in secondi.
            interval: Intervallo tra i tentativi in secondi.
    
        Returns:
            requests.Response: Oggetto di risposta in caso di successo, None in caso di timeout.
        """
        start_time = time.time()
        while time.time() - start_time < timeout:
            try:
                response = requests.get(url)  # O altro metodo HTTP
                if response.status_code == expected_status:
                    return response
            except requests.exceptions.RequestException as e:
                print(f"Errore nella richiesta: {e}") # Log dell'errore
            time.sleep(interval)
        return None # Ritorna None in caso di timeout
    
    # Esempio di utilizzo
    # api_url = "http://example.com/api/resource"
    # expected_status_code = 200
    # response = wait_for_status(api_url, expected_status_code)
    # if response:
    #     print("Stato atteso ricevuto!")
    # else:
    #     print("Timeout in attesa dello stato.")
    
  2. Long polling (sondaggio prolungato): Il client invia una richiesta e il server mantiene la connessione aperta fino a quando non ci sono dati o scade il timeout sul server. Meno comune nelle API REST standard, più usato in architetture basate su eventi o WebSocket.

  3. Webhooks (chiamate di ritorno): L'API chiama un URL specificato sul lato client quando si verifica un evento. Richiede un endpoint accessibile pubblicamente sul lato client per ricevere il webhook.

    • Implementazione:
      • Registrazione dell'URL del webhook tramite l'API di un altro servizio.
      • Scrittura di codice sul lato client per ricevere e processare le richieste HTTP POST del webhook.
      • Attesa (generalmente asincrona) di ricevere dati tramite webhook.

La scelta del metodo dipende dall'architettura dell'API e dai requisiti del test. Il polling è il più diffuso e semplice da implementare per la maggior parte delle API REST.