RESTForge

Lookup

Data referensi untuk dropdown dan autocomplete dengan pencarian dinamis

Endpoint /lookup menyediakan data ringan untuk komponen UI seperti dropdown, combobox, dan autocomplete. Setiap record dikembalikan dalam format {id, text} yang langsung dapat digunakan oleh frontend tanpa transformasi tambahan.

Kapan Menggunakan /lookup (When to Use /lookup)

SkenarioContoh
Dropdown pilihan di formMemilih supplier saat membuat stock inbound
Autocomplete saat mengetikMencari produk berdasarkan nama di search box
Memuat seluruh data referensiMengisi combobox kategori saat halaman dimuat
Dropdown dengan filterMenampilkan hanya supplier aktif di kota tertentu

Dua Mode Operasi (Two Operation Modes)

Endpoint /lookup mendukung dua HTTP method dengan perilaku yang berbeda:

ModeMethodHeader WajibKegunaan
DinamisGETX-Request-Mode: dynamicPencarian real-time saat pengguna mengetik
StatisPOSTX-Request-Mode: staticMemuat seluruh data atau data dengan filter

Header X-Request-Mode bersifat wajib pada setiap request. Request tanpa header ini ditolak dengan error 400.

Mode Dinamis — Pencarian Real-Time (Dynamic Mode)

Mode dinamis digunakan untuk autocomplete. Setiap kali pengguna mengetik di search box, frontend mengirim request GET dengan kata kunci pencarian:

GET /api/mini-inventory/supplier/lookup?search=maju
X-Request-Mode: dynamic

Response:

{
    "success": true,
    "count": 1,
    "data": [
        { "id": "550e8400-...", "text": "SUP-001 - PT Maju Jaya" }
    ],
    "search": "maju",
    "timestamp": "2026-04-16T10:30:00.000Z"
}

Pencarian bersifat case-insensitive. Maksimal panjang kata kunci pencarian adalah 100 karakter.

Mode Statis — Memuat Data Dropdown (Static Mode)

Mode statis digunakan untuk memuat seluruh data dropdown sekaligus, misalnya saat halaman pertama kali dibuka:

POST /api/mini-inventory/supplier/lookup
{}

Header: X-Request-Mode: static

Response:

{
    "success": true,
    "count": 3,
    "data": [
        { "id": "550e8400-...", "text": "SUP-001 - PT Maju Jaya" },
        { "id": "661f9511-...", "text": "SUP-002 - CV Sejahtera" },
        { "id": "772a0622-...", "text": "SUP-003 - PT Global Teknologi" }
    ],
    "timestamp": "2026-04-16T10:30:00.000Z"
}

Lookup dengan Filter (Filtered Lookup)

Mode statis juga mendukung filter WHERE untuk membatasi data yang dikembalikan:

POST /api/mini-inventory/supplier/lookup
{
    "where": [
        { "key": "is_active", "value": true }
    ],
    "sort_columns": [
        { "column": "supplier_name", "direction": "ASC" }
    ]
}

Header: X-Request-Mode: static

Konfigurasi Kolom (Column Configuration)

Secara default, field id mengambil nilai primary key dan field text mengambil nilai kolom kedua di fieldName. Konfigurasi ini dapat diubah melalui property fieldNameLookup di payload:

payload/supplier.json (contoh konfigurasi lookup)
{
    "tableName": "supplier",
    "primaryKey": "supplier_id",
    "fieldName": ["supplier_id", "supplier_code", "supplier_name"],
    "fieldNameLookup": {
        "id": "supplier_id",
        "text": "supplier_name"
    },
    "action": {
        "lookup": true
    }
}

Dengan konfigurasi ini, setiap item di array data berisi:

FieldSumberContoh
idsupplier_id"550e8400-..."
textsupplier_name"PT Maju Jaya"

Default Scope

Endpoint /lookup selalu menerapkan default scope jika dikonfigurasi di payload. Hal ini memastikan dropdown hanya menampilkan data yang relevan (misalnya hanya supplier dengan is_active = true) tanpa perlu menambahkan filter manual di setiap request.

Perilaku ini berbeda dari endpoint /datatables yang tidak menerapkan default scope.

Perilaku Cache (Cache Behavior)

ModeCacheKeterangan
GET (dinamis)TidakPencarian real-time selalu query langsung ke database
POST (statis)YaData dropdown statis di-cache di Redis
POST (filter)YaData dropdown dengan filter di-cache di Redis

Cache di-invalidasi secara otomatis setelah operasi mutasi (create, update, delete) berhasil pada endpoint yang sama.

Langkah Selanjutnya (Next Steps)

On this page