Database, Authentication, Authorization, dan API
Jalankan PostgreSQL lokal, lindungi environment variable, dan pahami batas antara schema, migration, auth, permission, serta API.
Daftar isi
Database menyimpan state aplikasi. Authentication membuktikan siapa user. Authorization menentukan apa yang boleh dilakukan user tersebut. API menjadi batas komunikasi antara client, server, dan service lain. Keempatnya perlu dirancang bersama ketika aplikasi memproses data user.
1. Database, Schema, ORM, dan Migration
Schema mendefinisikan table, column, type, constraint, index, dan relationship. ORM membantu code membaca dan menulis database melalui model atau query API. Migration adalah perubahan schema yang berurutan dan dapat direview. Seed memasukkan data awal atau data latihan.
Jangan mengubah database production langsung dari UI database tanpa migration dan backup plan. File schema di code belum berarti database sudah berubah. Migration harus dibuat, ditinjau, dijalankan pada environment yang tepat, dan diverifikasi.
2. Jalankan PostgreSQL Lokal dengan Docker
Contoh Compose untuk latihan lokal:
services:
db:
image: postgres:17
restart: unless-stopped
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: local-development-only
POSTGRES_DB: app_local
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:Jalankan dan periksa service:
docker compose up -d
docker compose ps
docker compose logs dbCredential contoh hanya untuk komputer lokal. Jangan menggunakannya pada production. Gunakan versi image dan konfigurasi yang ditetapkan repository bila sudah tersedia.
3. Kelola Environment Variable dan Secret
Gunakan .env.local untuk nilai lokal dan .env.example untuk daftar nama variable tanpa secret. Tambahkan file secret ke .gitignore sebelum commit pertama.
DATABASE_URL=postgresql://app:local-development-only@localhost:5432/app_localJangan menaruh database URL production, token, private key, atau password dalam prompt, screenshot, log, issue, atau client-side bundle. Variable yang dapat dibaca browser harus dianggap public.
4. Bedakan Authentication dan Authorization
Authentication menjawab "siapa Anda?" melalui password, OAuth, passkey, atau mekanisme lain. Authorization menjawab "apa yang boleh Anda lakukan?" berdasarkan role, ownership, permission, tenant, dan resource.
Contoh: user yang sudah login belum tentu boleh membaca invoice user lain. Setiap operasi server harus memeriksa session dan scope data. Menyembunyikan tombol di frontend hanya memperbaiki UX, bukan security boundary.
5. Pahami API Boundary
API menerima request, memvalidasi input, memeriksa authorization, menjalankan business rule, berinteraksi dengan database, lalu menghasilkan response. Client tidak boleh menentukan sendiri harga final, role, tenant ID, atau status approval yang seharusnya ditetapkan server.
Untuk setiap endpoint, dokumentasikan method, path, input, output, authentication, permission, error, side effect, dan idempotency. Hindari mengembalikan stack trace, query mentah, credential, atau detail internal pada response public.
6. Ubah Blueprint Schema Menjadi Migration
Database Schema dari AI Blueprint adalah requirement dan design artifact, bukan bukti bahwa database runtime sudah siap. Bandingkan schema tersebut dengan ORM dan migration repository. Tentukan naming, type mapping, constraint, index, foreign key, cascade behavior, audit field, dan tenant isolation.
Untuk perubahan berisiko, gunakan alur expand, migrate data, switch code, lalu contract. Backup dan restore rehearsal diperlukan untuk data penting. Jangan menghapus column hanya karena tidak dipakai pada UI terbaru.
7. Test Data dan Permission
Minimum test harus mencakup:
- input valid dan invalid;
- user belum login;
- user login dengan permission benar;
- user login tanpa permission;
- akses lintas user atau tenant ditolak;
- resource tidak ditemukan;
- operasi berulang aman bila harus idempotent;
- transaction rollback ketika satu tahap gagal.
Gunakan data synthetic. Jangan menyalin record customer production ke repository atau environment latihan.
8. Stop, Start, dan Reset Lokal
Hentikan container tanpa menghapus data:
docker compose stop
docker compose startdocker compose down menghapus container dan network, tetapi volume bernama biasanya tetap ada. Opsi -v menghapus volume dan data. Jangan menjalankannya jika Anda belum memastikan data boleh hilang.
9. Quality Gate Data dan API
- Schema dan migration konsisten.
- Migration diuji pada database kosong dan upgrade path yang relevan.
- Secret tidak ada di Git atau client bundle.
- Semua write memvalidasi input pada server.
- Authorization diterapkan pada query atau service boundary.
- Tenant dan ownership diuji dengan kasus negatif.
- Error public aman dan tetap dapat didiagnosis melalui log internal.
- Backup, rollback, atau recovery plan sesuai risiko data.
Sumber resmi dan referensi
Gunakan sumber berikut untuk memeriksa command, fitur, pricing, atau limit terbaru.
Apakah panduan ini membantu?
Beritahu kami bila langkahnya berhasil atau ada informasi yang perlu diperbarui.