NovitàCome scopriamo un venditore che offre il modello sbagliato, e ti rimborsiamo se succede.
UberLLM

Webhook vs API: Push, Polling e Quando Usare Ciascuno

Webhook vs API confrontati su direzione, traffico, affidabilità e costo, con quando usarli e come combinarli per lavori multimediali AI asincroni.

Il consiglio popolare su webhook vs API è incompleto: usa i webhook per gli aggiornamenti in tempo reale e le API per tutto il resto. Questo tralascia la parte più difficile. Un ricevitore di webhook è un consumatore di messaggi asincrono, e scegliere la consegna push significa accettare la responsabilità per duplicati, notifiche perse, autenticazione e recupero. Il confronto utile non è push contro pull. È economia del traffico contro controllo operativo, con un percorso di recupero per qualsiasi canale fallisca.

Indice

Webhook vs API a colpo d'occhio

Criterio API (richiesta-risposta o polling) Webhook (notifica push)
Direzione Il client invia la richiesta, il server risponde Il provider invia una richiesta HTTP all'URL del client
Chi avvia Client Provider, quando si verifica un evento
Tempistica Quando il client lo chiede Quando si verifica l'evento
Ideale per Stato attuale, cronologia, riempimenti (backfills), riconciliazione Notificare le app quando lo stato cambia o un lavoro termina
Esigenze del client Solo accesso HTTP in uscita Endpoint HTTPS pubblico, verifica della firma, archiviazione
Consegna Risposta diretta a ogni richiesta, se il trasporto ha successo Normalmente consegna "almeno una volta" con tentativi limitati, possibili duplicati e riordino
Recupero da errori Il client riprova e ricontrolla Il provider riprova; il consumer deduplica e riconcilia tramite l'API
Modello di costo Il traffico cresce con la frequenza di polling Il traffico cresce con il volume degli eventi

Un webhook è un meccanismo di consegna di eventi basato su API HTTP, non un loro sostituto. La maggior parte delle integrazioni di produzione necessita di entrambi: un percorso di richiesta per comandi e letture autorevoli, più un percorso di notifica per le modifiche.

Supponiamo che la tua applicazione invii un lavoro di generazione video. Con un'API, il tuo backend invia una richiesta GET utilizzando l'identificatore del task salvato e riceve lo stato attuale del lavoro. La tua applicazione sceglie quando chiedere, quanto aspettare e cosa fare se la richiesta fallisce.

Con un webhook, il provider invia un evento di completamento del lavoro a un endpoint che hai registrato. Il tuo backend accetta quella notifica e pianifica l'azione successiva, come il recupero dell'asset finito. La sessione originale del browser non ha bisogno di rimanere connessa.

Separare il comando dalla notifica

Inviare un lavoro e sapere che è terminato sono operazioni diverse. Un'API può accettare un task immediatamente senza mantenere la connessione aperta finché il calcolo sottostante non termina. Un webhook fornisce quindi un segnale di completamento separato.

Questa distinzione previene un errore di progettazione comune: trattare ogni operazione asincrona come una richiesta HTTP che deve rimanere aperta. Previene anche l'errore opposto, cercare di usare le notifiche di eventi come un registro completo dello stato attuale.

Prima decisione: La tua applicazione deve reagire quando qualcosa cambia, o ha bisogno della risposta solo quando qualcuno la chiede?

Se un utente apre una schermata di cronologia dei lavori, recupera i record attuali. Se un lavoro completato deve attivare la consegna dell'asset mentre nessuno sta guardando quella schermata, usa un percorso basato su eventi. Nessuno dei due modelli elimina la necessità di gestire i fallimenti di rete, ma ognuno mette il chiamante in una posizione diversa per recuperare.

Come ogni modello sposta i dati

Con il polling, il client ripete una richiesta di stato a intervalli regolari, indipendentemente dal fatto che qualcosa sia cambiato o meno. Con un webhook, il provider avvia una richiesta dopo un evento, quindi il traffico di notifica segue l'attività piuttosto che l'orologio.

