Pada modul sebelumnya kita baru mencoba menggunakan express. Pada modul ini kita akan mulai membuat RESTFull API untuk method GET. Method GET digunakan untuk mengambil data.
Untuk kemudahan tutorial, data yang digunakan berupa file json. Pada prakteknya untuk live application, biasanya data akan disimpan di database.
Berikut file json untuk data yang akan kita gunakan dalam tutorial. Silakan copy file dibawah, simpan sesuai nama yang sesuai.
Pada tutorial file disimpan di directory devdata dengan nama tours-simple.json.
[ { "id":0, "name":"Miracle of Borobudur", "duration":2, "maxGroupSize":25, "difficulty":"easy", "ratingsAverage":4.7, "ratingsQuantity":37, "price":397, "summary":"Menikmati salah satu keajaiban dunia.", "description":"Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\nLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", "imageCover":"tour-1-cover.jpg", "images":[ "tour-1-1.jpg", "tour-1-2.jpg", "tour-1-3.jpg" ], "startDates":[ "2021-04-25,10:00", "2021-07-20,10:00", "2021-10-05,10:00" ] }, { "id":1, "name":"Wonderful Bali Beach", "duration":7, "maxGroupSize":15, "difficulty":"medium", "ratingsAverage":4.8, "ratingsQuantity":23, "price":497, "summary":"Eksplore keindahan pantai dan laut bali", "description":"Consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\nIrure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", "imageCover":"tour-2-cover.jpg", "images":[ "tour-2-1.jpg", "tour-2-2.jpg", "tour-2-3.jpg" ], "startDates":[ "2021-06-19,10:00", "2021-07-20,10:00", "2021-08-18,10:00" ] }, { "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" ] }, { "id":3, "name":"Bromo Advanture", "duration":9, "maxGroupSize":20, "difficulty":"easy", "ratingsAverage":4.6, "ratingsQuantity":54, "price":1197, "summary":"Mengejar matahari terbit terindah di dunia", "description":"Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat lorem ipsum dolor sit amet.\nConsectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur, nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat!", "imageCover":"tour-4-cover.jpg", "images":[ "tour-4-1.jpg", "tour-4-2.jpg", "tour-4-3.jpg" ], "startDates":[ "2021-03-11,10:00", "2021-05-02,10:00", "2021-06-09,10:00" ] }, { "id":4, "name":"Jakarta Food Culinary", "duration":10, "maxGroupSize":15, "difficulty":"easy", "ratingsAverage":4.9, "ratingsQuantity":19, "price":1497, "summary":"Wisata kuliner malam terlengkap di Jakarta ", "description":"Lorem ipsum dolor sit amet, consectetur adipisicing elit, 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. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\nDuis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum!", "imageCover":"tour-5-cover.jpg", "images":[ "tour-5-1.jpg", "tour-5-2.jpg", "tour-5-3.jpg" ], "startDates":[ "2021-08-05,10:00", "2022-03-20,10:00", "2022-08-12,10:00" ] }, { "id":5, "name":"Jayawijaya Adventure", "duration":14, "maxGroupSize":8, "difficulty":"difficult", "ratingsAverage":4.7, "ratingsQuantity":28, "price":2997, "summary":"Ketika tour mainstream bukan pilihan Anda", "description":"Nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Lorem ipsum dolor sit amet, consectetur adipisicing elit, 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.\nVoluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur!", "imageCover":"tour-6-cover.jpg", "images":[ "tour-6-1.jpg", "tour-6-2.jpg", "tour-6-3.jpg" ], "startDates":[ "2021-07-19,10:00", "2021-09-06,10:00", "2022-03-18,10:00" ] }, { "id":6, "name":"Durian Festival", "duration":5, "maxGroupSize":8, "difficulty":"easy", "ratingsAverage":4.5, "ratingsQuantity":35, "price":1997, "summary":"Durian All you can eat Durian", "description":"Consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\nIrure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.", "imageCover":"tour-7-cover.jpg", "images":[ "tour-7-1.jpg", "tour-7-2.jpg", "tour-7-3.jpg" ], "startDates":[ "2021-02-12,10:00", "2021-04-14,10:00", "2021-09-01,10:00" ] }, { "id":7, "name":"Wonderful Raja Ampat", "duration":9, "maxGroupSize":8, "difficulty":"medium", "ratingsAverage":4.7, "ratingsQuantity":28, "price":2997, "summary":"Nikmati keindahan pulau luar Indonesia ", "description":"Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\nLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.", "imageCover":"tour-8-cover.jpg", "images":[ "tour-8-1.jpg", "tour-8-2.jpg", "tour-8-3.jpg" ], "startDates":[ "2021-03-23,10:00", "2021-10-25,10:00", "2022-01-30,10:00" ] }, { "id":8, "name":"Pecinta Surfing", "duration":3, "maxGroupSize":12, "difficulty":"difficult", "ratingsAverage":4.9, "ratingsQuantity":33, "price":1497, "summary":"Taklukan ombak yang menantang di pantai perawan laut selatan", "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-9-cover.jpg", "images":[ "tour-9-1.jpg", "tour-9-2.jpg", "tour-9-3.jpg" ], "startDates":[ "2021-12-16,10:00", "2022-01-16,10:00", "2022-12-12,10:00" ] } ]
Buka file app.js dan ubah sesuai dengan code dibawah
const fs = require('fs'); const express = require('express'); const app = express(); 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 } }); }); const port = 3000; app.listen(port, ()=>{ console.log(`Listening on port ${port}...`); });
Penjelasan Code
const fs = require('fs');
const express = require('express');
Load module yang akan digunakan, fs untuk mengakses file system, dan modul express.
const app = express();
Inisialisasi modul express ke variable app.
const tours = JSON.parse(fs.readFileSync(`${__dirname}/devdata/tours-simple.json`));
Load data dari file simple-tours.json. Method yang digunakan adalah fs.readFileSync. ${__dirname} adalah variable global dari node.js, untuk mengakses root dari aplikasi.
app.get('/api/v1/tours', (req, res) => {
res.status(200).json({
status: 'success',
results: tours.length ,
data: {
tours: tours
}
});
});
Gunakan app.get untuk menangani method GET dari HTTP request. app get memiliki format
app.get('route', (req, res) => {
//lakukan response disini
});
Route yang akan digunakan adalah /api/v1/tours, Anda bisa memberi nama route sendiri, yang penting sesuai aturan RESTFull API Architecture.
Untuk mengembalikan response, gunakan object res. Object res memiliki method status yang diisi dengan status code, pada contoh 200, yaitu Status OK.
res.status(200).
Karena kita akan mengembalikan format json, maka method selanjutnya adalah .json yang diisi dengan object json seperti berikut.
results: tours.length untuk mengembalikan jumlah row/data yang berhasil dibaca.
{
status: 'success',
results: tours.length ,
data: {
tours: tours
}
}
Testing Menggunakan Postman
Pilih method GET, Ketikan 127.0.0.1/api/v1/tours, lalu tekan Send button. Response akan ditampilkan di tab Body.
Dapat dilihat semua data tours dikembalikan, dan jumlah tours yang ada adalah 9 tours.
