ASP.NET WebHooks
WebHooks adalah pola HTTP ringan yang menyediakan model pub/sub sederhana untuk menyatukan API Web dan layanan SaaS. Ketika peristiwa terjadi dalam layanan, pemberitahuan dikirim dalam bentuk permintaan HTTP POST kepada pelanggan terdaftar. Permintaan POST berisi informasi tentang peristiwa yang memungkinkan penerima untuk bertindak sesuai.
Karena kesederhanaannya, WebHook sudah diekspos oleh sejumlah besar layanan termasuk Dropbox, GitHub, Bitbucket, MailChimp, PayPal, Slack, Stripe, Trello, dan banyak lagi. Misalnya, WebHook dapat menunjukkan bahwa file telah berubah di Dropbox, atau perubahan kode telah dilakukan di GitHub, atau pembayaran telah dimulai di PayPal, atau kartu telah dibuat di Trello. Kemungkinannya tak ada habisnya!
Microsoft ASP.NET WebHooks memudahkan untuk mengirim dan menerima WebHook sebagai bagian dari aplikasi ASP.NET Anda:
Di sisi penerimaan, ini menyediakan model umum untuk menerima dan memproses WebHook dari sejumlah penyedia WebHook. Ini keluar dari kotak dengan dukungan untuk Dropbox, GitHub, Bitbucket, MailChimp, PayPal, Pusher, Salesforce, Slack, Stripe, Trello, WordPress dan Zendesk tetapi mudah untuk menambahkan dukungan untuk lebih banyak.
Di sisi pengirim, layanan ini menyediakan dukungan untuk mengelola dan menyimpan langganan serta untuk mengirim pemberitahuan peristiwa ke set pelanggan yang tepat. Ini memungkinkan Anda untuk menentukan serangkaian peristiwa Anda sendiri yang dapat dilanggani pelanggan dan memberi tahu mereka ketika hal-hal terjadi.
Dua bagian dapat digunakan bersama-sama atau terpisah tergantung pada skenario Anda. Jika Anda hanya perlu menerima WebHook dari layanan lain maka Anda hanya dapat menggunakan bagian penerima; jika Anda hanya ingin mengekspos WebHook untuk dikonsumsi orang lain, maka Anda dapat melakukan hal itu.
Kode ini menargetkan ASP.NET Web API 2 dan ASP.NET MVC 5 dan tersedia sebagai OSS di GitHub.
WebHooks adalah pola yang berarti bervariasi bagaimana itu digunakan dari layanan ke layanan tetapi ide dasarnya sama. Anda dapat menganggap WebHooks sebagai model pub/sub sederhana di mana pengguna dapat berlangganan peristiwa yang terjadi di tempat lain. Pemberitahuan peristiwa disebarluaskan sebagai permintaan HTTP POST yang berisi informasi tentang peristiwa itu sendiri.
Biasanya permintaan HTTP POST berisi objek JSON atau data formulir HTML yang ditentukan oleh pengirim WebHook termasuk informasi tentang peristiwa yang menyebabkan WebHook terpicu. Misalnya, isi permintaan POST WebHook dari GitHub terlihat seperti ini sebagai akibat dari masalah baru yang dibuka di repositori tertentu:
{
"action": "opened",
"issue": {
"url": "https://api.github.com/repos/octocat/Hello-World/issues/1347",
"number": 1347,
...
},
"repository": {
"id": 1296269,
"full_name": "octocat/Hello-World",
"owner": {
"login": "octocat",
"id": 1
...
},
...
},
"sender": {
"login": "octocat",
"id": 1,
...
}
}
Untuk memastikan bahwa WebHook memang berasal dari pengirim yang dimaksudkan, permintaan POST diamankan dalam beberapa cara dan kemudian diverifikasi oleh penerima. Misalnya, GitHub WebHooks menyertakan header HTTP X-Hub-Signature dengan hash isi permintaan yang diperiksa oleh implementasi penerima sehingga Anda tidak perlu khawatir tentang hal itu.
Aliran WebHook umumnya berjalan seperti ini:
Pengirim WebHook mengekspos peristiwa yang dapat dilanggan klien. Peristiwa menjelaskan perubahan yang dapat diamati pada sistem, misalnya bahwa item data baru telah disisipkan, bahwa proses telah selesai, atau sesuatu yang lain.
Penerima WebHook berlangganan dengan mendaftarkan WebHook yang terdiri dari empat hal:
URI tempat pemberitahuan peristiwa harus diposting dalam bentuk permintaan HTTP POST;
Sekumpulan filter yang menjelaskan peristiwa tertentu di mana WebHook harus diaktifkan;
Kunci rahasia yang digunakan untuk menandatangani permintaan HTTP POST;
Data tambahan yang akan disertakan dalam permintaan HTTP POST. Ini misalnya dapat berupa bidang header HTTP tambahan atau properti yang disertakan dalam isi permintaan HTTP POST.
Setelah peristiwa terjadi, pendaftaran WebHook yang cocok ditemukan dan permintaan HTTP POST dikirimkan. Biasanya, pembuatan permintaan HTTP POST dicoba kembali beberapa kali jika karena alasan tertentu penerima tidak merespons atau permintaan HTTP POST menghasilkan respons kesalahan.
Alur pemrosesan Microsoft ASP.NET WebHooks untuk WebHook masuk terlihat seperti ini:
Dua konsep utama di sini adalah Penerima dan Handler:
Penerima bertanggung jawab untuk menangani rasa webHook tertentu dari pengirim tertentu dan untuk memberlakukan pemeriksaan keamanan untuk memastikan bahwa permintaan WebHook memang berasal dari pengirim yang dimaksudkan.
Handler biasanya tempat kode pengguna berjalan memproses WebHook tertentu.
Dalam simpul berikut konsep-konsep ini dijelaskan dalam detail selengkapnya.