🎤🎶“Gw tunjukin🕺… Tulisan sudah jadi dan siap saji🕺… Kali ini tulisan tentang Webhook🕺… Tentang Webhook🕺”. Webhook adalah sebuah Reverse API. Biasanya saat kita butuh integrasi antara server kita dengan system external maka server kita yang akan memanggil API system external tersebut. Dengan Webhook justru sebaliknya, kita yang butuh tapi kita ga perlu manggil API mereka, cukup daftarin aja URL Webhook server kita ke system external. Nanti system external itu yang bakal manggil API kita lewat URL Webhook yang pernah kita kasih saat diperlukan. Sesuai namanya yang berasal dari dua kata Web Hook, ini kayak “kail” yang akan diterkam oleh system external🎣.
Skenario sederhananya misalkan kita develop aplikasi Warung Bebek Goreng H. Slamet (Asli) untuk pemesanan online dengan pembayaran menggunakan system external Payment Gateway. Setelah pemesanan, status pembayaran akan jadi “Pending” dan user harus melakukan pembayaran melalui Payment Gateway. Jika berhasil maka pada aplikasi kita status pembayarannya berubah menjadi “Lunas”. Jika gagal maka statusnya jadi “Gagal”.
Kalau tanpa Webhook, maka saat menunggu pembayaran server kita akan berulang kali hit API Payment Gateway buat ngecek status pembayaran yang masih “Pending” apakah sudah berhasil atau belum. Itu diulang terus-terusan sampai statusnya berubah jadi “Lunas” atau “Gagal”. Cara seperti ini disebut Polling. Kalau ternyata server API Payment Gateway lagi sibuk, tentu akan berdampak pada performa server kita juga yang akan terus-terusan manggil API Payment Gateway buat ngecek statusnya. Ga efisien dong🙄.
Dengan Webhook, kita ga perlu manggil API Payment Gateway berkali-kali. Melainkan menggunakan mekanisme event-driven untuk integrasi. Cukup duduk manis nunggu trigger dari Payment Gateway. Misalkan pada aplikasi Warung Bebek Goreng H. Slamet (Asli) memiliki URL Webhook seperti https://api.h.slamet.com/webhook/payment/xxx
. URL tersebut berperan sebagai listener atau trigger untuk mengonfirmasi pembayaran pada server aplikasi Warung Bebek Goreng H. Slamet (Asli). Biasanya requestnya berupa method POST dengan request body yang diperlukan. URL tersebut akan didaftarkan pada server Payment Gateway yang digunakan. Jadi setiap Payment Gateway tersebut selesai memproses pembayaran yang dilakukan user terkait transaksi di aplikasi Warung Bebek Goreng H. Slamet (Asli), maka URL Webhook yang didaftarkan tadi akan di-hit oleh Payment Gateway. Jadi, bukan server kita yang nge-hit ke Payment Gateway buat ngecek status pembayaran. Makanya ini disebut Reverse API karena flownya terbalik ga seperti API pada umumnya. Setelah URL Webhook tersebut di-hit, maka server aplikasi Warung Bebek Goreng H. Slamet (Asli) akan mengubah status pesanannya menjadi “Lunas” jika berhasil atau “Gagal” jika gagal. Ini lebih efisien dibanding Polling😎.
Webhook ini bisa digunakan untuk berbagai kasus. Seperti blog gw ini menggunakan Contentful dan Vercel. Gw tinggal daftarin URL Webhook dari Vercel ke Contentful. Jadi tiap gw publish tulisan gw ga perlu redeploy Vercel secara manual. Melainkan Contentful akan trigger memanggil URL Webhook milik Vercel yang gw daftarin tadi secara otomatis tiap publish tulisan. Selain Payment Gateway dan CMS, Webhook juga ditemukan pada CI/CD tools, Aplikasi komunikasi seperti Slack, Cloud Service seperti AWS Lambda, hingga Social Media menggunakan Webhook untuk integrasi antara server mereka dengan system external.