Skip to content

Ikhtisar API

Laravel Nusa menyediakan API RESTful yang komprehensif untuk mengakses data administratif Indonesia. API ini secara otomatis tersedia setelah instalasi dan mengikuti konvensi Laravel untuk konsistensi dan kemudahan penggunaan.

URL Dasar

Semua endpoint API diawali dengan /nusa secara default:

https://your-app.com/nusa/

Anda dapat menyesuaikan awalan ini di konfigurasi.

Otentikasi

Endpoint API bersifat publik secara default dan tidak memerlukan otentikasi. Ini membuatnya cocok untuk:

  • Formulir alamat publik
  • Layanan berbasis lokasi
  • Visualisasi data geografis
  • Aplikasi seluler

Catatan Keamanan

Jika Anda perlu membatasi akses, Anda dapat menerapkan middleware ke rute atau menonaktifkannya sepenuhnya dan membuat endpoint terlindungi Anda sendiri.

Format Respon

Semua respon API mengikuti struktur JSON yang konsisten:

Respon Koleksi

json
{
  "data": [
    {
      "code": "33",
      "name": "Jawa Tengah",
      "latitude": -6.9934809206806,
      "longitude": 110.42024335421,
      "coordinates": [...],
      "postal_codes": [...]
    }
  ],
  "links": {
    "first": "http://localhost:8000/nusa/provinces?page=1",
    "last": "http://localhost:8000/nusa/provinces?page=3",
    "prev": null,
    "next": "http://localhost:8000/nusa/provinces?page=2"
  },
  "meta": {
    "current_page": 1,
    "from": 1,
    "last_page": 3,
    "per_page": 15,
    "to": 15,
    "total": 34
  }
}

Respon Sumber Daya Tunggal

json
{
  "data": {
    "code": "33",
    "name": "Jawa Tengah",
    "latitude": -6.9934809206806,
    "longitude": 110.42024335421,
    "coordinates": [...],
    "postal_codes": [...]
  },
  "meta": {}
}

Paginasi

Semua endpoint koleksi mendukung paginasi:

  • Ukuran halaman default: 15 item
  • Ukuran halaman maksimum: 100 item
  • Parameter halaman: ?page=2
  • Parameter per halaman: ?per_page=50

Contoh Paginasi

bash
# Dapatkan halaman kedua dengan 25 item per halaman
GET /nusa/provinces?page=2&per_page=25

Parameter Kueri

Pencarian

Cari berdasarkan nama atau kode menggunakan parameter search:

http
# Cari provinsi berdasarkan nama
GET /nusa/provinces?search=jawa

# Cari berdasarkan kode
GET /nusa/provinces?search=33

# Cari kabupaten/kota
GET /nusa/regencies?search=semarang

Pemfilteran berdasarkan Kode

Filter hasil berdasarkan kode tertentu menggunakan parameter codes[]:

http
# Dapatkan provinsi tertentu
GET /nusa/provinces?codes[]=33&codes[]=34&codes[]=35

# Dapatkan kabupaten/kota tertentu
GET /nusa/regencies?codes[]=3375&codes[]=3376

Menggabungkan Parameter

Anda dapat menggabungkan pencarian dan pemfilteran:

http
# Cari "jakarta" di provinsi tertentu
GET /nusa/regencies?search=jakarta&codes[]=31&codes[]=32

Ikhtisar Endpoint

Endpoint Provinsi

MetodeEndpointDeskripsi
GET/nusa/provincesDaftar semua provinsi
GET/nusa/provinces/{code}Dapatkan provinsi tertentu
GET/nusa/provinces/{code}/regenciesDapatkan kabupaten/kota di provinsi
GET/nusa/provinces/{code}/districtsDapatkan kecamatan di provinsi
GET/nusa/provinces/{code}/villagesDapatkan desa/kelurahan di provinsi

Endpoint Kabupaten/Kota

MetodeEndpointDeskripsi
GET/nusa/regenciesDaftar semua kabupaten/kota
GET/nusa/regencies/{code}Dapatkan kabupaten/kota tertentu
GET/nusa/regencies/{code}/districtsDapatkan kecamatan di kabupaten/kota
GET/nusa/regencies/{code}/villagesDapatkan desa/kelurahan di kabupaten/kota

