Maiki API Gateway & Webhook Dispatcher
Maiki Gateway adalah layer akses basis data dan webhook relay berkinerja tinggi berbasis Go. Layanan ini mengabstraksi koneksi langsung ke database MySQL, mengamankan akses melalui enkripsi SHA-256 API Key, serta menyediakan sistem distribusi data otomatis ke berbagai webhook konsumen secara asinkron.
https://maiki.algovisia.com
🚀 1. Cara Mulai Cepat (Quickstart)
Untuk menghubungkan aplikasi atau website baru ke Maiki Gateway, alur kerjanya terdiri dari 3 langkah mudah:
Dapatkan API Key
Generate Master API Key untuk website Anda di database gateway.
Daftarkan Webhook
Panggil POST /subscribe untuk mendaftarkan URL endpoint penerima.
Kirim & Broadcast
Kirim JSON via GET /send atau notifikasi langsung via POST /notify.
🔑 2. Autentikasi & Registrasi API Key
Semua request (kecuali GET /health dan dashboard web) mewajibkan header HTTP Authorization dengan skema Bearer.
Authorization: Bearer sk_live_7x9p2m4v8k1h5d3g
Cara Mendaftarkan API Key untuk Domain Baru:
Jalankan helper script berikut di server untuk membuat API key baru secara instan:
./scripts/create_api_key.sh "NamaAplikasi/DomainBaru"
📡 3. Mendaftarkan Webhook Subscriber (POST /subscribe)
Gunakan endpoint ini agar endpoint URL aplikasi Anda atau layanan pihak ketiga terdaftar dalam daftar distribusi broadcast.
curl -X POST "https://maiki.algovisia.com/subscribe" \
-H "Authorization: Bearer sk_live_7x9p2m4v8k1h5d3g" \
-H "Content-Type: application/json" \
-d '{
"endpoint": "https://myapp.com/webhook",
"name": "Production Server"
}'
📢 4. Mengirim Data & Trigger Broadcast
Untuk mengirimkan data ke seluruh webhook aktif secara massal (broadcast):
Langkah A Kirim Payload JSON (GET /send)
curl -X GET "https://maiki.algovisia.com/send?payload=%7B%22event%22%3A%22user.created%22%2C%22id%22%3A123%7D&source=myapp" \
-H "Authorization: Bearer sk_live_7x9p2m4v8k1h5d3g"
Langkah B Trigger Broadcast Asinkron (POST /broadcast)
curl -X POST "https://maiki.algovisia.com/broadcast" \
-H "Authorization: Bearer sk_live_7x9p2m4v8k1h5d3g"
🎯 5. Mengirim Notifikasi ke Single Receiver (POST /notify)
Jika Anda ingin mengirim payload ke hanya 1 penerima spesifik tanpa melakukan broadcast ke semua subscriber lain, gunakan endpoint POST /notify.
curl -X POST "https://maiki.algovisia.com/notify" \
-H "Authorization: Bearer sk_live_7x9p2m4v8k1h5d3g" \
-H "Content-Type: application/json" \
-d '{
"endpoint": "https://specific-receiver.com/webhook",
"payload": {
"event": "invoice.paid",
"amount": 500000,
"currency": "IDR"
}
}'
💻 6. Contoh Implementasi Webhook Receiver di Sisi Client
Berikut adalah contoh kode untuk menerima dan memproses kiriman webhook dari Maiki Gateway di aplikasi client:
<?php
// webhook.php
header('Content-Type: application/json');
// 1. Ambil payload JSON dari body request
$rawPayload = file_get_contents('php://input');
$data = json_decode($rawPayload, true);
if (!$data) {
http_response_code(400);
echo json_encode(['status' => 'invalid payload']);
exit;
}
// 2. Akses data yang dikirim Maiki Gateway
$payloadId = $data['payload_id'] ?? null;
$source = $data['source'] ?? '';
$eventData = $data['data'] ?? [];
// 3. Proses logika bisnis aplikasi Anda...
error_log("Diterima webhook #$payloadId dari $source: " . json_encode($eventData));
// 4. Berikan respon HTTP 200 OK
http_response_code(200);
echo json_encode(['status' => 'received', 'timestamp' => time()]);
?>
const express = require('express');
const app = express();
app.use(express.json());
app.post('/webhook', (req, res) => {
const { payload_id, source, data, timestamp } = req.body;
console.log(`[Webhook Diterima] ID #${payload_id} dari ${source}:`, data);
// Respon 200 OK agar gateway menandai sukses
res.status(200).json({ status: 'received' });
});
app.listen(3000, () => console.log('Webhook receiver running on port 3000'));
📋 Tabel Referensi Seluruh Endpoint API
| Endpoint | Method | Auth | Deskripsi |
|---|---|---|---|
| /health | GET | Publik | Cek ketersediaan dan latensi gateway. |
| /send?payload={JSON} | GET | Bearer Key | Ingest payload JSON ke basis data. |
| /subscribe | POST | Bearer Key | Daftarkan endpoint webhook baru. |
| /subscribers | GET | Bearer Key | Dapatkan daftar seluruh subscriber webhook. |
| /unsubscribe | POST | Bearer Key | Nonaktifkan subscriber webhook. |
| /broadcast | POST | Bearer Key | Memicu pengiriman broadcast asinkron ke semua webhook aktif. |
| /notify | POST | Bearer Key | Kirim notifikasi langsung ke 1 endpoint / subscriber spesifik. |
| /payloads | GET | Bearer Key | Ambil log 50 data payload terakhir. |