API Komprehensif untuk kebutuhan Muslim di Indonesia, menyediakan data jadwal sholat, arah kiblat, konversi kalender Hijriah, dan berbagai alat bantu lainnya. Semua endpoint dirancang untuk kemudahan penggunaan dan integrasi
- Endpoint daftar lengkap kabupaten/kota (
/sholat/kota|kabkota/(all|semua)). - Endpoint detail berdasarkan ID (
/sholat/kota|kabkota/{id}). - Endpoint pencarian kata kunci (
/sholat/kota|kabkota/(cari|find)/{keyword}). - Endpoint kalender (
/cal/...) untuk konversi tanggal Masehi ↔ Hijriyah dengan opsi metode perhitungan. - Endpoint arah kiblat (
/qibla/{lat,lng}) untuk mendapatkan derajat kiblat dari koordinat tertentu. - Endpoint tools utilitas seperti
/tools/ipuntuk mendeteksi IP & user-agent pengguna dan/tools/uptimeuntuk memantau lama server berjalan. - Endpoint health check (
/health) untuk mengetahui apakah API siap digunakan. - Rate limiting Per menit per IP
- Response konsisten dengan struktur
status,message, dandata. - Middleware logger akses.
- Dokumentasi OpenAPI otomatis pada
/doc/apimuslimmenggunakan@hono/zod-openapi+ ReDoc viewer di/doc.
- Pastikan Deno sudah terpasang (versi 1.42+ direkomendasikan).
- Salin atau sesuaikan variabel lingkungan di
.env:HOST=0.0.0.0 PORT=8000 TIMEZONE=Asia/Jakarta LOG_VERBOSE=false LOG_WRITE=false LOG_RETENTION_DAYS=30 APP_ENV=development DOC_BASE_URL=http://localhost:8000 MAPSCO_API_KEY=
Gunakan salah satu perintah berikut dari root repo:
# mode pengembangan dengan watch
deno task dev
# mode biasa
deno task startServer akan berjalan di http://localhost:8000 (atau sesuai konfigurasi pada
.env).
Kamu juga dapat menjalankan aplikasi ini menggunakan Docker Compose dengan image yang sudah tersedia di GitHub Container Registry (GHCR).
-
Pastikan file
docker-compose.ymltersedia -
Pastikan memiliki file
.envdi direktori yang sama. Kamu bisa menyalinnya dari.env.example. -
Jalankan container dengan perintah:
docker-compose up -d
Kamu dapat mengganti
latestpada nama image dengan tag spesifik yang kamu inginkan.
- Setiap akses dapat disimpan ke file harian di
data/log/YYYYMMDD.log(aktifkanLOG_WRITE=true). - Format log:
[timestamp] IP METHOD PATH STATUS DURATIONms. TIMEZONEmenentukan waktu pada log dan response logger.- Set
LOG_VERBOSE=trueuntuk menampilkan log akses yang sama di console; defaultfalse. - Set
LOG_WRITE=trueuntuk menyalakan penulisan log ke file harian; defaultfalse. LOG_RETENTION_DAYSmenentukan berapa lama file log disimpan (default 30 hari); file yang lebih lama akan dihapus otomatis tiap hari saat log file aktif (LOG_WRITE=true).- Logger berjalan non-blok: request tidak lagi menunggu proses penulisan log ke disk.
- Dokumen OpenAPI dalam format JSON tersedia di
/doc/sholat, dan halaman ReDoc siap pakai berada di/doc. DOC_BASE_URLmenentukan basis URL yang dipakai pada daftar server OpenAPI dan contohcurlotomatis di ReDoc.
- Jalankan server kemudian buka
DOC_BASE_URL/doc(contoh:http://localhost:8000/doc). - Gunakan tombol “Cari di Dokumentasi (Ctrl+/)” di bagian atas halaman untuk fokus ke kolom pencarian ReDoc.
- Klik salah satu tautan kategori (Sholat, Kalender, Qibla, Tools) untuk melompat ke bagian terkait. Hash yang dipakai ReDoc dapat dirujuk langsung seperti contoh berikut.
| Kategori | Penjelasan Singkat | Tautan (akses setelah server jalan) |
|---|---|---|
| Sholat | Daftar lokasi, pencarian, jadwal sholat harian/bulanan. | /doc#/tag/Sholat |
| Kalender | Konversi tanggal Masehi ↔ Hijriyah, opsi metode perhitungan. | /doc#/tag/Kalender |
| Qibla | Hitung arah kiblat berdasarkan koordinat. | /doc#/tag/Qibla |
| Tools | Utilitas seperti /tools/ip, /tools/uptime, /tools/geocode, dan /health. |
/doc#/tag/Tools |
Contoh: untuk melihat dokumentasi endpoint qibla secara cepat, buka
http://localhost:8000/doc#/tag/Qibla setelah server menyala. README ini juga
menyediakan contoh curl/JavaScript/PHP/Python/Go di setiap endpoint pada ReDoc
untuk memulai integrasi dengan cepat.
APP_ENVmenentukan perilaku cache; nilai defaultdevelopmentmenonaktifkan cache untuk mempermudah debugging.- Atur
APP_ENV=productionuntuk mengaktifkan cache in-memory pada pencarian sholat dan jadwal bulanan, sehingga respon lebih cepat pada lingkungan produksi. MAPSCO_API_KEYwajib diisi bila ingin memakai/tools/geocode(maps.co).
Jalankan seluruh unit test dengan mengizinkan akses environment & file (dibutuhkan untuk membaca jadwal JSON):
deno test --allow-env --allow-readGET /sholat/kota/all,/sholat/kota/semua,/sholat/kabkota/all,/sholat/kabkota/semua– daftar seluruh lokasi.GET /sholat/kota/{id},/sholat/kabkota/{id}– detail lokasi tertentu.GET /sholat/kota/cari/{keyword},/sholat/kota/find/{keyword},/sholat/kabkota/cari/{keyword},/sholat/kabkota/find/{keyword}– pencarian bebas (case-insensitive).GET /sholat/jadwal/{id}/today– jadwal sholat hari ini per kab/kota dengan opsitz/utcuntuk zona waktu.GET /cal/today– kalender hari ini (Masehi & Hijriyah); parameteradjhanya mempengaruhi tanggal Hijriyah, sedangkan CE tetap hari ini.GET /cal/hijr/{YYYY-MM-DD}– konversi tanggal Masehi (formatYYYY-MM-DD) ke Hijriyah;adjhanya mempengaruhi Hijriyah.GET /cal/ce/{YYYY-MM-DD}– konversi tanggal Hijriyah ke tanggal Masehi;adjhanya mempengaruhi Masehi.GET /qibla/{lat,lng}– arah kiblat (derajat dari utara) berdasarkan koordinat derajat desimal.GET /tools/ip– deteksi IP pengguna (memperhatikan proxy/Cloudflare) beserta user agent.GET /tools/uptime– mengetahui uptime VPS (lama server berjalan), waktu booting, representasi yang mudah dibaca manusia, dan ringkasanuptimenative Linux.GET /health– health check sederhana yang mengembalikan waktu server, uptime, timezone, dan environment.
- Semua endpoint dibatasi maksimum 100 request/menit per IP untuk mencegah penyalahgunaan.
- Endpoint jadwal bulanan
/sholat/jadwal/{id}/{YYYY-MM}memiliki batas lebih ketat yaitu 5 request/menit per IP. - Response mencantumkan header
RateLimit-Limit,RateLimit-Remaining,RateLimit-Reset, dan saat limit terlampaui jugaRetry-Afteruntuk panduan klien. - Pengaturan mudah disesuaikan di
src/config/rate_limit.tstanpa perlu mengubah kode lain.
Contoh respons sukses:
{
"status": true,
"message": "success",
"data": [
{
"id": "eda80a3d5b344bc40f3bc04f65b7a357",
"lokasi": "KOTA KEDIRI"
}
]
}Jika data tidak ditemukan akan mengembalikan:
{
"status": false,
"message": "Data tidak ditemukan."
}adj(opsional, default0): penyesuaian hari; nilai negatif mundur, positif maju.method(opsional, defaultstandar): pilihstandar,islamic-umalqura, atauislamic-civil.utcatautz(opsional, defaultAsia/Jakarta): menentukan zona waktu perhitungan kalender.
Contoh respons /cal/today:
{
"status": true,
"message": "success",
"data": {
"method": "standar",
"adjustment": 0,
"ce": {
"today": "Senin, 24 November 2025",
"day": 24,
"dayName": "Senin",
"month": 11,
"monthName": "November",
"year": 2025
},
"hijr": {
"today": "Senin, 2 Jumadilakhir 1447 H",
"day": 2,
"dayName": "Senin",
"month": 6,
"monthName": "Jumadilakhir",
"year": 1447
}
}
}Sesuaikan struktur data (tidak termasuk dalam repo ini).
data/
├── log
├── sholat
│ └── jadwal
│ ├── 2025
│ ├── 2026
│ ├── 2027
│ ├── 2028
│ ├── 2029
│ ├── 2030
│ └── ...dst
├── quran
├── hadis
└── etcData sholat ada pada repository lain, bisa menggunakan docker.
Dokumentasi tersedia:
- Akses
/docuntuk informasi web base API Muslim v3 ini. - Akses
GET /doc/apimuslimuntuk mendapatkan spesifikasi OpenAPI (JSON) yang dapat diimpor ke Postman atau Insomnia atau generator klien lainnya.
Beberapa fitur membutuhkan konfigurasi tambahan melalui environment variable:
# Atur endpoint dan API key Meilisearch agar pencarian hadis (/hadis/enc/cari)
# dapat terhubung
export MEILISEARCH_HOST="https://meili.example.com"
export MEILISEARCH_API_KEY="your_api_key_here"Saran, ide dan pertanyaan dapat melalui kontak:
- Email: banghasan@myquran.com
- Telegram: Grup Telegram apimuslim

