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:
{
"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/deleteAlur 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
{
"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)
| Perilaku | Keterangan |
|---|---|
| UUID auto-generate | Jika primary key tidak dikirim atau bernilai kosong, UUID v4 di-generate otomatis |
| Field audit | created_at di-set ke timestamp saat ini, created_by di-set ke "Input from API" (dapat di-override) |
| Validasi | Jika fieldValidation dikonfigurasi di payload, data divalidasi sebelum INSERT |
| Cache invalidation | Seluruh cache terkait endpoint ini di-invalidasi setelah create berhasil |
Error Umum saat Create
| Situasi | HTTP Code | Penyebab |
|---|---|---|
| Kode supplier sudah ada | 409 | Unique constraint violation (duplicate key) |
| Foreign key tidak ditemukan | 400 | Nilai FK merujuk ke record yang tidak ada di tabel referensi |
| Validasi gagal | 400 | Data 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
{
"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
| Situasi | HTTP Code | Penyebab |
|---|---|---|
| Primary key tidak dikirim | 400 | Field primary key wajib ada di request body |
| Record tidak ditemukan | 404 | Tidak ada record dengan primary key tersebut |
| Duplicate value | 409 | Perubahan 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
{
"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
| Situasi | HTTP Code | Penyebab |
|---|---|---|
| Parameter WHERE tidak ada | 400 | Request wajib menyertakan where |
| Record tidak ditemukan | 404 | Tidak ada record yang cocok dengan kondisi WHERE |
| Record masih direferensikan | 409 | Tabel 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:
{
"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)
| Kebutuhan | Endpoint yang Tepat | Alasan |
|---|---|---|
| Mengubah nilai numerik secara relatif (stok +10, saldo -500) | /adjust | Operasi atomik, aman dari race condition |
| Membuat data header + detail dalam satu transaksi | /create-composite | Menjamin konsistensi (consistency) data master-detail |
| Memperbarui header + insert/update/delete detail sekaligus | /update-composite | Satu transaksi atomik untuk seluruh perubahan |
Langkah Selanjutnya (Next Steps)
- Read — List Data untuk mengambil daftar data dengan pagination dan filter
- First — Detail Data untuk mengambil satu record lengkap
- POST /create untuk spesifikasi teknis lengkap endpoint create
- POST /update untuk spesifikasi teknis lengkap endpoint update
- POST /delete untuk spesifikasi teknis lengkap endpoint delete