Hosting di destinazioni di webhook

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Questa guida mostra come ospitare una destinazione webhook in un servizio Cloud Run.

Cloud Functions e Cloud Run

Cloud Functions e Cloud Run offrono entrambi soluzioni ottimali per l'hosting dei target webhook. In genere, Cloud Functions è veloce da configurare, utile per la prototipazione e ideale per i flussi di lavoro a volume inferiore. Cloud Run offre maggiore flessibilità ed è in grado di gestire volumi più grandi contemporaneamente.

Utilizza Cloud Run se:

  • Stai utilizzando linguaggi o runtime non supportati in Cloud Functions
  • Vuoi più timeout delle richieste (fino a 15 minuti)
  • Prevedi un volume elevato e hai bisogno di contemporaneità (80 richieste in parallelo per istanza container)

Creazione di una destinazione webhook in Cloud Run

Con Cloud Run, puoi definire un target webhook in un qualsiasi linguaggio di tua scelta. Devi solo creare un endpoint HTTP in grado di accettare i dati. Generalmente, questa operazione viene eseguita con un elemento POST, ad esempio:

@app.route('/', methods=['POST'])
def index():
    data = request.get_json()

Nell'esempio precedente, la pagina di indice dell'URL è configurata in modo da accettare solo POST richieste e prevede che i dati vengano pubblicati tramite un payload JSON.

Integrazione con il provider webhook

La maggior parte dei servizi che forniscono callback HTTP richiede la verifica della proprietà dell'URL. A tale scopo viene inviato un token, un messaggio o un secret e viene inviata una risposta valida. Devi ottenere questi requisiti dal fornitore di servizi. Utilizzando lo stesso esempio riportato sopra, potrebbe avere il seguente aspetto:

def index():
    data = request.get_json()
    return data['challenge']

Dopo che il fornitore avrà verificato la tua proprietà, dovrai aggiungere l'autorizzazione anche da parte tua.

Autorizzazione delle richieste

Una destinazione webhook è un URL aperto e pubblico. La maggior parte dei servizi fornisce un token o un secret per garantire che le richieste in entrata provengano da servizi autorizzati. Poiché l'URL è pubblico, non puoi impedire tentativi dannosi di inviare dati al target webhook. Tuttavia, l'utilizzo di token o secret garantisce che tu elabori solo i dati provenienti da origini autorizzate.

Per verificare la richiesta, devi archiviare la tua copia del secret come variabile di ambiente o utilizzando un qualche tipo di sistema di gestione delle chiavi. Ogni richiesta deve avere un secret o un token nelle intestazioni della richiesta o nel payload JSON e devi verificarlo per assicurarti che l'origine sia valida.

def index():
    request_secret = request.headers['Secret']
    if request_secret != os.environ['SECRET']:
        return ('Unauthorized', 401)

Se il provider webhook non supporta un meccanismo di autenticazione segreto o di altro tipo, chiunque abbia l'URL della destinazione webhook potrà inviare messaggi. In questo caso, l'implementazione del webhook deve essere sicura per essere esposta a Internet.

Risposta alle richieste

La maggior parte dei servizi richiede la risposta a una richiesta entro un determinato periodo di tempo, come specificato dal servizio. Alcuni webhook dispongono di metodi di ripetizione incorporati se è presente una risposta di errore, ad esempio un codice di stato HTTP 4xx o 5xx. Di conseguenza, devi restituire un codice di stato corretto (2xx) per informare il servizio che l'evento è stato elaborato correttamente.

def index():
    data = request.get_json()
    return ('', 200)

Timeout

Sia Cloud Run che il provider webhook hanno timeout. La domanda più breve verrà applicata alla tua applicazione. Se l'elaborazione dei dati supera il tempo assegnato da Cloud Run o dal provider webhook, dovrai utilizzare un prodotto che ti consenta di completare l'elaborazione in modo asincrono, ad esempio Pub/Sub o Cloud Tasks. Questi prodotti consentono di trasmettere rapidamente i dati, restituire immediatamente una risposta di successo al provider webhook e continuare l'elaborazione senza il problema di timeout. Queste sono anche buone opzioni per la gestione di errori e nuovi tentativi.

Pattern webhook comuni

Tipo Esempi
Inoltro dei dati Invio di una notifica tramite Firebase Cloud Messaging ogni volta che viene richiamato il webhook.
Archiviazione dei dati Archiviazione dei dati in BigQuery per l'analisi successiva.
Azioni di attivazione Evasione delle azioni in Dialogflow, pubblicazione delle risposte su Twitter o invio al tuo ambiente temporaneo quando viene eseguito il commit del nuovo codice in GitHub.

Passaggi successivi