0% menganggap dokumen ini bermanfaat (0 suara)
29 tayangan

Modul Node 2 - REST API MySQL

Dokumen tersebut membahas tentang pembuatan REST API menggunakan Node.js dan basis data MySQL. Terdapat penjelasan tentang metode request yang digunakan untuk operasi CRUD yaitu GET, POST, PUT, dan DELETE. Kemudian dilanjutkan dengan langkah praktikum membuat REST API untuk aplikasi pelanggaran siswa dengan fitur CRUD untuk tabel siswa dan pelanggaran.
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
29 tayangan

Modul Node 2 - REST API MySQL

Dokumen tersebut membahas tentang pembuatan REST API menggunakan Node.js dan basis data MySQL. Terdapat penjelasan tentang metode request yang digunakan untuk operasi CRUD yaitu GET, POST, PUT, dan DELETE. Kemudian dilanjutkan dengan langkah praktikum membuat REST API untuk aplikasi pelanggaran siswa dengan fitur CRUD untuk tabel siswa dan pelanggaran.
Hak Cipta
© © All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai DOCX, PDF, TXT atau baca online di Scribd
Anda di halaman 1/ 14

Restful API Node.

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.

Langkah Praktikum CRUD Data Siswa

1. Buatlah sebuah database MySQL dengan nama “pelanggaran_siswa”.


2. Buatlah tabel sesuai dengan struktur seperti berikut ini.

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}))

7. Buatlah variabel koneksi ke database MySQL seperti berikut ini.

// 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.

19. Lakukan penambahan beberapa data siswa baru.


20. Untuk mengakses semua data siswa yang tersimpan, masukkan url (end-point) untuk
mengkases data siswa yaitu http://localhost:8000/siswa dan pilih method GET.

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.

Dan data siswa akan berubah

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.

Jika berhasil maka akan mendapat response seperti berikut.

Data siswa akan terhapus.


Tugas Praktikum

Buatlah API untuk CRUD untuk tabel pelanggaran dan user! Untuk tabel user, data password
menggunakan hash MD5.

REST API Proses Transaksi

Pada database “pelanggaran_siswa”, proses transaksi terdapat pada tabel pelanggaran_siswa


dan detail_pelanggaran_siswa. Berikut langkah untuk membuat end-point untuk tabel
pelanggaran_siswa

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.

3. Tambahkan end-point untuk menampilkan data detail pelanggaran siswa berdasarkan id


pelanggarannya.

// 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.

Jika berhasil akan mendapatkan data response seperti berikut ini.

4. Tambahkan end-point untuk menghapus data pelanggaran siswa berdasarkan id


pelanggarannya.

// 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.

Jika berhasil akan mendapatkan data response seperti berikut ini.

Anda mungkin juga menyukai