Endpoint Kecamatan

MetodeEndpointDeskripsi
GET/nusa/districtsDaftar semua kecamatan
GET/nusa/districts/{code}Dapatkan kecamatan tertentu
GET/nusa/districts/{code}/villagesDapatkan desa/kelurahan di kecamatan

Endpoint Desa/Kelurahan

MetodeEndpointDeskripsi
GET/nusa/villagesDaftar semua desa/kelurahan
GET/nusa/villages/{code}Dapatkan desa/kelurahan tertentu

Atribut Data

Atribut Provinsi

json
{
  "code": "33",                   // Kode provinsi 2 digit
  "name": "Jawa Tengah",          // Nama provinsi
  "latitude": -6.9934809206806,   // Lintang pusat
  "longitude": 110.42024335421,   // Bujur pusat
  "coordinates": [...],           // Koordinat batas (array)
  "postal_codes": [...]           // Semua kode pos di provinsi
}

Atribut Kabupaten/Kota

json
{
  "code": "33.75",                // Kode kabupaten/kota xx.xx
  "province_code": "33",          // Kode provinsi induk
  "name": "Kota Pekalongan",      // Nama kabupaten/kota
  "latitude": -6.8969497174987,   // Lintang pusat
  "longitude": 109.66208089654,   // Bujur pusat
  "coordinates": [...],           // Koordinat batas (array)
  "postal_codes": [...]           // Semua kode pos di kabupaten/kota
}

Atribut Kecamatan

json
{
  "code": "33.75.01",             // Kode kecamatan xx.xx.xx
  "regency_code": "33.75",        // Kode kabupaten/kota induk
  "province_code": "33",          // Kode provinsi induk
  "name": "Pekalongan Barat",     // Nama kecamatan
  "postal_codes": [51111, 51112]  // Kode pos di kecamatan
}

Atribut Desa/Kelurahan

json
{
  "code": "33.75.01.1002",        // Kode desa/kelurahan xx.xx.xx.xxxx
  "district_code": "33.75.01",    // Kode kecamatan induk
  "regency_code": "33.75",        // Kode kabupaten/kota induk
  "province_code": "33",          // Kode provinsi induk
  "name": "Medono",               // Nama desa/kelurahan
  "postal_code": "51111"          // Kode pos desa/kelurahan
}

Penanganan Error

API mengembalikan kode status HTTP standar:

Kode Sukses

  • 200 OK - Permintaan berhasil
  • 404 Not Found - Sumber daya tidak ditemukan

Format Respon Error

json
{
  "message": "No query results for model [Creasi\\Nusa\\Models\\Province] 99",
  "exception": "Illuminate\\Database\\Eloquent\\ModelNotFoundException"
}

Dukungan CORS

Jika Anda perlu mengakses API dari aplikasi browser di domain yang berbeda, konfigurasikan CORS di aplikasi Laravel Anda:

php
// config/cors.php
'paths' => ['api/*', 'nusa/*'],
'allowed_methods' => ['GET'],
'allowed_origins' => ['*'],

Contoh Penggunaan

js
// Dapatkan semua provinsi
const response = await fetch('/nusa/provinces');
const data = await response.json();
console.log(data.data); // Array provinsi

// Cari kabupaten/kota
const searchResponse = await fetch('/nusa/regencies?search=jakarta');
const searchData = await searchResponse.json();
bash
# Dapatkan provinsi
curl -X GET "https://your-app.com/nusa/provinces" \
  -H "Accept: application/json"

# Dapatkan provinsi tertentu dengan kabupaten/kota
curl -X GET "https://your-app.com/nusa/provinces/33/regencies" \
  -H "Accept: application/json"
php
use GuzzleHttp\Client;

$client = new Client(['base_uri' => 'https://your-app.com/']);

// Dapatkan provinsi
$response = $client->get('nusa/provinces');
$provinces = json_decode($response->getBody(), true);

// Cari kabupaten/kota
$response = $client->get('nusa/regencies', [
    'query' => ['search' => 'jakarta']
]);
$regencies = json_decode($response->getBody(), true);

Langkah Selanjutnya

Jelajahi dokumentasi API terperinci untuk setiap endpoint:

Released under the MIT License.