Halaman referensi API Node.js terasa padat pada kunjungan pertama: judul penuh tanda kurung, tabel kecil bertumpuk, dan kata Stability yang muncul di mana-mana. Padatnya bukan tanpa alasan — satu entri harus memuat kontrak lengkap sebuah API supaya pembaca tidak perlu menebak perilakunya. Begitu anatomi satu entri dikuasai, seluruh halaman referensi lain terbaca dengan pola yang sama, karena formatnya seragam dari fs sampai http. Chapter ini membedah satu entri nyata — fsPromises.readFile — bagian demi bagian, lalu melengkapi kita dengan indeks stabilitas dan tabel History sebagai alat baca cepat.
Anatomi Sebuah Entri API #
Kita pakai entri fsPromises.readFile(path[, options])
pada dokumentasi garis 24 sebagai contoh. Entri tersebut menyimpan seluruh kontrak function ini, dan tiap bagiannya punya peran tetap:
| Bagian entri | Contoh isinya | Peran bagi pembaca |
|---|---|---|
| Judul sekaligus signature | fsPromises.readFile(path[, options]) | Bentuk pemanggilan: nama, parameter, dan mana yang opsional |
Baris Added in: | Added in: v10.0.0 | Versi pertama API ini tersedia |
| Tabel History | v24.19.0 menambah opsi buffer | Riwayat perubahan perilaku, terbaru di atas |
| Daftar parameter | path <string> | <Buffer> | <URL> | <FileHandle> | Nama variabel beserta tipe yang diterima |
| Daftar opsi | encoding, flag, signal, buffer | Isi object options beserta nilai bawaannya |
Baris Returns: | Fulfills with the contents of the file | Nilai yang dijanjikan ke pemanggil |
| Paragraf deskripsi | Perilaku saat path berupa direktori | Batasan dan kasus khusus yang jarang terpikirkan |
Judul entri sekaligus adalah tautan: arahkan kursor ke judulnya, lalu simbol # akan muncul di sisinya dengan alamat seperti fs.html#fspromisesreadfilepath-options. Alamat berpagar itulah yang bisa kita bagikan atau simpan sebagai penanda menuju entri yang persis — jauh lebih presisi daripada membagikan halaman fs.html utuh yang memuat ratusan entri lain.
Notasi pada Signature #
Signature memakai tiga notasi ringkas yang perlu dikenali sekali saja:
| Notasi | Contoh | Artinya |
|---|---|---|
Kurung siku [ ... ] | readFile(path[, options]) | Argumen opsional; boleh dilewati saat memanggil |
Garis tegak | | <string> | <Buffer> | Tipe gabungan; salah satu dari beberapa tipe diterima |
Kurung sudut <tipe> | <Promise> | Tipe nilai yang dimaksud — <Promise> berarti mengembalikan promise |
Notasi ini menjelaskan mengapa demo pada Section Filesystem kerap memanggil readFile dalam dua bentuk: readFile(path) saat isi berkas cukup dikonsumsi sebagai Buffer, dan readFile(path, { encoding: "utf8" }) saat hasilnya perlu langsung berupa string. Keduanya sah menurut signature yang sama.
Dari Dokumentasi ke Kode #
Membaca entri akan makin melekat jika langsung diuji. Berkas baca-tugas.mjs berikut menjalankan fsPromises.readFile sesuai kontraknya — sekali pada jalur sukses dengan options berisi encoding, sekali pada jalur gagal karena path salah ketik:
import { readFile } from "node:fs/promises";
// Skenario sukses: path valid, options berisi encoding "utf8"
const isi = await readFile("catatan.txt", { encoding: "utf8" });
console.log(`isi catatan : ${isi.trim()}`);
// Skenario gagal: path salah ketik sehingga berkas tidak ditemukan
try {
await readFile("catata.txt", { encoding: "utf8" });
} catch (e) {
console.log(`kode error : ${e.code}`);
}Output yang Dihasilkan:
isi catatan : Belajar membaca dokumentasi API resmi.
kode error : ENOENTMari kita telaah baris-baris kode di atas:
- Baris 1 (
import):readFilediimpor darinode:fs/promises— entri yang kita baca memang berada pada bagian Promises API halamanfs, berbeda dengan varian callback-nya yang berada di bagian Callback API. - Baris 4 (
optionssebagai object): pemanggilan mengikuti signaturereadFile(path[, options]); opsiencoding: "utf8"membuat promise terpenuhi dengan string alih-alihBuffer. - Baris 8-11 (
try...catch): jalur gagal tetap ditangani eksplisit, dan yang dicetak hanyae.code— kodeENOENTinilah yang bisa dicari langsung di halamanerrorsdokumentasi ketika maknanya belum jelas.
Indeks Stabilitas #
Sebagian entri memuat baris seperti Stability: 2 - Stable atau Stability: 1.1 - Active development. Indeks ini menandakan seberapa kokoh komitmen API tersebut untuk tidak berubah. Makna tiap angkatannya tercantum pada indeks stabilitas resmi
:
| Penanda | Status | Arti praktis |
|---|---|---|
Stability: 0 | Deprecated | Akan ditinggalkan; cari pengganti sebelum menulis kode baru |
Stability: 1.0 | Early development | Baru dirintis, bentuknya masih bisa berubah besar |
Stability: 1.1 | Active development | Mendekati layak pakai, perubahan masih mungkin |
Stability: 1.2 | Release candidate | Kandidat stabil; uji dan masukan pembaca sangat diharapkan |
Stability: 2 | Stable | Kompatibilitas dengan ekosistem adalah prioritas tinggi |
Stability: 3 | Legacy | Masih berfungsi dan dijaga semver, tapi tak lagi dikembangkan aktif |
Tabel History sebagai Alat Kompatibilitas #
Tabel History pada tiap entri mencatat kapan sebuah perilaku ditambahkan atau diubah, disusun dari yang terbaru. Entri fsPromises.readFile pada dokumentasi garis 24, misalnya, mencatat bahwa opsi buffer baru hadir di v24.19.0 dan signal sejak v15.2.0 — dua angka yang langsung memberi tahu versi minimum bila kita ingin memakai opsi tersebut. Karena itu tabel ini adalah alat bantu utama saat menulis kode yang harus berjalan pada beberapa versi Node.js sekaligus; matriks ringkasnya untuk seluruh fitur Course ini kita susun di Chapter Referensi Kompatibilitas.
Anatomi entri API kini bukan lagi halaman yang asing: signature, tipe, opsi, nilai balik, stabilitas, dan riwayatnya masing-masing punya tempat yang jelas. Sisa kendala saat membaca dokumentasi biasanya bukan strukturnya, melainkan istilah yang bertaburan di dalamnya — dari event loop sampai middleware — dan daftar lengkapnya sudah kita kumpulkan di Chapter Glosarium.