Dataset Wilayah Indonesia via CDN & API
Provinsi → Kab/Kota → Kecamatan → Kelurahan + Kode Pos. Disajikan langsung dari repo GitHub kamu melalui jsDelivr atau API Endpoint. Tidak perlu server/backend.
- ⚡ Cepat & tahan spike
- 🧩 File kecil per wilayah
- 🔒 CORS-ready untuk browser
CDN: pin versi dengan tag, mis:
https://cdn.jsdelivr.net/gh/fransiskusch/wilayah-indo@v1.0.0/data
API: gunakan endpoint yang tersedia di Cloudflare Workers
Demo Dropdown Berantai
Halaman ini bisa fetch dari CDN jsDelivr atau API endpoint. Pilih mode di atas untuk mengganti sumber data.
Cara pakai (dua mode)
- Langsung dari jsDelivr CDN
- Pin versi dengan Git tag untuk produksi
- Melalui Cloudflare Workers API
- Caching otomatis dan optimized response
# CDN Mode
curl "https://cdn.jsdelivr.net/gh/fransiskusch/wilayah-indo/data/provinces.json"
# API Mode
curl "https://wilayah-api.franskristiono.workers.dev/api/provinces"
Cara pakai (dua mode)
- Langsung dari jsDelivr CDN
- Pin versi dengan Git tag untuk produksi
- Melalui Cloudflare Workers API
- Caching otomatis dan optimized response
# CDN Mode
curl "https://cdn.jsdelivr.net/gh/fransiskusch/wilayah-indo/data/provinces.json"
# API Mode
curl "https://wilayah-api.franskristiono.workers.dev/api/provinces"
Dokumentasi Endpoint
Tersedia dalam dua mode: CDN statis dan API endpoint dengan caching.
🚀 Quick Start
1. Langsung pakai dari jsDelivr CDN
// Fetch semua provinsi
const provinces = await fetch('https://cdn.jsdelivr.net/gh/fransiskusch/wilayah-indo/data/provinces.json')
.then(response => response.json());
// Fetch kabupaten/kota berdasarkan kode provinsi (contoh: DKI Jakarta = 31)
const regencies = await fetch('https://cdn.jsdelivr.net/gh/fransiskusch/wilayah-indo/data/regencies/31.json')
.then(response => response.json());
2. Pin versi untuk produksi (recommended)
// Gunakan tag versi untuk cache yang stabil
const BASE_URL = 'https://cdn.jsdelivr.net/gh/fransiskusch/wilayah-indo@v1.0.0/data';
const provinces = await fetch(`${BASE_URL}/provinces.json`).then(r => r.json());
CDN Endpoints
GET /data/provinces.json
GET /data/regencies/:prov.json
contoh: 31.json
GET /data/districts/:prov.:reg.json
contoh: 31.74.json
GET /data/postal/:prov/:reg/:dist.json
contoh: 31/74/06.json
https://cdn.jsdelivr.net/gh/fransiskusch/wilayah-indo
API Endpoints
GET /api/provinces
GET /api/regencies/:prov
contoh: /api/regencies/31
GET /api/districts/:reg
contoh: /api/districts/31.74
GET /api/postal/:p/:r/:d
contoh: /api/postal/31/74/06
https://wilayah-api.franskristiono.workers.dev
Struktur Response
[
{
"code": "31",
"name": "DKI Jakarta"
},
{
"code": "32",
"name": "Jawa Barat"
}
]
[
{
"code": "31.74.06.1001",
"village": "Menteng",
"postal_code": "10310"
}
]
💡 Contoh Penggunaan
JavaScript/TypeScript
// Fungsi helper untuk fetch data
class WilayahIndonesia {
constructor(mode = 'cdn', version = 'latest') {
this.baseUrl = mode === 'api'
? 'https://wilayah-api.franskristiono.workers.dev'
: `https://cdn.jsdelivr.net/gh/fransiskusch/wilayah-indo${version !== 'latest' ? '@' + version : ''}/data`;
this.isApiMode = mode === 'api';
}
async getProvinces() {
const endpoint = this.isApiMode ? '/api/provinces' : '/provinces.json';
return this.fetch(endpoint);
}
async getRegencies(provinceCode) {
const endpoint = this.isApiMode
? `/api/regencies/${provinceCode}`
: `/regencies/${provinceCode}.json`;
return this.fetch(endpoint);
}
async fetch(endpoint) {
const response = await fetch(this.baseUrl + endpoint);
return response.json();
}
}
// Penggunaan
const wilayah = new WilayahIndonesia('api'); // atau 'cdn'
const provinces = await wilayah.getProvinces();
cURL Commands
# CDN Mode - Semua provinsi
curl "https://cdn.jsdelivr.net/gh/fransiskusch/wilayah-indo/data/provinces.json"
# CDN Mode - Pin versi
curl "https://cdn.jsdelivr.net/gh/fransiskusch/wilayah-indo@v1.0.0/data/provinces.json"
# API Mode - Semua provinsi
curl "https://wilayah-api.franskristiono.workers.dev/api/provinces"
# API Mode - Kabupaten di DKI Jakarta
curl "https://wilayah-api.franskristiono.workers.dev/api/regencies/31"
# API Mode - Kecamatan di Jakarta Pusat
curl "https://wilayah-api.franskristiono.workers.dev/api/districts/31.74"
💡 Tips Produksi
-
✓
CDN: Pin versi dengan tag
@v1.0.0
untuk cache stabil -
✓
API: Caching otomatis 24 jam, lebih konsisten untuk produksi
-
✓
Kedua mode mendukung CORS, aman dipanggil dari browser
-
✓
Implementasikan error handling untuk network failures
❓ FAQ
Perbedaan CDN dan API?
CDN langsung dari GitHub repo via jsDelivr, sedangkan API melalui Cloudflare Workers dengan caching otomatis.
Mana yang lebih baik untuk produksi?
API lebih stabil dengan caching konsisten. CDN lebih ringan tapi bergantung pada GitHub repo.
Bagaimana versi data?
CDN: gunakan tag repo @v1.0.0
.
API: selalu menggunakan data terbaru dari repo.