POST /datatables
Spesifikasi endpoint datatables untuk server-side processing
Endpoint /datatables menyediakan server-side processing yang kompatibel dengan jQuery DataTables. Format response endpoint ini disesuaikan secara khusus untuk library DataTables.net dan berbeda dari format standar RESTForge.
Referensi Cepat (Quick Reference)
| Properti | Nilai |
|---|---|
| Method | POST |
| URL | /api/{project}/{endpoint}/datatables |
| Content-Type | application/json |
| Status Sukses | 200 OK |
| Database | PostgreSQL, MySQL, Oracle |
| Format Response | Non-standar: {draw, recordsTotal, recordsFiltered, data} |
| Cache | Redis |
Ikhtisar (Overview)
Endpoint ini dirancang untuk integrasi langsung dengan jQuery DataTables menggunakan mode server-side processing. Response yang dihasilkan mengikuti kontrak data yang diharapkan oleh DataTables.net, yaitu objek dengan properti draw, recordsTotal, recordsFiltered, dan data.
Endpoint /datatables mengembalikan format response non-standar. Response TIDAK mengandung field success seperti endpoint RESTForge lainnya. Pastikan client-side handling disesuaikan dengan format ini.
Default scope yang dikonfigurasi di payload TIDAK diterapkan pada endpoint ini. Jika diperlukan filter default, gunakan parameter where secara eksplisit.
Format Request (Request Format)
Parameter (Parameters)
| Parameter | Tipe | Wajib | Default | Keterangan |
|---|---|---|---|---|
draw | integer | Tidak | — | Nomor sequence dari DataTables, dikembalikan apa adanya di response |
start | integer | Tidak | 0 | Offset awal data (0-based) |
length | integer | Tidak | 10 | Jumlah record per halaman (rentang: 1–1000) |
search.value | string | Tidak | "" | Kata kunci pencarian global |
searchBy | string | Tidak | "all" | Field target pencarian; "all" untuk mencari di semua field |
sort_columns | array | Tidak | — | Konfigurasi sorting kustom |
where | object | Tidak | — | Filter kondisi tambahan |
Alias parameter pencarian: searchValue dan search_value dapat digunakan sebagai alternatif dari search.value.
Prioritas sorting: sort_columns > order[0][column] + order[0][dir] > default (primary key ASC).
Contoh Request (Request Examples)
Request dasar dengan pagination:
{
"draw": 1,
"start": 0,
"length": 10
}Pencarian global:
{
"draw": 2,
"start": 0,
"length": 10,
"search": {
"value": "Maju Jaya"
}
}Pencarian pada field tertentu:
{
"draw": 3,
"start": 0,
"length": 25,
"search": {
"value": "SUP-001"
},
"searchBy": "supplier_code"
}Sorting dan filter kustom:
{
"draw": 4,
"start": 0,
"length": 10,
"sort_columns": [
{
"column": "supplier_name",
"direction": "asc"
}
],
"where": {
"is_active": true
}
}Format Response (Response Format)
Format response endpoint ini berbeda dari endpoint RESTForge standar. Response TIDAK mengandung field success dan menggunakan properti khusus DataTables.
HTTP 200 OK
{
"draw": 1,
"recordsTotal": 150,
"recordsFiltered": 42,
"data": [
{
"supplier_id": "550e8400-e29b-41d4-a716-446655440000",
"supplier_code": "SUP-001",
"supplier_name": "PT Maju Jaya",
"email": "contact@majujaya.com",
"is_active": true,
"created_at": "2026-04-16T10:30:00.000Z"
},
{
"supplier_id": "6ba7b810-9dad-11d1-80b4-00c04fd430c8",
"supplier_code": "SUP-002",
"supplier_name": "CV Berkah Sentosa",
"email": "info@berkahsentosa.com",
"is_active": true,
"created_at": "2026-04-16T10:30:00.000Z"
}
]
}| Properti | Tipe | Keterangan |
|---|---|---|
draw | integer | Nomor sequence yang dikirim di request, dikembalikan apa adanya |
recordsTotal | integer | Total seluruh record tanpa filter |
recordsFiltered | integer | Total record setelah filter diterapkan |
data | array | Array berisi record hasil query |
Response Error (Error Responses)
400 — Parameter tidak valid:
{
"success": false,
"error": "Invalid payload",
"message": "Parameter 'length' must be between 1 and 1000",
"timestamp": "2026-04-16T10:30:00.000Z"
}500 — Internal server error:
{
"success": false,
"error": "Internal server error",
"message": "An unexpected error occurred",
"timestamp": "2026-04-16T10:30:00.000Z"
}Sumber Data (Data Source)
Endpoint /datatables menggunakan datatablesQuery sebagai sumber data. Query ini dikonfigurasi secara terpisah dari viewQuery yang digunakan oleh endpoint /read.
Endpoint ini TIDAK menggunakan viewQuery atau fallback viewName → viewQuery → tableName seperti endpoint /read. Pastikan datatablesQuery sudah dikonfigurasi di payload jika diperlukan query kustom.
Perilaku Cache (Cache Behavior)
Response dari endpoint /datatables di-cache menggunakan Redis. Cache di-invalidasi secara otomatis ketika terjadi operasi tulis (create, update, adjust, delete) pada endpoint yang sama.
Perbandingan dengan /read (Comparison with /read)
| Aspek | /datatables | /read |
|---|---|---|
| Format Response | {draw, recordsTotal, recordsFiltered, data} | {success, data, count, pagination?} |
| Paginasi | Offset-based (start + length) | Page-based (page + per_page) |
| Default Scope | TIDAK diterapkan | Diterapkan |
| Sumber Data | datatablesQuery | viewName → viewQuery → tableName |
| Kasus Penggunaan | Frontend DataTables.net | Konsumsi API, mobile, reporting |
Langkah Selanjutnya (Next Steps)
- POST /read untuk pengambilan data dengan format response standar
- POST /lookup untuk pencarian data dengan format dropdown/autocomplete
- Kode Error untuk referensi lengkap HTTP status code