Modul Node 2 - REST API MySQL
Modul Node 2 - REST API MySQL
js dan MySQL
Pada modul sebelumnya kita telah mempelajari tentang REST API pada Node JS,
membuat proses request dan response pada REST API. Pada modul ini kita akan belajar
bagimana membuat REST API dengan melibatkan database MySQL sebagai data resource.
Terdapat standarisasi dalam pembuatan REST API terutama dalam pemilihan request method.
Adapun standar dalam pemilihan request method adalah sebagai berikut.
1. GET, digunakan untuk proses READ DATA atau mendapatkan data dari database.
2. POST, digunakan untuk proses CREATE DATA atau menambahkan data baru ke
database.
3. PUT, digunakan untuk proses UPDATE DATA atau mengubah data pada database.
4. DELETE, digunakan untuk proses DELETE DATA atau menghapus data pada database.
3. Siapkan folder project pelanggaran_siswa dan buka folder tersebut pada editor.
4. Install library yang dibutuhkan yaitu express, body-parser, mysql, dan cors dengan perintah
seperti berikut ini.
npm install --save express body-parser cors mysql
5. Buatlah file javascript baru dengan nama “api.js”
6. Inisiasi library yang telah diinstall sebelumnya.
// inisiasi library
const express = require("express")
const bodyParser = require("body-parser")
const cors = require("cors")
const mysql = require("mysql")
// implementation
const app = express()
app.use(cors())
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: true}))
// create MySQL Connection
const db = mysql.createConnection({
host: "localhost",
user: "root",
password: "",
database: "pelanggaran_siswa"
})
db.connect(error => {
if (error) {
console.log(error.message)
} else {
console.log("MySQL Connected")
}
})
8. Buatlah end-point untuk mengakses data siswa menggunakan method GET seperti berikut
ini.
// end-point akses data siswa
app.get("/siswa", (req, res) => {
// create sql query
let sql = "select * from siswa"
// run query
db.query(sql, (error, result) => {
let response = null
if (error) {
response = {
message: error.message // pesan error
}
} else {
response = {
count: result.length, // jumlah data
siswa: result // isi data
}
}
res.json(response) // send response
})
})
9. Buatlah end-point untuk mengakses data siswa berdasarkan id menggunakan method GET
seperti berikut ini.
// end-point akses data siswa berdasarkan id_siswa tertentu
app.get("/siswa/:id", (req, res) => {
let data = {
id_siswa: req.params.id
}
// create sql query
let sql = "select * from siswa where ?"
// run query
db.query(sql, data, (error, result) => {
let response = null
if (error) {
response = {
message: error.message // pesan error
}
} else {
response = {
count: result.length, // jumlah data
siswa: result // isi data
}
}
res.json(response) // send response
})
})
10. Buatlah end-point untuk menyimpan data siswa baru menggunakan method POST seperti
berikut ini.
// end-point menyimpan data siswa
app.post("/siswa", (req,res) => {
// prepare data
let data = {
nis: req.body.nis,
nama_siswa: req.body.nama_siswa,
kelas: req.body.kelas,
poin: req.body.poin
}
// create sql query insert
let sql = "insert into siswa set ?"
// run query
db.query(sql, data, (error, result) => {
let response = null
if (error) {
response = {
message: error.message
}
} else {
response = {
message: result.affectedRows + " data inserted"
}
}
res.json(response) // send response
})
})
11. Buatlah end-point untuk mengubah data siswa menggunkan method PUT seperti berikut
ini.
// end-point mengubah data siswa
app.put("/siswa", (req,res) => {
// prepare data
let data = [
// data
{
nis: req.body.nis,
nama_siswa: req.body.nama_siswa,
kelas: req.body.kelas,
poin: req.body.poin
},
// parameter (primary key)
{
id_siswa: req.body.id_siswa
}
]
// create sql query update
let sql = "update siswa set ? where ?"
// run query
db.query(sql, data, (error, result) => {
let response = null
if (error) {
response = {
message: error.message
}
} else {
response = {
message: result.affectedRows + " data updated"
}
}
res.json(response) // send response
})
})
12. Buatlah end-point untuk menghapus data siswa menggunakan method DELETE seperti
berikut ini.
// end-point menghapus data siswa berdasarkan id_siswa
app.delete("/siswa/:id", (req,res) => {
// prepare data
let data = {
id_siswa: req.params.id
}
// create query sql delete
let sql = "delete from siswa where ?"
// run query
db.query(sql, data, (error, result) => {
let response = null
if (error) {
response = {
message: error.message
}
} else {
response = {
message: result.affectedRows + " data deleted"
}
}
res.json(response) // send response
})
})
13. Tentukan port yang digunakan untuk menjalankan port server dari API yang dibuat.
app.listen(8000, () => {
console.log("Run on port 8000")
})
14. Jalankan file api.js yang dibuat menggunakan perintah node api.js.
15. Buka aplikasi Postman untuk menguji API yang telah dibuat.
16. Pilih method POST dan masukkan url untuk menambahkan data siswa yaitu
http://localhost:8000/siswa.
17. Masukkan data yang akan ditambahkan melalui tab Body dan isikan data seperti berikut.
18. Selanjutnya klik tombol Send dan jika berhasil akan mendapatkan response seperti berikut
ini.
Jika berhasil akan mendapatkan response berupa data siswa seperti berikut.
21. Untuk mengubah data siswa, silahkan masukkan end-point untuk ubah data yaitu
http://localhost:8000/siswa dengan method PUT.
22. Tentukan data yang akan diubah pada tab Body dan sertakan id_siswa yang akan diubah
datanya.
Jika berhasil akan mendapatkan response seperti berikut ini.
23. Untuk menghapus data siswa, masukkan end-point untuk hapus data yang diikuti dengan
id_siswa yang akan dihapus (siswa yang dihapus dengan id_siswa: 1)
http://localhost:8000/siswa/1 dengan method DELETE.
Buatlah API untuk CRUD untuk tabel pelanggaran dan user! Untuk tabel user, data password
menggunakan hash MD5.
1. Tambahkan end-point untuk menambahkan data pelanggaran siswa seperti berikut ini.
Install library moment dengan perintah npm install –save moment untuk menentukan
current time saat penambahan data, jangan lupa untuk memanggil library tersebut dengan
menambahkan const moment = require("moment").
// end-point menambahkan data pelanggaran siswa
app.post("/pelanggaran_siswa", (req,res) => {
// prepare data to pelanggaran_siswa
let data = {
id_siswa: req.body.id_siswa,
id_user: req.body.id_user,
waktu: moment().format('YYYY-MM-DD HH:mm:ss') // get current time
}
// parse to JSON
let pelanggaran = JSON.parse(req.body.pelanggaran)
// create query insert to pelanggaran_siswa
let sql = "insert into pelanggaran_siswa set ?"
// run query
db.query(sql, data, (error, result) => {
let response = null
if (error) {
res.json({message: error.message})
} else {
// get last inserted id_pelanggaran
let lastID = result.insertId
// prepare data to detail_pelanggaran
let data = []
for (let index = 0; index < pelanggaran.length; index++) {
data.push([
lastID, pelanggaran[index].id_pelanggaran
])
}
// create query insert detail_pelanggaran
let sql = "insert into detail_pelanggaran_siswa values ?"
db.query(sql, [data], (error, result) => {
if (error) {
res.json({message: error.message})
} else {
res.json({message: "Data has been inserted"})
}
})
}
})
})
Saat akan mencoba menguji end-point ini, pilih method POST dan ketikkan url berikut ini.
Selanjutnya pada bagian body, kita akan mengirimakan data request berikut.
Pada data “pelanggaran” menggunakan format JSON yang berisi “id_pelanggaran” yang
dilakukan. Format ini mengakomodasi jika ada lebih dari satu jenis pelanggaran yang
dimasukkan.
Jika request berhasil, maka akan mendapatkan data response seperti berikut ini.
2. Tambahkan end-point untuk menampilkan data pelanggaran siswa seperti berikut ini.
// end-point menampilkan data pelanggaran siswa
app.get("/pelanggaran_siswa", (req,res) => {
// create sql query
let sql = "select p.id_pelanggaran_siswa, p.id_siswa,p.waktu, s.nis, s.
nama_siswa, p.id_user, u.nama_user " +
"from pelanggaran_siswa p join siswa s on p.id_siswa = s.id_siswa " +
"join user u on p.id_user = u.id_user"
// run query
db.query(sql, (error, result) => {
if (error) {
res.json({ message: error.message})
}else{
res.json({
count: result.length,
pelanggaran_siswa: result
})
}
})
})
Saat akan menguji end-point ini, pilih method GET dan masukkan URL berikut.
Jika berhasil akan mendapatkan data response seperti berikut ini.
// end-point untuk menampilkan detail pelanggaran
app.get("/pelanggaran_siswa/:id_pelanggaran_siswa", (req,res) => {
let param = { id_pelanggaran_siswa: req.params.id_pelanggaran_siswa}
// create sql query
let sql = "select p.nama_pelanggaran, p.poin " +
"from detail_pelanggaran_siswa dps join pelanggaran p "+
"on p.id_pelanggaran = dps.id_pelanggaran " +
"where ?"
db.query(sql, param, (error, result) => {
if (error) {
res.json({ message: error.message})
}else{
res.json({
count: result.length,
detail_pelanggaran_siswa: result
})
}
})
})
Saat akan menguji end-point ini, pilih method GET dan masukkan URL berikut.
// end-point untuk menghapus data pelanggaran_siswa
app.delete("/pelanggaran_siswa/:id_pelanggaran_siswa", (req, res) => {
let param = { id_pelanggaran_siswa: req.params.id_pelanggaran_siswa}
// create sql query delete detail_pelanggaran
let sql = "delete from detail_pelanggaran_siswa where ?"
db.query(sql, param, (error, result) => {
if (error) {
res.json({ message: error.message})
} else {
let param = { id_pelanggaran_siswa: req.params.id_pelanggaran_s
iswa}
// create sql query delete pelanggaran_siswa
let sql = "delete from pelanggaran_siswa where ?"
db.query(sql, param, (error, result) => {
if (error) {
res.json({ message: error.message})
} else {
res.json({message: "Data has been deleted"})
}
})
}
})
})
Saat akan menguji end-point ini, pilih method DELETE dan masukkan URL berikut.