RESTForge

Read (List Data)

Action read untuk mengambil daftar data dengan filter, pagination, dan search

Endpoint /read adalah endpoint universal untuk mengambil data dari database. Endpoint ini mendukung dua mode operasi (paginasi dan non-paginasi), pencarian teks, pengurutan multi-kolom, filter WHERE kompleks, dan pemilihan kolom selektif.

Kapan Menggunakan /read (When to Use /read)

SkenarioContoh
Menampilkan data di halaman frontend dengan paginationDaftar supplier halaman 1 dari 5
Mengambil data untuk API konsumsi eksternalMobile app mengambil daftar produk aktif
Memfilter data berdasarkan kondisi bisnisSupplier di kota Jakarta dengan credit limit di atas 50 juta
Mengambil kolom tertentu sajaHanya supplier_id dan supplier_name untuk dropdown kustom
Reporting sederhanaSemua transaksi dalam rentang tanggal tertentu

Dua Mode Operasi (Two Operation Modes)

Mode operasi ditentukan secara otomatis berdasarkan keberadaan parameter page di request body:

ModeKondisiPerilaku
PaginasiParameter page dikirimData dikembalikan per halaman dengan metadata pagination
Non-paginasiParameter page tidak dikirimSemua data yang cocok dikembalikan (dengan safety limit)

Mode Paginasi (Pagination Mode)

Kirim parameter page dan per_page untuk mendapatkan data per halaman:

POST /api/mini-inventory/supplier/read
{
    "page": 1,
    "per_page": 10
}

Response menyertakan blok pagination yang berisi informasi navigasi halaman:

{
    "success": true,
    "data": [
        { "supplier_id": "...", "supplier_code": "SUP-001", "supplier_name": "PT Maju Jaya" },
        { "supplier_id": "...", "supplier_code": "SUP-002", "supplier_name": "CV Sejahtera" }
    ],
    "count": 2,
    "pagination": {
        "current_page": 1,
        "per_page": 10,
        "total_records": 42,
        "total_pages": 5,
        "has_next": true,
        "has_previous": false
    }
}

Untuk berpindah halaman, cukup ubah nilai page:

{ "page": 2, "per_page": 10 }

Mode Non-Paginasi (Non-Pagination Mode)

Jika page tidak dikirim, seluruh data yang cocok dikembalikan dalam satu response. Parameter limit membatasi jumlah record yang dikembalikan (default 1000, maksimal 5000):

POST /api/mini-inventory/supplier/read
{
    "limit": 100,
    "select": ["supplier_id", "supplier_code", "supplier_name"]
}
{
    "success": true,
    "data": [
        { "supplier_id": "...", "supplier_code": "SUP-001", "supplier_name": "PT Maju Jaya" },
        { "supplier_id": "...", "supplier_code": "SUP-002", "supplier_name": "CV Sejahtera" }
    ],
    "count": 2
}

Blok pagination tidak disertakan di mode non-paginasi.

Parameter search_value mencari data menggunakan operator LIKE. Secara default, pencarian dilakukan di kolom pertama yang terdaftar di payload. Kolom target dapat diubah menggunakan search_by:

POST /api/mini-inventory/supplier/read
{
    "page": 1,
    "per_page": 10,
    "search_value": "Jakarta",
    "search_by": "city"
}

Filter WHERE (WHERE Filtering)

Parameter where mendukung dua format untuk memfilter data.

Format Sederhana (Simple Format)

Semua kondisi digabungkan dengan AND, operator default =:

POST /api/mini-inventory/supplier/read
{
    "page": 1,
    "per_page": 20,
    "where": [
        { "key": "is_active", "value": true },
        { "key": "city", "value": "Jakarta" }
    ]
}

Format Kompleks (Complex Format)

Mendukung operator lengkap dan logika AND/OR:

POST /api/mini-inventory/supplier/read
{
    "page": 1,
    "per_page": 20,
    "where": {
        "logic": "AND",
        "conditions": [
            { "key": "city", "operator": "=", "value": "Jakarta" },
            { "key": "is_active", "operator": "=", "value": true },
            { "key": "credit_limit", "operator": ">=", "value": 50000000 }
        ]
    }
}

Operator yang Didukung (Supported Operators)

OperatorFungsiContoh Value
=Sama dengan"Jakarta"
!=Tidak sama dengan"deleted"
>, >=, <, <=Perbandingan numerik/tanggal50000000
LIKEPencarian partial"%motor%"
INSalah satu dari daftar["Jakarta", "Surabaya"]
BETWEENDalam rentang["2026-01-01", "2026-12-31"]
IS NULLBernilai null(tanpa value)
IS NOT NULLTidak null(tanpa value)

Pengurutan (Sorting)

Parameter sort_columns mengatur urutan data. Mendukung pengurutan multi-kolom:

POST /api/mini-inventory/supplier/read
{
    "page": 1,
    "per_page": 20,
    "sort_columns": [
        { "column": "city", "direction": "ASC" },
        { "column": "supplier_name", "direction": "ASC" }
    ]
}

Jika sort_columns tidak dikirim, data diurutkan berdasarkan primary key secara ascending.

Pemilihan Kolom (Column Selection)

Parameter select membatasi kolom yang dikembalikan. Berguna untuk mengurangi ukuran response jika hanya membutuhkan beberapa kolom:

POST /api/mini-inventory/supplier/read
{
    "page": 1,
    "per_page": 50,
    "select": ["supplier_id", "supplier_code", "supplier_name", "is_active"]
}

Kolom yang tidak terdaftar di fieldName payload akan ditolak dengan error 400.

Sumber Data (Data Source)

Endpoint /read menentukan sumber data berdasarkan prioritas resolusi:

viewName → viewQuery → tableName
PrioritasKonfigurasi PayloadKeterangan
1viewNameDatabase VIEW, jika didefinisikan dan berbeda dari tableName
2viewQueryVirtual view (SQL query dengan JOIN), tanpa perlu membuat VIEW di database
3tableNameFallback langsung ke tabel

Contoh konfigurasi viewQuery untuk menampilkan data supplier beserta nama negara dari tabel referensi:

payload/supplier.json (contoh viewQuery)
{
    "tableName": "supplier",
    "viewQuery": "SELECT s.*, c.country_name FROM supplier s LEFT JOIN country c ON c.country_id = s.country_id"
}

Dengan konfigurasi ini, endpoint /read mengembalikan data yang sudah di-JOIN dengan tabel country.

Endpoint /read tidak menggunakan datatablesQuery. Property tersebut hanya digunakan oleh endpoint /datatables. Keduanya memiliki sumber data yang independen.

Perbandingan /read vs /datatables (Comparison)

Aspek/read/datatables
Sumber dataviewName → viewQuery → tableNamedatatablesQuery
ModePaginasi + non-paginasiPaginasi saja (offset-based)
Filter WHEREOperator kompleks (AND/OR, LIKE, BETWEEN, IN)Pencarian teks sederhana
Format responseEnvelope standar {success, data, pagination}Format DataTables.net {draw, recordsTotal, data}
Default scopeDiterapkanTidak diterapkan
Use caseAPI konsumsi, mobile app, reportingDataTables.net di browser

Langkah Selanjutnya (Next Steps)

On this page