Kedua metode membaca dari sumber data yang sama (database Mertani) dan dapat digunakan secara bersamaan, misalnya REST API untuk dashboard dan Webhook untuk sistem alerting.
1. REST API (Pull-Based)
Client secara aktif mengambil data dari server Mertani melalui HTTPGET request.


Cara Kerja
1
Client mengirim request
Client melakukan HTTP
GET ke endpoint API Mertani, dengan parameter seperti device_id atau filter timestamp.2
Backend membaca database
Server Mertani membaca data yang tersimpan di database. Data tidak diambil langsung dari device.
3
Response dikembalikan
Data dikembalikan ke client dalam format JSON.
Ringkasan
Use Case
- Dashboard monitoring & visualisasi
- Data analytics dan reporting
- Integrasi BI tools
- Sinkronisasi data terjadwal
2. Webhook API (Push-Based)
Mertani secara otomatis mengirim data ke endpoint client setiap kali ada data baru dari device.

Cara Kerja
1
Device mengirim data
Device mengirim data ke backend Mertani sesuai interval yang dikonfigurasi.
2
Backend memproses data
Data divalidasi, dinormalisasi, dan disimpan ke database.
3
Backend mengirim ke client
Backend melakukan HTTP
POST ke endpoint client yang sudah didaftarkan.4
Client menerima data
Client memproses data secara langsung tanpa perlu melakukan request.
Ringkasan
Use Case
- Sistem notifikasi dan alerting
- Monitoring real-time
- Integrasi event-driven system
- Automation pipeline
Perbandingan REST API vs Webhook
REST API dan Webhook dapat digunakan secara bersamaan. Contoh umum: gunakan REST API untuk menampilkan data historis di dashboard, dan Webhook untuk memicu notifikasi real-time saat threshold terlampaui.
Best Practice
REST API
- Gunakan parameter
timestampfilter untuk menghindari pengambilan data yang tidak diperlukan - Sesuaikan interval polling dengan interval pengiriman device (hindari polling lebih sering dari data yang tersedia)
- Terapkan caching di sisi client untuk mengurangi beban request
Webhook
- Pastikan endpoint memiliki high availability. Request yang gagal direspons dapat memicu retry dari server
- Implementasikan idempotency untuk menangani kemungkinan data duplikat akibat retry
- Validasi setiap incoming request menggunakan signature atau token untuk keamanan