Proyek sebelumnya bekerja sepenuhnya di dalam mongosh; sekarang kita pindah ke sisi aplikasi. Kita membangun REST API manajemen tugas — backend untuk aplikasi pencatat tugas tim — memakai Node.js dan driver mongodb resmi, tanpa framework web apa pun. Router HTTP, parsing body, validasi, sampai autentikasi kita tulis di atas node:http murni agar mekanisme di balik framework seperti Express terlihat jelas.
Proyek ini memosisikan kita sebagai pengembang backend yang menerjemikan kebutuhan tim menjadi endpoint: membuat tugas, memindahkan status todo → doing → done, menghapus tugas lama, dan membatasi akses lewat API key beserta peran pengguna.
Tujuan Proyek #
Setelah menyelesaikan proyek ini, kita memiliki API produksi-mini dengan karakteristik berikut:
- Koneksi terkelola: satu pool koneksi singleton yang dibagikan ke seluruh handler, dengan konfigurasi lewat variabel lingkungan.
- REST penuh untuk resource tugas:
GET/POST/PUT/DELETE /tugasdengan filter status, pagination, dan unique index padakode. - Validasi manual bergaya
$jsonSchema: field wajib, tipe, panjang, dan enum diperiksa sebelum data menyentuh database; field tak dikenal dibuang. - Format error konsisten: kesalahan klien (400), tugas hilang (404), duplikat
E11000(409), dan kegagalan server (500) semuanya memakai satu bentuk amplop JSON. - Autentikasi API key: header
X-API-Key, hash SHA-256 di database, perbandingan waktu-konstantimingSafeEqual, serta pembatasanDELETEuntuk peranadmin.
Prasyarat #
Proyek ini memadukan materi tiga Section sebelumnya. Pastikan kita sudah memahami:
- MongoDB dengan Node.js — terutama chapter Menggunakan MongoDB Driver (
MongoClient, operasi CRUD driver) dan Struktur Aplikasi Node.js (pemisahan modul). - Integrasi Aplikasi — chapter Connection Pooling, Environment Configuration, Repository Pattern, dan Error Handling yang semuanya dipraktikkan di sini.
- Keamanan — chapter Authentication, Credential Management, dan Security Checklist menjadi rujukan Bagian 4.
Server yang dipakai tetap replika lingkungan Course: single-node replica set rs0 di 127.0.0.1:27017. Driver yang dipakai adalah mongodb 7.7 pada Node.js 24.
Hasil Akhir #
| Berkas | Peran |
|---|---|
src/db.js | Koneksi singleton + pool, bisa diping langsung |
src/tugas.js | Repository: seluruh akses data collection tugas |
src/validasi.js | Skema dan pemeriksaan payload |
src/users.js | Pengguna, pembuatan API key, verifikasi |
src/server.js | Router node:http + handler + lapisan error dan auth |
tests/api-tes.js | Suite tes mandiri; mencetak SEMUA TES LULUS |
Peta Bagian #
Proyek dikerjakan dalam empat bagian berurutan — setiap bagian menambah satu lapisan pada server yang sama:
- Bagian 1 — Koneksi Database: struktur proyek,
db.jssingleton, variabel lingkungan, dan ujiping. - Bagian 2 — CRUD API: router HTTP, repository tugas, dan endpoint lengkap.
- Bagian 3 — Validation dan Error Handling: validasi payload serta format error seragam, termasuk pemetaan
E11000menjadi 409. - Bagian 4 — Authentication dan Security: API key, peran pengguna, dan catatan pengerasan untuk produksi.
Menjalankan Kode Proyek #
Buat folder proyek dengan struktur berikut — setiap berkas diunduh dari bagian yang sesuai:
api-manajemen-tugas/
├── src/
│ ├── db.js
│ ├── tugas.js
│ ├── validasi.js
│ ├── users.js
│ └── server.js
└── tests/
└── api-tes.jsInstal dependensi lalu jalankan server dan suite tes dari folder proyek:
npm init -y
npm install mongodb@7
node src/server.js # API di http://127.0.0.1:3000
node tests/api-tes.js # suite tes mandiriSuite tes memakai database proyek_api_tugas_tes yang dibersihkan sendiri, sementara server berjalan di database proyek_api_tugas — keduanya tidak saling mengganggu.
Siapkan struktur proyek Node.js dan koneksi MongoDB yang rapi.
Buka → # Bagian 2: CRUD APIImplementasikan endpoint CRUD untuk resource tugas.
Buka → # Bagian 3: Validation dan Error HandlingValidasi input API dan standarkan format error response.
Buka → # Bagian 4: Authentication dan SecurityTambahkan autentikasi user dan pengerasan keamanan API.
Buka →