RESTForge

CRUD Dasar

Operasi create, update, dan delete untuk entitas tunggal

RESTForge menyediakan tiga operasi mutasi dasar untuk setiap endpoint: create (membuat data baru), update (memperbarui data), dan delete (menghapus data). Ketiga operasi ini diaktifkan melalui konfigurasi payload dan langsung tersedia tanpa menulis kode tambahan.

Mengaktifkan Operasi CRUD (Enabling CRUD Operations)

Operasi CRUD diaktifkan melalui property action di file payload:

payload/supplier.json
{
    "tableName": "supplier",
    "primaryKey": "supplier_id",
    "fieldName": [
        "supplier_id",
        "supplier_code",
        "supplier_name",
        "contact_person",
        "phone",
        "email",
        "is_active"
    ],
    "datatablesQuery": "SELECT supplier_id, supplier_code, supplier_name, contact_person, phone, email, is_active FROM supplier",
    "datatablesWhere": ["supplier_code", "supplier_name", "contact_person", "all"],
    "action": {
        "datatables": true,
        "create": true,
        "update": true,
        "delete": true,
        "first": true,
        "lookup": true,
        "read": true
    }
}

Setelah payload dikonfigurasi dan module di-generate, ketiga endpoint mutasi langsung tersedia:

POST /api/mini-inventory/supplier/create
POST /api/mini-inventory/supplier/update
POST /api/mini-inventory/supplier/delete

Alur Kerja CRUD (CRUD Workflow)

Alur kerja tipikal dalam satu siklus hidup data:

Create (tambah data baru)


First (verifikasi data yang baru dibuat)


Update (perbarui data jika ada perubahan)


First (verifikasi hasil update)


Delete (hapus data jika sudah tidak diperlukan)

Membuat Data Baru (Creating New Data)

Endpoint /create menerima pasangan field-value dan menyisipkan satu record baru ke database.

Contoh: menambahkan supplier baru

POST /api/mini-inventory/supplier/create
{
    "supplier_code": "SUP-001",
    "supplier_name": "PT Maju Jaya",
    "contact_person": "John Doe",
    "phone": "021-5551234",
    "email": "contact@majujaya.com",
    "is_active": true
}

Response (201 Created):

{
    "success": true,
    "message": "supplier data successfully added",
    "data": {
        "supplier_id": "550e8400-e29b-41d4-a716-446655440000",
        "supplier_code": "SUP-001",
        "supplier_name": "PT Maju Jaya",
        "contact_person": "John Doe",
        "phone": "021-5551234",
        "email": "contact@majujaya.com",
        "is_active": true,
        "created_at": "2026-04-16T10:30:00.000Z",
        "created_by": "Input from API"
    },
    "timestamp": "2026-04-16T10:30:00.000Z"
}

Perilaku Otomatis saat Create (Automatic Behavior)

PerilakuKeterangan
UUID auto-generateJika primary key tidak dikirim atau bernilai kosong, UUID v4 di-generate otomatis
Field auditcreated_at di-set ke timestamp saat ini, created_by di-set ke "Input from API" (dapat di-override)
ValidasiJika fieldValidation dikonfigurasi di payload, data divalidasi sebelum INSERT
Cache invalidationSeluruh cache terkait endpoint ini di-invalidasi setelah create berhasil

Error Umum saat Create

SituasiHTTP CodePenyebab
Kode supplier sudah ada409Unique constraint violation (duplicate key)
Foreign key tidak ditemukan400Nilai FK merujuk ke record yang tidak ada di tabel referensi
Validasi gagal400Data tidak memenuhi aturan fieldValidation

Memperbarui Data (Updating Data)

Endpoint /update memperbarui satu record berdasarkan primary key. RESTForge mendukung partial update, yaitu hanya field yang dikirim yang berubah. Field yang tidak disertakan dalam request tetap mempertahankan nilai sebelumnya.

Contoh: memperbarui nama dan kontak supplier

POST /api/mini-inventory/supplier/update
{
    "supplier_id": "550e8400-e29b-41d4-a716-446655440000",
    "supplier_name": "PT Maju Jaya Sejahtera",
    "contact_person": "Jane Doe",
    "phone": "021-5559876"
}

Response (200 OK):

{
    "success": true,
    "message": "supplier data successfully updated",
    "data": {
        "supplier_id": "550e8400-e29b-41d4-a716-446655440000",
        "supplier_code": "SUP-001",
        "supplier_name": "PT Maju Jaya Sejahtera",
        "contact_person": "Jane Doe",
        "phone": "021-5559876",
        "email": "contact@majujaya.com",
        "is_active": true,
        "updated_at": "2026-04-16T11:00:00.000Z",
        "updated_by": "Update from API"
    },
    "timestamp": "2026-04-16T11:00:00.000Z"
}

Primary key wajib disertakan di request body. Tanpa primary key, request akan ditolak dengan error 400. Field email dan is_active tidak dikirim dalam contoh di atas sehingga nilainya tetap tidak berubah.

Error Umum saat Update

SituasiHTTP CodePenyebab
Primary key tidak dikirim400Field primary key wajib ada di request body
Record tidak ditemukan404Tidak ada record dengan primary key tersebut
Duplicate value409Perubahan menyebabkan pelanggaran unique constraint

Menghapus Data (Deleting Data)

Endpoint /delete menghapus satu atau lebih record berdasarkan kondisi WHERE. Parameter where bersifat wajib untuk mencegah penghapusan data secara tidak sengaja.

Contoh: menghapus supplier berdasarkan primary key

POST /api/mini-inventory/supplier/delete
{
    "where": [
        { "key": "supplier_id", "value": "550e8400-e29b-41d4-a716-446655440000" }
    ]
}

Response (200 OK):

{
    "success": true,
    "message": "Successfully deleted 1 record(s)",
    "deleted_count": 1,
    "timestamp": "2026-04-16T11:30:00.000Z"
}

Request tanpa parameter where akan langsung ditolak dengan error 400. Hal ini adalah mekanisme keamanan (safety) untuk mencegah penghapusan seluruh data dalam tabel.

Error Umum saat Delete

SituasiHTTP CodePenyebab
Parameter WHERE tidak ada400Request wajib menyertakan where
Record tidak ditemukan404Tidak ada record yang cocok dengan kondisi WHERE
Record masih direferensikan409Tabel lain memiliki foreign key yang merujuk ke record ini

Verifikasi Hasil Operasi (Verifying Operation Results)

Setelah melakukan operasi create atau update, hasil dapat diverifikasi menggunakan endpoint /first:

POST /api/mini-inventory/supplier/first
{
    "where": { "key": "supplier_id", "value": "550e8400-e29b-41d4-a716-446655440000" }
}

Endpoint /first mengambil satu record berdasarkan primary key dan mengembalikan data lengkap termasuk field yang di-auto-populate oleh sistem.

Kapan Menggunakan Endpoint Lain (When to Use Other Endpoints)

KebutuhanEndpoint yang TepatAlasan
Mengubah nilai numerik secara relatif (stok +10, saldo -500)/adjustOperasi atomik, aman dari race condition
Membuat data header + detail dalam satu transaksi/create-compositeMenjamin konsistensi (consistency) data master-detail
Memperbarui header + insert/update/delete detail sekaligus/update-compositeSatu transaksi atomik untuk seluruh perubahan

Langkah Selanjutnya (Next Steps)

On this page