🍭 NodeJS #15: Mengambil Data dari API Eksternal dengan Fetch
Halo, calon developer web! 👋
Di tutorial sebelumnya (NodeJS #14) kita sudah belajar membuat API sendiri. Sekarang saatnya kita belajar mengambil data dari API milik orang lain (API eksternal). Ini sangat penting karena banyak aplikasi membutuhkan data dari luar, seperti cuaca, berita, harga saham, dan lain-lain. Kita akan menggunakan fetch, sebuah fungsi bawaan JavaScript yang juga tersedia di Node.js versi 18 ke atas. Yuk, kita pelajari! 🚀
🧐 Apa Itu Fetch?
fetch adalah fungsi yang digunakan untuk melakukan HTTP request (seperti GET, POST) dari JavaScript. Dulu, di Node.js kita perlu menginstal library tambahan seperti axios atau node-fetch. Tapi sejak Node.js versi 18, fetch sudah menjadi fitur bawaan, jadi kita bisa langsung menggunakannya tanpa instalasi apa pun. Keren, kan?
Fetch mengembalikan Promise, sehingga kita perlu menggunakan .then() atau async/await untuk menangani responsnya.
🌍 Memilih API Publik untuk Dicoba
Kita akan menggunakan dua API publik yang gratis dan mudah:
- JSONPlaceholder – API palsu untuk testing, menyediakan data contoh seperti pengguna, postingan, dll. URL:
https://jsonplaceholder.typicode.com/users - OpenWeatherMap – API cuaca. Kamu perlu mendaftar (gratis) untuk mendapatkan API key. Kita akan gunakan yang ini agar lebih menarik.
Untuk OpenWeatherMap, daftar di openweathermap.org dan dapatkan API key. Atau jika tidak mau repot, cukup gunakan JSONPlaceholder untuk latihan.
📦 Proyek Baru: Cuaca Sederhana
Mari buat proyek baru. Buat folder api-eksternal, inisialisasi npm, dan instal express (kita akan tampilkan data di web).
mkdir api-eksternal
cd api-eksternal
npm init -y
npm install express
Sekarang buat file app.js.
🔄 Mengambil Data dengan Fetch (Async/Await)
Kita akan buat route /cuaca yang mengambil data cuaca dari OpenWeatherMap untuk kota tertentu (misal Jakarta). Tapi sebelumnya, pastikan kamu punya API key.
const express = require('express');
const app = express();
const port = 3000;
// Ganti dengan API key kamu
const API_KEY = '1234567890abcdef';
const kota = 'Jakarta';
const url = `https://api.openweathermap.org/data/2.5/weather?q=${kota}&appid=${API_KEY}&units=metric`;
app.get('/cuaca', async (req, res) => {
try {
const response = await fetch(url);
const data = await response.json();
if (response.ok) {
// Kirim data sebagai JSON (atau bisa juga render HTML)
res.json(data);
} else {
res.status(response.status).json({ error: data.message });
}
} catch (error) {
res.status(500).json({ error: 'Terjadi kesalahan mengambil data' });
}
});
app.listen(port, () => {
console.log(`Server berjalan di http://localhost:${port}`);
});
Penjelasan:
await fetch(url)– mengirim request GET ke API.await response.json()– mengubah respons menjadi JSON.response.ok– bernilai true jika status code 200-299.- Jika gagal, kita kirim status dari API eksternal.
- Gunakan try-catch untuk menangani error jaringan.
Jalankan dengan node app.js dan akses http://localhost:3000/cuaca. Jika berhasil, kamu akan melihat data cuaca Jakarta dalam format JSON.
🌐 Contoh dengan JSONPlaceholder
Ganti route dengan mengambil data pengguna dari JSONPlaceholder:
app.get('/users', async (req, res) => {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/users');
const users = await response.json();
res.json(users);
} catch (error) {
res.status(500).json({ error: 'Gagal mengambil data' });
}
});
Akses /users dan lihat daftar pengguna palsu.
📄 Menampilkan Data di Halaman HTML (dengan EJS)
Tentu lebih keren jika data ditampilkan dalam halaman HTML yang rapi. Mari gunakan EJS untuk merender daftar pengguna.
Instal EJS: npm install ejs
Set view engine di app.js:
app.set('view engine', 'ejs');
Buat folder views dan file views/users.ejs:
<!DOCTYPE html>
<html>
<head>
<title>Daftar Pengguna</title>
<style>
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; }
th { background-color: #f2f2f2; }
</style>
</head>
<body>
<h1>Daftar Pengguna dari API</h1>
<table>
<tr>
<th>ID</th>
<th>Nama</th>
<th>Email</th>
<th>Kota</th>
</tr>
<% users.forEach(user => { %>
<tr>
<td><%= user.id %></td>
<td><%= user.name %></td>
<td><%= user.email %></td>
<td><%= user.address.city %></td>
</tr>
<% }); %>
</table>
</body>
</html>
Kemudian ubah route /users untuk merender file EJS:
app.get('/users', async (req, res) => {
try {
const response = await fetch('https://jsonplaceholder.typicode.com/users');
const users = await response.json();
res.render('users', { users });
} catch (error) {
res.status(500).send('Gagal mengambil data');
}
});
Sekarang akses /users, data akan tampil dalam tabel HTML yang cantik.
🔄 Alternatif: Menggunakan Axios
Meskipun fetch sudah bawaan, banyak developer lebih suka menggunakan axios karena sintaksnya lebih sederhana dan penanganan error lebih mudah. Axios perlu diinstal:
npm install axios
Contoh penggunaan axios (sama dengan fetch):
const axios = require('axios');
app.get('/users-axios', async (req, res) => {
try {
const response = await axios.get('https://jsonplaceholder.typicode.com/users');
res.render('users', { users: response.data });
} catch (error) {
res.status(500).send('Gagal mengambil data');
}
});
Axios langsung mengembalikan data di response.data, tidak perlu .json(). Juga error handling lebih terintegrasi.
🧪 Latihan Mandiri
- Buat route
/postsyang mengambil data postingan dari JSONPlaceholder (/posts) dan tampilkan dalam bentuk kartu (card) menggunakan EJS dan CSS. - Gunakan API publik lain, misal API berita atau API film (cari yang gratis). Tampilkan data dengan rapi.
- Buat form input kota, lalu ketika disubmit, tampilkan cuaca kota tersebut menggunakan API OpenWeatherMap.
📚 Rangkuman
| Metode | Kelebihan | Contoh |
|---|---|---|
| fetch (bawaan) | Tidak perlu instalasi, promise-based | await fetch(url) |
| axios | Sintaks lebih sederhana, transformasi otomatis | await axios.get(url) |
🏁 Penutup
Sekarang kamu sudah bisa mengambil data dari API eksternal dan menampilkannya di aplikasi sendiri. Ini membuka banyak kemungkinan: aplikasi cuaca, berita, informasi real-time, dan lain-lain. Di tutorial selanjutnya (NodeJS #16) kita akan belajar menampilkan data API di halaman web dengan EJS secara lebih mendalam, termasuk cara mengirim data dari form ke API eksternal. Sampai jumpa!
Jangan lupa untuk mencoba latihan dan bereksperimen sendiri. Kalau ada pertanyaan, tulis di komentar. Selamat coding! 💻😊
Ditulis dengan ❤️ untuk para pemula yang ingin menjadi programmer handal.