Perbedaan API, WebSockets dan WebHooks
Dalam pengembangan web dan aplikasi modern, kita membutuhkan mekanisme yang andal untuk menghubungkan antara komponen-komponen pendukung aplikasi.
Kita dapat mengambil contoh pada aplikasi web, dimana kita membutuhkan suatu mekanisme untuk menghubungkan antara browser dan server. Terkadang, server juga butuh untuk mengirim kembali pesan/permintaan kepada browser. Selain itu, terdapat suatu kasus dimana backend yang dirancang atau dikembangkan sangat bergantung pada layanan lain yang membutuhkan waktu yang sangat lama. Intinya, kita memerlukan suatu mekanisme yang mampu menjembatani komunikasi antar komponen misal client dan server.
Terdapat suatu metode yang dapat menangani hal tersebut yaitu API, WebSocket, dan Webhook. Meskipun mereka memiliki tujuan yang sama, yaitu memungkinkan interaksi antara komponen yang berbeda, ketiganya memiliki perbedaan mendasar dalam cara kerja dan penggunaannya.
1. API (Application Programming Interface)
API adalah singkatan dari Application Programming Interface. IKata Aplikasi pada API merujuk pada perangkat lunak dengan fungsi yang berbeda. Kata Antarmuka dapat diartikan sebagai kontrak layanan antara dua aplikasi. Kontrak ini menjelaskan cara keduanya saling berkomunikasi dengan menggunakan permintaan (request) dan respons (response).. Berikut adalah beberapa poin penting tentang API:
- API beroperasi pada model permintaan-reaksi, di mana klien mengirim permintaan ke server dan server memberikan respons yang sesuai.
- API dapat menggunakan protokol seperti HTTP, REST, atau SOAP untuk berkomunikasi antara klien dan server.
- API umumnya digunakan untuk mengakses dan mengelola data tertentu, melakukan operasi CRUD (Create, Read, Update, Delete), atau memanipulasi fitur tertentu pada aplikasi atau platform yang menyediakan API tersebut.
ilustrasi proses dari API

Proses dari API sendiri sangatlah simple, ketika pengguna ingin meminta apa yang diinginkan menggunakan kueri pencarian, pengguna akan mendapatkan response hanya dalam beberapa saat.
Namun, ketika server perlu berkomunikasi kembali dengan browser, tidak ada suatu metode langsung saat menggunakan API.
contoh kasus case notifikasi update data. sebuah aplikasi mendapatkan data update melalui api dari pihak ketiga. user dapat melihat notifikasi data terbaru ketika pertama kali membuka halaman aplikasi melalui browser. namun user tidak lagi dapat menerima update data terbaru sampai user melakukan refresh halaman. hal ini dikarenakan get data melalui api hanya dilakukan sekali ketika halaman pertama kali diload. agar dapat menerima data update secara terus-menerus maka kita perlu melakukan request secara berkala ke api. teknik request dapat dilakukan dengan rentang waktu antar request yang singkat (short-polling) atau rentang waktu yang lama (long-polling).
namun pendekatan tersebut sangat membebani server dari pihak ketiga dan dapat dianggap sebagai serangan ddos yang memberikan request terus menerus untuk membuat server down.
Metode polling ini mengirimkan request data ke server secara terus menerus. Kalau hanya satu client yang melakukan request berulang seperti itu, mungkin tidak masalah, tapi bagaimana jika ada beberapa client yang mengakses satu server dan berulangkali melakukan metode Polling. Maka server akan jadi sibuk dan rentan terkena serangan DDOS.
Metode long polling adalah metode polling dengan interval waktu yang berkala. Jadi request tidak sesering metode Polling. Manfaatnya adalah server jauh lebih stabil dibandingkan dengan metode polling. Namun permasalahannya sederhana, Long Polling tidak menjawab real time, karena ada interval waktu yang digunakan.
Latar belakang tersebut kemudian yang mendasari terciptanya websocket.
2. WebSocket
Websocket lahir karena kekurangan HTTP ini. Protokol Websocket secara inheren bersifat dua arah dan memiliki persistensi koneksi. Hal ini berguna untuk mengembangkan aplikasi web yang memerlukan pembaruan langsung dari server (mis.: Platform Perdagangan Web, Pembaruan langsung untuk skor dalam olahraga, game web, aplikasi obrolan, dll.)
Perlu diingat bahwa protokol Websocket bukanlah perpanjangan dari HTTP. Jadi itu tidak didasarkan pada HTTP. Ini adalah protokol berbasis TCP untuk menjaga koneksi tetap ada. Namun, permintaan awal dari klien websocket menggunakan HTTP. Header ‘connection’ akan ditetapkan sebagai ‘ Connection: keep-alive’ dan ‘Upgrade: websocket’ untuk meminta koneksi ditingkatkan ke koneksi websocket.
Pertukaran data dapat dimulai oleh klien atau server. Penutupan koneksi juga dapat dimulai oleh salah satu pihak.
WebSocket adalah teknologi komunikasi dua arah yang memungkinkan transfer data real-time antara klien (misalnya, browser) dan server. Berikut adalah beberapa poin penting tentang WebSocket:
- WebSocket menggunakan koneksi persisten antara klien dan server, yang memungkinkan komunikasi real-time yang efisien.
- WebSocket menggunakan protokol TCP sebagai dasar komunikasinya.
- WebSocket memungkinkan pengiriman data dalam bentuk pesan yang dapat dikirimkan dari klien ke server dan sebaliknya tanpa harus melakukan permintaan ulang (request-response) seperti pada API.
- WebSocket umumnya digunakan untuk aplikasi yang membutuhkan pertukaran data real-time, seperti aplikasi chat, pembaruan harga secara real-time, atau kolaborasi real-time.
ilustrasi websocket

