Batasi tugas pada satu pratinjau historis
Resep ini menyiapkan pratinjau komentar berukuran kecil. Jalankan panggilan di backend Node.js yang menyediakan fetch. Baca process.env.REDDIT_FETCH_API_KEY di lingkungan tersebut dan hentikan proses jika nilainya tidak ada, sebelum menghubungi arsip. Pengguna aplikasi seharusnya menerima data yang siap ditampilkan, bukan rahasia yang dipakai server untuk memberi otorisasi pada pengambilan. Hindari pula menyisipkan kunci dalam pesan kesalahan.
Gunakan tujuan tetap https://api.redditfetch.com/v1/comments?subreddit=javascript&limit=3 dan header seperti {"X-API-Key": key}. Authorization: Bearer <key> juga sah. Jangan mengganti tujuan ini dengan URL sembarang yang dikirim browser. Aplikasi Anda menetapkan akses dan batas penggunaan rutenya sendiri. Tentukan kapan pengunjung boleh memulai penyegaran berbayar, serta kapan salinan yang sudah disimpan cukup untuk memenuhi kebutuhan layar.
Pisahkan respons HTTP dari pengecualian jaringan
Operasi jaringan yang ditolak masuk ke catch di sekitar await fetch tanpa memberikan respons HTTP yang bisa diklasifikasikan. Sebaliknya, HTTP 401 atau 402 dapat diterima melalui promise yang terpenuhi. Periksa response.ok terlebih dahulu. Tangani status tidak berhasil sebelum membaca isi sebagai halaman komentar yang sukses diambil. Jika keduanya dicampur, masalah autentikasi dapat terlihat seperti arsip yang kosong.
Untuk HTTP 400 perbaiki parameter; untuk 401 periksa kunci; untuk 402 periksa saldo. Pada 429, percobaan ulang dengan jeda dan jumlah terbatas mungkin sesuai. Jangan mengulang semua kesalahan secara otomatis. Koneksi bisa terputus setelah server menyelesaikan pengambilan berbayar, sehingga pengecualian lokal tidak membuktikan permintaan bebas biaya. Percobaan ulang yang berhasil dikenai kredit tersendiri.
Uraikan JSON lalu periksa isinya
Pada jalur sukses, await response.json() juga dapat gagal. Pisahkan penyebab ini dari kegagalan transportasi dalam diagnostik internal. Setelah itu, periksa struktur respons yang diharapkan serta pastikan data merupakan array. JSON yang berhasil diuraikan hanyalah nilai JavaScript; itu tidak membuktikan setiap rekaman mempunyai teks yang berguna atau tipe kolom yang cocok. Validasi kebutuhan kartu sebelum meneruskan nilainya ke tampilan.
Ubah potongan menjadi status yang jujur
Petakan hanya kolom yang dipakai pratinjau. Bedakan teks hilang dari string kosong, pertahankan pengenal yang tersedia untuk menghubungkan tampilan dengan rekaman asal, dan tampilkan isi sebagai teks. Komentar adalah potongan datar. Kolom hubungan opsional tidak membuktikan pohon diskusi lengkap; tiga rekaman juga tidak menunjukkan bahwa seluruh balasan terhadap suatu komentar telah diperoleh.
Tetapkan status memuat, siap, kosong, dan gagal secara lokal. Array kosong yang sudah divalidasi berarti panggilan itu tidak memberikan rekaman. Jika ada rekaman tetapi semuanya gagal melewati pemeriksaan tampilan, catat penyebab itu secara terpisah. Pratinjau lama dapat tetap terlihat saat penyegaran gagal, asalkan jelas disebut sebagai salinan sebelumnya, bukan hasil baru yang baru saja diterima.
Putuskan apakah perlu memanggil lagi
Simpan hasil yang sudah divalidasi beserta parameter sebelum memperbarui kemajuan lokal. Memakai ulang salinan tidak memerlukan pengambilan baru; setiap penyegaran berhasil memakai satu kredit, termasuk yang kosong. Urutan arsip bukan urutan waktu. Memperluas pengambilan sampai 100 rekaman per permintaan dan 100 halaman per kueri tetap tidak membuktikan cakupan menyeluruh atau percakapan yang lengkap.
Lihat dokumentasi untuk kolom serta total, halaman harga untuk biaya, dan halaman kunci untuk pengaturan akun. /v1/status bersifat publik dan tidak berbayar, tetapi hanya memberikan keterangan statis, bukan pengujian ketersediaan arsip. Tetap tampilkan asal historis potongan komentar. Jangan menjanjikan pembaruan langsung, hasil yang selalu identik pada panggilan mendatang, atau seluruh percakapan dari beberapa rekaman tersebut.