Blog
Catatan teknis seputar web development, DevOps, dan integrasi AI.
502 artikel
- 16.00backend
Enam Baris YAML yang Mengubah Kontrak API
Respons 404 yang tidak ada di OpenAPI itu bug kontrak, bukan kelalaian dokumentasi. Enam baris YAML langsung mengubah tipe TypeScript konsumen.
TL;DR: Awalnya kirain cuma nambah dokumentasi karena ubah YAML enam baris dan generate tipe TS, nggak ngaruh runtime. Padahal openapi-typescript nurut banget sama YAML jadi kalau 404 nggak ditulis tipenya jadi unknown dan frontend harus nebak manual. Begitu skema 404 ditambahin, tipe error langsung kebaca di compiler jadi kontrak API lebih solid dan nggak gampang jebol di produksi.
#openapi#api#typescript - 16.00backend
Fitur Review Dimatikan, Kok Balasnya 404 Bukan 403?
Mematikan fitur rating di portal kota ternyata dibalas 404. Ternyata spesifikasi HTTP memang mendukung pilihan menyembunyikan keberadaan itu.
TL;DR: Awalnya kukira endpoint rating error karena balik 404 bukan 403 pas fiturnya dimatiin. Ternyata emang disengaja lewat gate ensureRatingsAllowed yang ngecek rating_enabled kalau false langsung lempar ErrRatingsUnavailable jadi 404 biar kesannya fitur nggak ada. Cara ini lebih aman soalnya nggak bocorin info, sekaligus nge-cover tiga endpoint sekaligus dengan query enteng.
#http#api#error-handling - 16.00database
Kategori Hapus Lunas: Jebakan State Machine di Layer Database
Menghapus kategori ternyata bukan sekadar ganti DELETE jadi UPDATE. Predikat, RowsAffected, scope guard restore, dan cache ikut jadi tanggung jawab.
TL;DR: Kirain hapus kategori tinggal ganti DELETE jadi UPDATE doang ternyata ribet banget. Semua query lama harus ditambahin filter deleted_at IS NULL biar sampah nggak bocor ke dropdown atau list. Buat delete sama restore harus cek RowsAffected biar bisa kasih 404 dan jangan lupa flush cache biar datanya langsung muncul lagi.
#go#mysql#sql - 15.00backend
Tiga Bentuk Nullable di Write Path Go
Meneruskan kolom nullable baru lewat CRUD Go: idiom PUT, bool polos, pointer ID, dan kontrak null eksplisit.
TL;DR: KotaPortal nambah empat kolom baru lewat CRUD yaitu kontak, dua toggle rating dan rental, serta ID tipe. Kontak dikosongin pake string kosong biar jadi null, ID tipe pake pointer biar nil jadi null, toggle bool biasa dan PUT itu nulis penuh. Respons tanpa omitempty jadi null tetap muncul dan ada validasi kontak max 100 karakter serta ID minimal satu.
#golang#api#mysql - 14.58backend
Tong Sampah Kategori: Satu Endpoint dan POST Restore
Kontrak API soft delete kategori: query flag trashed, POST restore, dan 404 yang sengaja menggabungkan dua kondisi.
TL;DR: Daripada bikin endpoint sampah baru, daftar kategori admin sekarang cukup pakai query trashed yang defaultnya false jadi aplikasi lama aman aja. Kalau mau balikin data tinggal hit POST restore, kalau kategorinya nggak ada atau belum kehapus bakal dibales 404. Enaknya kontraknya aditif banget jadi frontend baru langsung jalan tanpa ngerusak yang lama.
#api#openapi#rest-api - 14.53backend
Migrasi Down-First: Kolom Aditif dan FK yang Ditunda
Merancang migrasi MySQL dari arah baliknya: kolom aditif, down sebagai cermin, dan FK yang sengaja ditunda.
TL;DR: Nambah kolom di entities sama categories dibikin aditif aja biar migrasi aman dan rollback gampang. Foreign key type_id sengaja ditunda karena tabel masternya belum ada biar nggak trigger copy berat di MySQL. Kolom deleted_at dibikin TIMESTAMP NULL biar nggak kena magic timestamp dan down migration tinggal drop balik.
#mysql#golang#schema - 14.17backend
Test yang Hijau Siang, Merah Tiap Subuh
Test filter tanggal gagal tiap subuh jam 0-7 karena ada dua jam dalam satu test. Solusinya: ambil tanggal dari jam database, patok tengah hari.
TL;DR: Testnya kadang ijo kadang merah tiap subuh gara-gara Go pake jam WIB sedangkan database pake UTC. Selisih tujuh jam bikin hitungan kemarin jadi berantakan dan filternya nangkep data yang salah. Akhirnya dibenerin dengan ngambil tanggal langsung dari MySQL dan naruh data seed di tengah hari biar aman.
#go#mysql#testing - 14.17backend
Deskripsi Kontrak API yang Menyesatkan
Field jenis dilabel pilar dan admin_note diklaim diabaikan: dua deskripsi kontrak API yang salah, plus respons 400 yang belum terdokumentasi.
TL;DR: Gue nemu deskripsi spec yang gue tulis sendiri ternyata ngaco dan bikin misleading banget. Field jenis kek campur sama pilar, admin_note katanya diabaikan buat Pengajuan padahal wajib terus minimal lima karakter, plus endpoint history belum ndokumentasiin 400. Akhirnya cuma benerin teks doang tapi JSDoc ke-update otomatis jadi pelajaran buat nge-review deskripsi seserius kode.
#api#openapi#typescript - 13.19backend
Tiga Fix Kecil yang Bikin API Lebih Jujur
Catatan kosong dapat pesan error yang nggak nyambung, aktor yang hilang dicatat diam-diam, dan subject email berisi teks bebas pengaju. Tiga perbaikan kecil,
TL;DR: bug pesan error ngaco karena cek generik duluan, sekarang cek catatan wajib dulu jadi balik NOTE_REQUIRED yang jelas. konteks aktor hilang dulu kecatet jadi sistem, sekarang langsung ditolak 401 biar jejak audit nggak bohong. subjek email dari input user sekarang dibersihin dari newline biar nggak bisa nyuntik header.
#golang#api#security