Namun, menjaga koneksi tetap terbuka sepanjang waktu meningkatkan konsumsi sumber daya, penggunaan daya (perangkat seluler), dan mempersulit penskalaan.
ini mungkin tidak berfungsi dengan baik untuk perangkat seluler, di mana kita mungkin perlu melihat teknologi seperti push notification. Selain itu, jika backend kita bergantung pada layanan eksternal untuk membuat laporan, WebSockets bukanlah opsi terbaik untuk backend ke layanan komunikasi eksternal.
3. Webhook
WebHooks memberikan solusi untuk masalah overkilling di WebSockets dengan menyediakan mekanisme disconnected untuk menerima respons yang berasal dari penyedia layanan.
Jika dilihat dari sisi teknis, konsumen mendaftarkan WebHook (callback URL) ke penyedia layanan, dan URL tersebut akan bertindak sebagai tempat untuk menerima data dari WebHook.
Dalam kebanyakan kasus, URL ini dimiliki oleh server lain, dan sebagian besar penggunaan WebHook untuk berkomunikasi antar server atau proses backend.
Pada tingkatan awal, Anda merasa bahwa ini benar-benar kebalikan dari proses API, dan karena alasan itu, kebanyakan orang menyebut WebHook sebagai Reverse API (kebalikan dari API).
Webhook adalah mekanisme yang memungkinkan pengiriman otomatis dari suatu peristiwa atau notifikasi dari satu aplikasi ke aplikasi lain. Berikut adalah beberapa poin penting tentang Webhook:
- Webhook bekerja berdasarkan konsep “push” di mana aplikasi pengirim secara aktif mengirim data ke aplikasi penerima saat suatu peristiwa terjadi.
- Webhook umumnya digunakan dalam integrasi aplikasi, di mana satu aplikasi ingin memberi tahu aplikasi lain tentang perubahan yang terjadi.
- Saat suatu peristiwa terjadi dalam aplikasi pengirim, permintaan HTTP akan dikirimkan ke URL yang ditentukan oleh aplikasi penerima untuk memberi tahu perubahan tersebut.
- Aplikasi penerima dapat mengambil data yang dikirimkan melalui Webhook dan melakukan tindakan tertentu berdasarkan data tersebut.

- Event Trigger: Event ini harus ditentukan untuk menjalankan WbHook. Ketika Event terjadi, maka WebHook akan melakukan tugasnya.
- WebHook provider creates the WebHook and sends POST request: Penyedia WebHook bertanggung jawab untuk memantau event dan membuat WebHook. Ketika terdapat suatu Event, maka penyedia WebHook akan mengirimkan permintaan POST HTTP kepada aplikasi pihak ketiga.
- Aplikasi pihak ketiga menerima data: Aplikasi pihak ketiga akan menerima data ke URL atau listener yang kita berikan kepada penyedia WebHook pada saat mendaftar.
- Penentuan tindakan dalam aplikasi pihak ketiga: Ketika aplikasi menerima permintaan Post, tim pengembang dapat menggunakan data untuk apapun yang mereka inginkan.
Kesimpulan
Seperti yang telah disebutkan di awal, WebHooks, WebSockets, dan API memfasilitasi komunikasi; mereka memiliki kasus penggunaan masing-masing.
API adalah opsi terbaik untuk aplikasi yang hanya memerlukan basic CRUD operations and synchronous responses. Selain itu, API dapat digunakan pada aplikasi web dan mobile serta service integrations dengan mudah.
Namun, jika aplikasi web Anda memerlukan komunikasi realtime dengan backend, Anda harus memilih WebSockets. Ini memungkinkan Anda membuat saluran komunikasi 2 arah antara browser Anda dan backend.
Namun, WebHook sedikit berbeda dari API dan WebSockets, yang lebih mirip API terbalik. Setelah Konsumen mendaftarkan URL WebHook di penyedia layanan, yang terakhir dapat memanggil WebHook bila diperlukan.