La [guida di Nylas su webhook e polling]](https://developer.nylas.com/docs/cookbook/use-cases/build/webhooks-vs-polling/) fornisce esempi di traffico sottostante: il polling di una risorsa ogni 60 secondi significa 1,440 richieste al giorno, mentre il suo confronto di 10,000 account produce 2.88 milioni di richieste di polling giornaliere contro circa 500,000 consegne di webhook.

Traffico e latenza per intervallo di polling e frequenza degli eventi

Scenario Richieste o consegne al giorno Latenza di rilevamento
Polling di una risorsa ogni 60 secondi 1,440 richieste 30 secondi in media
Polling di una risorsa ogni 5 minuti 288 richieste, calcolate dall'intervallo 2.5 minuti in media
10,000 account che eseguono il polling ogni 5 minuti 2.88 milioni di richieste 2.5 minuti in media
10,000 account che ricevono circa 50 notifiche di eventi ciascuno Circa 500,000 consegne Tempo di invio dell'evento più eventuali ritardi di riprovo
Risposta testuale in streaming token per token Una richiesta per generazione I token arrivano man mano che vengono generati

Le medie del polling presuppongono che i cambiamenti avvengano indipendentemente dalla pianificazione del polling. Descrivono l'attesa fino al controllo successivo, non il tempo che il provider impiega per eseguire il lavoro.

L'intervallo più breve migliora il tempo di scoperta a costo di più richieste. L'intervallo più lungo riduce il traffico ma lascia il lavoro completato non rilevato. Su scala di account, anche una pianificazione modesta crea un traffico sostanziale perché ogni account inattivo viene comunque controllato.

La consegna tramite webhook elimina quella pianificazione di controllo fissa, ma il conteggio delle consegne non è un conto completo dell'infrastruttura. Le ricerche API dopo le notifiche, i tentativi di consegna, l'archiviazione del ricevitore e l'esecuzione del worker consumano comunque risorse.

Questi sono modelli di comunicazione distinti, non etichette intercambiabili.

Un'infografica che confronta tre modelli di trasmissione dati: Polling, Webhook e Streaming API per la comunicazione client-server.

Lo streaming risolve un problema diverso

Una risposta testuale in streaming mantiene la richiesta aperta e restituisce i token man mano che vengono generati. Per un assistente di codifica interattivo, il tempo al primo token e la continuità dell'output contano più che ricevere una callback di completamento separata.

Le nostre risposte testuali vengono trasmesse in streaming token per token, mentre i lavori di immagini e video restituiscono un task che puoi interrogare (poll) o per il quale ricevi una notifica webhook quando è pronto. La [documentazione dell'API multimediale]](https://uberllm.dev/docs/media) è il punto di partenza per implementare quel percorso di richiesta orientato ai task.

Stima la frequenza degli eventi per risorsa prima di scegliere un intervallo di polling. Una risorsa inattiva e una risorsa in continuo cambiamento non dovrebbero condividere automaticamente la stessa pianificazione.

Per il polling, intervalli più brevi scambiano più traffico per un minore ritardo di rilevamento. I webhook evitano quello scambio particolare, ma lo sostituiscono con il costo di gestire un ricevitore affidabile.

Compromessi di affidabilità che devi considerare nella progettazione

La consegna dei webhook è normalmente almeno una volta, non esattamente una volta. Questo descrive il modello di consegna, non una promessa che un provider ritenterà all'infinito. I tentativi limitati possono comunque terminare con un evento non consegnato, quindi progetta il ricevitore per il caso peggiore piuttosto che per il percorso felice.

Un timeout non dice nulla al mittente su ciò che è successo a valle. Il tuo ricevitore potrebbe salvare l'evento nello storage, quindi perdere l'acknowledgment sulla rete. Quando il mittente ritenta, la tua applicazione riceve di nuovo lo stesso evento e deve gestirlo con eleganza.

Abbina ogni errore a una protezione

  • Consegna duplicata: Archivia un identificatore di evento stabile sotto un vincolo di unicità. Laddove i provider distinguono gli eventi dai tentativi di consegna, deduplica l'elaborazione aziendale per identità dell'evento, non per identità del tentativo.
  • Effetti collaterali ripetuti: Rendi la pubblicazione di asset, gli aggiornamenti degli account e le notifiche ai clienti idempotenti. La deduplicazione dell'ingresso non serve a nulla per un worker che si blocca dopo aver eseguito un'azione ma prima di registrare il successo.
  • Eventi fuori ordine: Controlla lo stato autorevole o una versione documentata della risorsa prima di applicare una transizione. Un evento di "elaborazione" ritardato non deve mai sovrascrivere un'attività completata.
  • Elaborazione lenta: Verifica, accetta in modo duraturo e conferma l'evento prima di affidare un lavoro costoso a un worker della coda.

Le politiche di retry dei provider non sono intercambiabili. La documentazione sui webhook di Supabase richiede una risposta 2xx entro 20 secondi, utilizza un backoff esponenziale e si ferma dopo cinque tentativi falliti. La guida alle garanzie di consegna di Svix documenta il tentativo iniziale di Dynamic più cinque retry nell'arco di circa un giorno, insieme alle regole di retry specifiche per lo stato di Glean.

Comportamento di retry dei webhook documentato per provider

Provider Cosa conta come successo Comportamento di retry
Supabase Risposta 2xx entro 20 secondi Backoff esponenziale, si ferma dopo cinque tentativi falliti
Dynamic Risposta 2xx Tentativo iniziale più cinque retry nell'arco di circa un giorno
Glean Risposta 2xx Ritenta i fallimenti di connessione, i timeout, 408, 429 e 5xx; altre risposte non--2xx sono terminali

L'acknowledgment è un confine di durabilità

Restituire successo prima dello storage duraturo crea una finestra di perdita: il mittente smette di ritentare, ma la tua applicazione non ha nulla di recuperabile. Restituire successo solo dopo l'elaborazione dei media crea il problema opposto: timeout non necessari e consegne duplicate. Conferma l'accettazione duratura, non il lavoro aziendale completato.

La verifica della firma deve avvenire prima di fidarsi del payload. Conserva il corpo della richiesta raw quando lo schema di firma lo richiede e segui la procedura di verifica documentata dal provider piuttosto che firmare un oggetto riserializzato.

Aggiungi la gestione dei dead-letter per i retry esauriti dei worker e l'osservabilità della consegna che collega gli ID degli eventi, gli ID delle attività, i fallimenti di acknowledgment e gli esiti dell'elaborazione. Per la fase di polling dello stesso workflow, classifica i fallimenti con i codici di stato restituiti: l'API di UberLLM rifiuta le chiamate con codici di errore come 402, 404, 429 e 503, il che consente a un job di riconciliazione di separare un rifiuto di fatturazione da un throttling o da un venditore temporaneamente non disponibile.

Un polling mancato viene recuperato controllando di nuovo. Un webhook mancato necessita di un'altra consegna o di un passaggio di riconciliazione indipendente che rilegga lo stato autorevole dell'attività su base programmata. Costruisci quel passaggio sia che tu esponga o meno un ricevitore; è ciò che trasforma la consegna "almeno una volta" in un'elaborazione effettiva "esattamente una volta".

Quando il Polling è la Scelta Più Sicura

I webhook sono un problema di affidabilità della consegna, non solo un'API più veloce. Se la tua applicazione non può supportare il contratto del ricevitore, il polling può essere la scelta più affidabile.

La differenza operativa è più facile da vedere al confine del consumatore.

Un diagramma comparativo che illustra perché il polling è un'alternativa più affidabile alla consegna tramite webhook per l'integrazione API.

Un agente desktop, uno strumento interno dietro un firewall o un runner CI effimero possono avere accesso in uscita senza un indirizzo in entrata stabile. Far sì che questi client ricevano callback può richiedere un servizio ospitato aggiuntivo, l'autenticazione tra i componenti e un passaggio duraturo al chiamante originale. Questa è infrastruttura, non una modifica di configurazione minore.

Riconosci i vincoli che favoriscono il polling

  • Nessun endpoint pubblico stabile: Mantieni la comunicazione in uscita invece di esporre un ambiente di sviluppo temporaneo.
  • Nessun consumatore di eventi duraturo: Interroga lo stato autorevole mentre costruisci uno storage e un'elaborazione sicuri. Un ricevitore che dimentica gli eventi accettati non è un miglioramento.
  • Ripristino controllato dal consumatore: Pianifica i controlli in base ai tuoi limiti di concorrenza, finestre di manutenzione e scadenze dell'applicazione.

Supponiamo che uno strumento di build su un laptop di uno sviluppatore invii un'attività multimediale remota. Può controllare periodicamente fino al completamento, fermarsi quando lo sviluppatore annulla e riprendere dall'identificatore dell'attività salvata. Per un piccolo numero di lavori attivi, questo può essere più semplice ed economico che mantenere un ricevitore sempre disponibile.

Il polling richiede comunque disciplina. Rallenta in caso di errori transitori, evita di sincronizzare i controlli di ogni client e smetti di controllare le attività terminali. Anche con le richieste in uscita è possibile una tempesta di tentativi.

Il video di accompagnamento offre un altro modo per visualizzare la distinzione tra richiesta e callback.

Scegli il modello che il tuo consumatore può recuperare in modo affidabile, non il modello con la dimostrazione di successo più veloce.

Il traffico webhook in entrata aggiunge sicurezza dell'endpoint, controlli di firma, accodamento, soppressione dei duplicati e requisiti di disponibilità. Il polling ti dà un controllo esplicito su quando avviene l'operazione successiva, anche se i limiti di frequenza del provider si applicano comunque.

Usa un webhook con un fallback di polling quando la consegna in entrata è pratica e gli eventi frequenti lo giustificano; altrimenti, esegui il polling con la tua cadenza, concorrenza e timeout.

Come costruire il flusso ibrido per i lavori multimediali

Un'integrazione ibrida tratta le callback come prompt per verificare il lavoro, non come l'unica prova dell'esistenza del lavoro. L'identità persistente del task collega la richiesta iniziale, la notifica in arrivo, i controlli di recupero e il risultato finale per il cliente.

Utilizziamo il tracciamento asincrono dei task e le callback webhook per mantenere in movimento i workflow multimediali ad alto volume. Per i lavori di immagini e video, questo tracciamento significa che un'interruzione su un venditore non comporta la perdita del lavoro del cliente.

Il workflow mantiene separate la submission, la notifica e il recupero dello stato.

Un diagramma che illustra il workflow ibrido in tre fasi per l'elaborazione di lavori multimediali utilizzando un'API e webhook.

Stabilire una proprietà duratura del task

  1. Invia tramite l'API e salva l'ID del task restituito. Rendilo persistente con uno stato di coda prima di iniziare il lavoro a valle. Crea un record di submission locale in anticipo, ove possibile, perché una callback veloce può precedere la risposta di submission. L'errore comune è presumere che le callback arrivino sempre dopo il commit del database. Conserva gli eventi non corrispondenti per un'associazione successiva.

  2. Registra un receiver che accoda in modo duraturo gli eventi accettati. Mantieni il request handler piccolo e invia un acknowledgement prontamente dopo l'accettazione sicura. Non restituire successo prima dello storage e non scaricare o trasformare l'asset finito all'interno dell'handler.

  3. Verifica l'autenticità, quindi deduplica l'elaborazione. La verifica della firma deve avvenire all'ingress prima che un evento sia considerato affidabile o riconosciuto; il worker quindi controlla l'identità dell'evento persistente prima di applicare gli effetti. L'errore comune è trattare questi passaggi come una pulizia opzionale dopo l'elaborazione. Mantieni separati lo stato di accettazione e di elaborazione in modo che un worker interrotto possa riprendere in sicurezza.

Convergi sul completamento autorevole

  1. Recupera lo stato autorevole del task. Usa l'ID del task salvato prima di contrassegnare il lavoro del cliente come completo. Un evento può contenere solo un identificatore e una notifica ritardata può descrivere una transizione più vecchia. Per un'implementazione di editing di immagini, la guida all'API di fotoritocco fornisce un workflow di richiesta concreto su cui basarsi.

  2. Esegui il polling dei task che rimangono in sospeso oltre la loro finestra prevista. Utilizza backoff, jitter e un conteggio massimo di tentativi per ogni ciclo di controllo. Non risottomettere ciecamente la generazione quando manca una callback, perché il task originale potrebbe essere già completo.

  3. Imposta una scadenza dell'applicazione e riconcilia i task obsoleti quotidianamente. Distingui una generazione fallita da un fallimento del controllo dello stato. Se lo stato del provider rimane sconosciuto alla tua scadenza, registra un esito esplicito di recupero o fallimento piuttosto che lasciare l'interfaccia del cliente in coda indefinitamente.

Controllo di integrità: Ogni ID di task salvato deve portare a un esito terminale dell'applicazione, completo o fallito, entro il tuo timeout. Mantieni lo stato del provider irrisolto visibile agli operatori in modo che un timeout dell'applicazione non abbandoni un risultato che necessita ancora di recupero.

Scegli in base al Carico di Lavoro e ai Vincoli

Inizia con il carico di lavoro, quindi scarta qualsiasi schema che la tua implementazione non può supportare. Il meccanismo di notifica più veloce non sarà d'aiuto se il client ricevente non può accettare richieste in entrata o se il team non può recuperare l'elaborazione interrotta.

Mappatura carico di lavoro-schema

Carico di lavoro Schema consigliato Motivo principale
Generazione di testo breve o risposta di codice API sincrona con streaming Una risposta necessaria rapidamente
Lavoro di immagine, video, musica o parlato Invia tramite API, webhook al completamento, fallback con polling Il tempo di completamento è imprevedibile
Client mobile o browser senza endpoint pubblico Polling Non può accettare chiamate in entrata avviate dal provider
Rifornimento o riconciliazione di record passati Chiamate API di elenco Necessita dello stato attuale e storico
Feed di eventi ad alto volume come lo stato degli ordini Webhook con consumer idempotente e riconciliazione Appropriato quando la frequenza degli eventi è molto inferiore alla frequenza di polling proposta

Un browser può comunque ricevere aggiornamenti dell'applicazione tramite il proprio backend, ma quel backend possiede il ricevitore webhook. Non inserire credenziali del provider o segreti di verifica del callback nel browser per aggirare tale responsabilità.

Il carico di lavoro e il vincolo di implementazione dovrebbero essere valutati insieme.

Un diagramma che illustra la scelta tra chiamate API sincrone e lavori multimediali in coda basati su carico di lavoro e vincoli.

Usa il costo operativo totale come fattore decisivo

Un'analisi citata nell'articolo sull'architettura webhook di Xictron ha rilevato che solo 1.5% di 30 milioni di richieste di polling hanno restituito un aggiornamento. Ciò illustra come un polling mal sintonizzato possa sprecare traffico, non che ogni integrazione webhook costerà meno.

Confronta l'intervallo di polling, la frequenza degli eventi, la dimensione del payload e i limiti del provider con l'hosting del ricevitore, l'archiviazione della coda, il monitoraggio e la risposta agli incidenti. Conta anche le letture API di cui il tuo worker webhook ha ancora bisogno. Una notifica leggera seguita da un recupero autorevole non è un'architettura senza richieste.

Per un'applicazione multi-provider, ispeziona la coerenza dello schema degli eventi e il comportamento di fallback. Normalizzare lo stato delle attività nel tuo modello di applicazione può essere più importante di piccole differenze nella velocità di notifica.

Regola di selezione: Preferisci il percorso primario più semplice che soddisfi il requisito rivolto all'utente, quindi finanzia il percorso di recupero prima di ottimizzare la latenza.

Usa un'API quando l'applicazione ha bisogno di una risposta a una richiesta. Usa i webhook quando deve reagire ai cambiamenti e può operare un ricevitore sicuro e duraturo. Aggiungi controlli di stato indipendenti per i lavori a lunga esecuzione e mantieni il polling controllato dal consumer quando la consegna in entrata non è possibile.

Prima dell'implementazione, annota la frequenza degli eventi prevista per risorsa, se puoi esporre un endpoint stabile e come gestirai l'elaborazione duplicata. Quindi effettua una semplice richiesta API e verifica di poter salvare e recuperare l'attività risultante prima di aggiungere i callback.


UberLLM offre tutti i modelli tramite una singola API key e accetta i formati wire di OpenAI e Anthropic, quindi i client esistenti possono usare l'appropriato base URL e le credenziali. Per i workflow di immagini e video, scegli il task polling o la notifica webhook quando il risultato è pronto. Visita UberLLM per testare il percorso di richiesta, quindi aggiungi i percorsi di completamento e recupero di cui la tua applicazione ha bisogno.