HouseMuslim
Konsep

Caching & Batasan

Bagaimana API publik melakukan caching terhadap respons yang deterministik, kuantisasi koordinat, dukungan ETag, dan rate limiting.

Semua endpoint perhitungan bersifat deterministik dan stateless, sehingga aman untuk di-cache secara agresif.

Header cache

Respons GET yang berhasil menyertakan:

Cache-Control: public, max-age=86400, stale-while-revalidate=86400
ETag: "f772776d6f178fd3c164ad2cbb5430b8b83e6a7a"

Kirim If-None-Match dengan ETag yang dikembalikan sebelumnya untuk mendapatkan 304 Not Modified yang cepat:

curl -H 'If-None-Match: "f7727..."' \
  "https://api.housemuslim.org/api/v1/prayer/times?lat=-6.2&lng=106.8"

Kuantisasi koordinat

Untuk memaksimalkan cache hit-rate, kunci cache mengkuantisasi koordinat:

  • lat / lng → 3 desimal (grid ~110 m)
  • elevation → kelipatan 50 m terdekat

Dua permintaan dalam sel ~110 m yang sama berbagi satu hasil cache. Perhitungannya sendiri tetap menggunakan presisi persis yang Anda kirimkan.

Sebuah bucket harian disertakan dalam kunci cache, sehingga permintaan "hari ini" (tanpa date eksplisit) berganti secara otomatis setiap hari.

Rate limiting

Rate limit global per-IP berlaku. Endpoint yang lebih berat (/prayer/times/month, /calendar/islamic, /events, /ramadan/schedule) memiliki bucket yang lebih ketat. Melampauinya akan mengembalikan 429 Too Many Requests.

Validasi

Input divalidasi sebelum perhitungan apa pun:

  • lat ∈ [−90, 90], lng ∈ [−180, 180]; NaN/Inf ditolak
  • elevation ∈ [−500, 9000] m
  • Hijriah hy ∈ [1, 3000], hm ∈ [1, 12], hd ∈ [1, 30]
  • Rentang tanggal dibatasi untuk mencegah payload yang berukuran berlebihan

Input yang tidak valid akan mengembalikan 422 Unprocessable Entity.

Di halaman ini