POST /update
Spesifikasi endpoint update untuk memperbarui record
Endpoint /update digunakan untuk memperbarui record yang sudah ada di tabel database.
Referensi Cepat (Quick Reference)
| Properti | Nilai |
|---|---|
| Method | POST |
| URL | /api/{project}/{endpoint}/update |
| Content-Type | application/json |
| Status Sukses | 200 OK |
| Database | PostgreSQL, MySQL, Oracle |
| Validasi | fieldValidation dari payload (opsional) |
| Cache | Invalidasi otomatis setelah update berhasil |
| Distributed Lock | WRITE lock per-record jika diaktifkan |
| Event Lifecycle | onBeforeUpdate → UPDATE → onAfterUpdate |
Ikhtisar (Overview)
Request body berisi pasangan field-value yang akan diperbarui. Primary key wajib disertakan dalam request body agar sistem dapat mengidentifikasi record yang akan di-update. Endpoint ini mendukung partial update, artinya hanya field yang dikirim dalam request yang akan diubah, sementara field lain tetap mempertahankan nilai sebelumnya.
Validasi deklaratif dapat dikonfigurasi melalui fieldValidation di payload. Hanya field yang terdaftar di fieldName payload yang akan diproses. Field lain di luar daftar tersebut diabaikan secara silent.
Format Request (Request Format)
Parameter (Parameters)
Request body berisi JSON object dengan pasangan field-value. Primary key bersifat wajib untuk mengidentifikasi record target.
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
{primaryKey} | string | Ya | Wajib disertakan untuk identifikasi record target |
{fieldName[n]} | any | Tergantung validasi | Field sesuai konfigurasi fieldName di payload |
Primary key bersifat wajib pada setiap request /update. Request tanpa primary key akan menghasilkan response error 400.
Contoh Request (Request Examples)
Update satu field (partial update):
{
"supplier_id": "550e8400-e29b-41d4-a716-446655440000",
"email": "new-contact@majujaya.com"
}Pada contoh di atas, hanya field email yang diperbarui. Field lain seperti supplier_code, supplier_name, phone, dan is_active tetap tidak berubah.
Update beberapa field sekaligus:
{
"supplier_id": "550e8400-e29b-41d4-a716-446655440000",
"supplier_name": "PT Maju Jaya Abadi",
"email": "info@majujayaabadi.com",
"phone": "021-5559876",
"is_active": false
}Update dengan Body Options:
{
"data": {
"supplier_id": "550e8400-e29b-41d4-a716-446655440000",
"supplier_name": "PT Maju Jaya Abadi",
"is_active": false
},
"options": {
"notify_admin": true
}
}Body Options
Endpoint /update mendukung format request body alternatif {data, options} untuk mengirimkan opsi tambahan yang dapat dibaca oleh component handler dan processor. Detail lengkap tersedia di halaman Body Options.
Format Response (Response Format)
Response Sukses (Success Response)
HTTP 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 Abadi",
"email": "info@majujayaabadi.com",
"phone": "021-5559876",
"is_active": false,
"updated_at": "2026-04-16T10:30:00.000Z",
"updated_by": "Update from API"
},
"timestamp": "2026-04-16T10:30:00.000Z"
}Response Error (Error Responses)
400 — Payload kosong:
{
"success": false,
"error": "Invalid payload",
"message": "Payload cannot be empty",
"timestamp": "2026-04-16T10:30:00.000Z"
}400 — Primary key tidak ditemukan dalam request:
{
"success": false,
"error": "Invalid payload",
"message": "Primary key is required for update",
"timestamp": "2026-04-16T10:30:00.000Z"
}400 — Validasi gagal:
{
"success": false,
"error": "Validation failed",
"message": "Invalid data",
"errors": {
"email": ["Field email must be a valid email address"]
},
"timestamp": "2026-04-16T10:30:00.000Z"
}404 — Record tidak ditemukan:
{
"success": false,
"error": "Not found",
"message": "Record not found",
"timestamp": "2026-04-16T10:30:00.000Z"
}409 — Duplicate key:
{
"success": false,
"error": "Duplicate entry",
"message": "Supplier code already exists",
"timestamp": "2026-04-16T10:30:00.000Z"
}500 — Server error:
{
"success": false,
"error": "Internal server error",
"message": "An unexpected error occurred",
"timestamp": "2026-04-16T10:30:00.000Z"
}Field Otomatis (Auto-Populated Fields)
| Field | Nilai | Keterangan |
|---|---|---|
updated_at | Timestamp saat ini | Selalu di-set oleh sistem pada setiap update |
updated_by | "Update from API" | Dapat di-override melalui request body |
Berbeda dengan /create, endpoint /update tidak menyentuh field created_at dan created_by. Kedua field tersebut tetap mempertahankan nilai asli dari saat record pertama kali dibuat.
Perilaku Cache (Cache Behavior)
Setelah operasi update berhasil, seluruh cache terkait endpoint ini di-invalidasi secara otomatis. Hal ini memastikan endpoint /read, /datatables, dan /lookup mengembalikan data terbaru pada request berikutnya.
Distributed Lock
Jika fitur distributed lock diaktifkan, endpoint /update menggunakan WRITE lock per-record berdasarkan primary key. Mekanisme ini mencegah kondisi race condition ketika beberapa request mencoba memperbarui record yang sama secara bersamaan.
Jika lock tidak dapat diperoleh (misalnya karena record sedang di-update oleh proses lain), server mengembalikan response error 500 dengan informasi kegagalan lock.
Event Lifecycle
Jika component engine dikonfigurasi di payload, endpoint /update menjalankan hook berikut:
onBeforeUpdate → UPDATE ke database → onAfterUpdateHook onBeforeUpdate dapat memodifikasi data sebelum di-update ke database. Hook onAfterUpdate dapat menjalankan side effect setelah data berhasil diperbarui (misalnya mengirim notifikasi, menyinkronkan data ke sistem lain, atau menulis audit log).
Langkah Selanjutnya (Next Steps)
- POST /first untuk mengambil record yang baru diperbarui
- POST /delete untuk menghapus record
- Kode Error untuk referensi lengkap HTTP status code