Hosting di destinazioni webhook

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

Confronto tra Cloud Functions e Cloud Run

Cloud Functions e Cloud Run forniscono entrambe buone soluzioni per ospitare i target dei webhook. In generale, Cloud Functions è rapido da configurare, ideale per la prototipazione e ideale per flussi di lavoro a basso volume. Cloud Run offre maggiore flessibilità ed è in grado di gestire volumi più grandi in contemporanea.

Utilizza Cloud Run se:

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

Creazione di una destinazione webhook in Cloud Run

Con Cloud Run, puoi definire un target per il webhook in qualsiasi linguaggio scegliere. Devi solo creare un endpoint HTTP in grado di accettare i dati. In genere questa operazione viene eseguita con un POST, ad esempio:

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

Nell'esempio precedente, la pagina di indice dell'URL è configurata per accettare solo POST richiede e si aspetta che i dati vengano consegnati 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. Di solito, questo viene fatto inviando un qualche tipo di token, messaggio o segreto. in attesa di una risposta valida. Dovrai ottenere questi requisiti dal un fornitore di servizi per le aziende. Utilizzando lo stesso esempio precedente, il risultato potrebbe essere il seguente:

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

Dopo che il provider ha verificato la tua proprietà, dovrai aggiungere l'autorizzazione anche la tua parte.

Autorizzazione delle richieste

Una destinazione webhook è un URL aperto e pubblico. La maggior parte dei servizi fornisce un token per garantire che le richieste in entrata provengano da servizi autorizzati. Poiché l'URL è pubblico, non è possibile impedire tentativi dannosi di inviare dati a della destinazione del webhook. Tuttavia, l'utilizzo di token o secret consente di elaborare solo da fonti autorizzate.

Per verificare la richiesta, puoi: configure secret (configura i secret) o memorizza una tua copia del secret come variabile di ambiente o tramite un qualche tipo di sistema di gestione delle chiavi.

Quando archivi la tua copia del secret come variabile di ambiente, ogni richiesta deve avere un secret nelle intestazioni della richiesta o nel file JSON e devi controllarlo 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 secret o un'altra autenticazione meccanismo di attenzione, chiunque abbia l'URL del target del webhook potrà inviare messaggi. In questo caso, l'implementazione del webhook deve essere esposta in sicurezza nella rete internet pubblica.

Rispondere alle richieste

La maggior parte dei servizi richiede di rispondere a una richiesta entro un determinato periodo di tempo, come specificato dal servizio. Alcuni webhook hanno metodi integrati per i nuovi tentativi c'è una risposta di errore, come un codice di stato HTTP 4xx o 5xx, quindi Devi restituire un codice di stato di operazione riuscita (2xx) per comunicare al servizio l'evento è stata elaborata correttamente.

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

Timeout

Sia Cloud Run che il provider di webhook hanno dei timeout. L'opzione più breve dei due sarà valida per la tua applicazione. Se l'elaborazione dei tuoi dati supera le tempo assegnato da Cloud Run o dal provider di webhook, devi utilizzare un prodotto che ti consente di completare l'elaborazione in modo asincrono, Pub/Sub o Cloud Tasks. Questi prodotti ti consentono di trasferire rapidamente i dati, restituire immediatamente una risposta positiva al di webhook e continua l'elaborazione senza il problema di timeout. Sono anche ottime opzioni per la gestione di errori e nuovi tentativi.

Pattern comuni dei webhook

Tipo Esempi
Inoltro dei dati Invio di una notifica tramite Firebase Cloud Messaging ogni volta che viene chiamato il webhook.
Archiviazione dei dati Archiviazione dei dati in BigQuery per analisi successive.
Azioni di attivazione Eseguire le azioni su Dialogflow, pubblicare risposte su Twitter o eseguire il push nell'ambiente di gestione temporanea ogni volta che viene eseguito il commit di nuovo codice in GitHub.

Passaggi successivi