RESTForge

DataTables

Server-side processing untuk jQuery DataTables dengan pagination dan sorting

Endpoint /datatables menyediakan server-side processing yang kompatibel dengan library jQuery DataTables.net. Endpoint ini dirancang khusus untuk menampilkan data dalam tabel interaktif di browser dengan fitur pagination, pencarian teks, dan pengurutan kolom.

Kapan Menggunakan /datatables (When to Use /datatables)

SkenarioContoh
Tabel data interaktif di browserHalaman daftar supplier dengan pagination dan search box
Integrasi dengan DataTables.netFrontend menggunakan jQuery DataTables atau wrapper-nya
Tabel admin untuk melihat seluruh dataDashboard admin tanpa filter default scope

Jika kebutuhan bukan untuk integrasi DataTables.net (misalnya API untuk mobile app atau reporting), gunakan endpoint /read yang memiliki format response standar dan fitur WHERE yang lebih lengkap.

Konfigurasi Payload (Payload Configuration)

Endpoint /datatables memerlukan dua property di payload:

payload/supplier.json
{
    "tableName": "supplier",
    "primaryKey": "supplier_id",
    "fieldName": ["supplier_id", "supplier_code", "supplier_name", "contact_person", "phone", "is_active"],
    "datatablesQuery": "SELECT supplier_id, supplier_code, supplier_name, contact_person, phone, is_active FROM supplier",
    "datatablesWhere": ["supplier_code", "supplier_name", "contact_person", "all"],
    "action": {
        "datatables": true
    }
}
PropertyFungsi
datatablesQueryQuery SQL yang digunakan oleh endpoint ini. Tidak boleh mengandung WHERE, ORDER BY, atau LIMIT
datatablesWhereDaftar kolom yang dapat di-search. "all" mengaktifkan pencarian di seluruh kolom

Untuk query yang memerlukan JOIN, gunakan file SQL terpisah:

"datatablesQuery": "file:query/supplier-datatables.sql"

Cara Penggunaan (How to Use)

Request Dasar (Basic Request)

POST /api/mini-inventory/supplier/datatables
{
    "draw": 1,
    "start": 0,
    "length": 10,
    "search": { "value": "" }
}
ParameterTipeDefaultKeterangan
drawnumber1Counter request (dikembalikan di response untuk sinkronisasi)
startnumber0Offset data (index awal, bukan nomor halaman)
lengthnumber10Jumlah data per halaman (maksimal 1000)
search.valuestring""Kata kunci pencarian

Pencarian dilakukan di kolom yang terdaftar di datatablesWhere. Secara default, pencarian berlaku di semua kolom (searchBy: "all"). Untuk mencari di kolom spesifik, gunakan parameter searchBy:

POST /api/mini-inventory/supplier/datatables
{
    "draw": 1,
    "start": 0,
    "length": 10,
    "search": { "value": "Maju Jaya" },
    "searchBy": "supplier_name"
}

Pengurutan (Sorting)

Parameter sort_columns mengatur urutan data:

POST /api/mini-inventory/supplier/datatables
{
    "draw": 1,
    "start": 0,
    "length": 25,
    "search": { "value": "" },
    "sort_columns": [
        { "column": "supplier_name", "direction": "ASC" }
    ]
}

Format sorting DataTables.net (order[0][column], order[0][dir]) juga tetap didukung. Jika keduanya dikirim, sort_columns yang digunakan.

Filter WHERE

Endpoint /datatables juga mendukung parameter where untuk filter tambahan:

POST /api/mini-inventory/supplier/datatables
{
    "draw": 1,
    "start": 0,
    "length": 10,
    "search": { "value": "" },
    "where": [
        { "key": "is_active", "value": true }
    ]
}

Format Response

Endpoint /datatables menggunakan format response yang berbeda dari endpoint lainnya. Response tidak menggunakan envelope standar {success, data, message}, melainkan format native jQuery DataTables.net.

{
    "draw": 1,
    "recordsTotal": 150,
    "recordsFiltered": 45,
    "data": [
        {
            "rownumerator": 1,
            "supplier_id": "550e8400-...",
            "supplier_code": "SUP-001",
            "supplier_name": "PT Maju Jaya",
            "contact_person": "John Doe",
            "phone": "021-5551234",
            "is_active": true
        }
    ]
}
FieldTipeKeterangan
drawnumberEcho dari parameter draw di request (untuk sinkronisasi client)
recordsTotalnumberTotal seluruh record di database (sebelum filter)
recordsFilterednumberTotal record setelah filter pencarian diterapkan
dataarrayArray data untuk halaman saat ini
data[].rownumeratornumberNomor urut baris (dimulai dari start + 1)

Sumber Data (Data Source)

Endpoint /datatables menggunakan datatablesQuery sebagai sumber data. Berbeda dengan /read yang mendukung resolusi viewName → viewQuery → tableName, datatables hanya menggunakan satu sumber:

/datatables  →  datatablesQuery  →  fallback: SELECT * FROM tableName

Endpoint /datatables tidak menggunakan viewQuery atau viewName. Jika data yang ditampilkan di tabel memerlukan JOIN, query JOIN tersebut harus ditulis langsung di datatablesQuery.

Perbedaan Kunci dengan /read (Key Differences from /read)

Aspek/datatables/read
Format response{draw, recordsTotal, recordsFiltered, data}{success, data, count, pagination}
PaginationOffset-based (start + length)Page-based (page + per_page)
Sumber datadatatablesQueryviewName → viewQuery → tableName
Default scopeTidak diterapkanDiterapkan
Use caseTabel interaktif di browserAPI konsumsi, mobile, reporting

Default scope tidak diterapkan pada /datatables sehingga administrator dapat melihat seluruh data termasuk yang tidak aktif. Pada endpoint /read, default scope otomatis memfilter data sesuai konfigurasi (misalnya hanya menampilkan is_active = true).

Langkah Selanjutnya (Next Steps)

On this page