POST /create
Spesifikasi endpoint create untuk membuat record baru
Endpoint /create digunakan untuk menyisipkan satu record baru ke dalam tabel database.
Referensi Cepat (Quick Reference)
| Properti | Nilai |
|---|---|
| Method | POST |
| URL | /api/{project}/{endpoint}/create |
| Content-Type | application/json |
| Status Sukses | 201 Created |
| Database | PostgreSQL, MySQL, Oracle |
| Validasi | fieldValidation dari payload (opsional) |
| Cache | Invalidasi otomatis setelah create berhasil |
| Event Lifecycle | onBeforeInsert → INSERT → onAfterInsert |
Ikhtisar (Overview)
Request body berisi pasangan field-value yang akan di-insert. Primary key di-generate otomatis sebagai UUID jika tidak disertakan atau bernilai kosong. Endpoint ini mendukung validasi deklaratif melalui konfigurasi fieldValidation di payload, sehingga setiap field dapat divalidasi tanpa menulis kode tambahan.
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. Tidak ada parameter wajib selain field yang dikonfigurasi di fieldValidation dengan constraint required: true.
| Parameter | Tipe | Wajib | Keterangan |
|---|---|---|---|
{primaryKey} | string | Tidak | Jika tidak dikirim atau kosong, UUID v4 di-generate otomatis |
{fieldName[n]} | any | Tergantung validasi | Field sesuai konfigurasi fieldName di payload |
Contoh Request (Request Examples)
Create tanpa primary key (auto UUID):
{
"supplier_code": "SUP-001",
"supplier_name": "PT Maju Jaya",
"email": "contact@majujaya.com",
"phone": "021-5551234",
"is_active": true
}Create dengan primary key eksplisit:
{
"supplier_id": "550e8400-e29b-41d4-a716-446655440000",
"supplier_code": "SUP-002",
"supplier_name": "CV Berkah Sentosa",
"is_active": true
}Body Options
Endpoint /create 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.
{
"data": {
"supplier_code": "SUP-001",
"supplier_name": "PT Maju Jaya",
"is_active": true
},
"options": {
"send_feedback_email": true
}
}Format Response (Response Format)
Response Sukses (Success Response)
HTTP 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",
"email": "contact@majujaya.com",
"phone": "021-5551234",
"is_active": true,
"created_at": "2026-04-16T10:30:00.000Z",
"created_by": "Input 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 — Validasi gagal:
{
"success": false,
"error": "Validation failed",
"message": "Invalid data",
"errors": {
"supplier_code": ["Field supplier_code is required"],
"email": ["Field email must be a valid email address"]
},
"timestamp": "2026-04-16T10:30:00.000Z"
}400 — Foreign key constraint:
{
"success": false,
"error": "Foreign key constraint",
"message": "Referenced data 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"
}Field Otomatis (Auto-Populated Fields)
| Field | Nilai | Keterangan |
|---|---|---|
| Primary key | UUID v4 | Jika tidak dikirim atau bernilai kosong/"-" |
created_at | Timestamp saat ini | Selalu di-set oleh sistem |
created_by | "Input from API" | Dapat di-override melalui request body |
Perilaku Cache (Cache Behavior)
Setelah operasi create berhasil, seluruh cache terkait endpoint ini di-invalidasi secara otomatis. Hal ini memastikan endpoint /read, /datatables, dan /lookup mengembalikan data terbaru pada request berikutnya.
Event Lifecycle
Jika component engine dikonfigurasi di payload, endpoint /create menjalankan hook berikut:
onBeforeInsert → INSERT ke database → onAfterInsertHook onBeforeInsert dapat memodifikasi data sebelum di-insert. Hook onAfterInsert dapat menjalankan side effect setelah data berhasil disimpan (misalnya mengirim notifikasi atau publish event).
Langkah Selanjutnya (Next Steps)
- POST /update untuk memperbarui record yang sudah ada
- POST /first untuk mengambil record yang baru dibuat
- Kode Error untuk referensi lengkap HTTP status code