Pada modul Membuat Route GET, program hanya mengembalikan seluruh isi data tours. Bagaimana jika kita ingin menampilkan tours dengan id tertentu saja?
Ya, kita perlu menambahkan parameter pada URL. Contoh: api/v1/tours/2, berarti pada sisi server program akan mencari data tours dengan id 2 dan mengembalikan pada client.
Masih menggunakan file app.js, tambahkan code berikut
app.get('/api/v1/tours/:id', (req, res) => {
const id = req.params.id * 1;
const tour = tours.find(el => el.id === id);
if(id > tours.length){
return res.status(404).json({
status: 'fail',
message: 'invalid ID'
});
}
res.status(200).json({
status: 'success',
data: {
tour: tour
}
});
});
Buat route GET dengan end point ‘/api/v1/tours/:id‘. :id adalah parameter yang dapat kita akses melalui object req.params.
Untuk keperluan tutorial ini digunakan id, tentu bisa apa saja, sesuai kebutuhan API yang dikembangkan.
Karena data id pada file json adalah integer, maka kita perlu convert parameter menjadi integer dengan perintah const id = req.params.id * 1;
Kemudian cari data tour pada file json dengan menggunakan perintah tours.find(el => el.id === id);
Untuk tutorial ini, validasi yang digunakan hanya validasi sederhana. Pada prakteknya masih perlu ditingkatkan proses validasinya.
- jIka data tidak ditemukan, kembalikan message invalid dengan code 404
- Jika ditemukan maka kembalikan data tour dengan code 200 dan data tour dengan id yang di request.
Berikut adalah file akhir dari app.js adalah seperti dibawah
const fs = require('fs'); const express = require('express'); const app = express(); app.use(express.json()); const tours = JSON.parse(fs.readFileSync(`${__dirname}/devdata/tours-simple.json`)); app.get('/api/v1/tours', (req, res) => { res.status(200).json({ status: 'success', results: tours.length , data: { tours: tours } }); }); app.get('/api/v1/tours/:id', (req, res) => { const id = req.params.id * 1; const tour = tours.find(el => el.id === id); if(id > tours.length){ return res.status(404).json({ status: 'fail', message: 'invalid ID' }); } res.status(200).json({ status: 'success', data: { tour: tour } }); }); app.post('/api/v1/tours', (req, res) => { const newId = tours[tours.length-1].id + 1; const newTour = Object.assign({id: newId}, req.body); tours.push(newTour); fs.writeFile(`${__dirname}/devdata/tours-simple.json`, JSON.stringify(tours), err=>{ res.status(201).json({ status: 'success', data: { tour: newTour } }); }); }); const port = 3000; app.listen(port, ()=>{ console.log(`Listening on port ${port}...`); });
Silakan test melalui Postman, dengan memasukan alamat 127.0.0.1:3000/api/v1/tours/2, dengan method GET. Lalu tekan tombol Send.
Maka response akan berisi data tour dengan id 2.
{
"status": "success",
"data": {
"tour": {
"id": 2,
"name": "Dieng Highland",
"duration": 4,
"maxGroupSize": 10,
"difficulty": "medium",
"ratingsAverage": 4.5,
"ratingsQuantity": 13,
"price": 997,
"summary": "Nikmati alam pegunungan indah",
"description": "Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua, ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum!\nDolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur, exercitation ullamco laboris nisi ut aliquip. Lorem ipsum dolor sit amet, consectetur adipisicing elit!",
"imageCover": "tour-3-cover.jpg",
"images": [
"tour-3-1.jpg",
"tour-3-2.jpg",
"tour-3-3.jpg"
],
"startDates": [
"2022-01-05,10:00",
"2022-02-12,10:00",
"2023-01-06,10:00"
]
}
}
}
dan bila kita masukan id yang tidak ada, contoh 29, maka response akan seperti dibawah
{
"status": "fail",
"message": "invalid ID"
}