Membuat RESTful API menggunakan Express dan Sequelize

Yoga Pratama
Mar 28, 2019 · 5 min read

Level: Pemula

Hello, selamat pagi, siang, sore, dan malam.

Pada kesempatan kali ini, kita akan belajar cara membuat RESTful API menggunakan Express JS dan Sequelize. Sebelum membaca artikel ini, kita asumsikan teman-teman sudah menginstall NodeJS dan paham penggunaan NPM.

Kenapa Express JS? Express JS adalah salah satu web framework paling populer di dunia perkodingan NodeJS. Express JS ini juga didukung dengan dokumentasi yang lengkap dan cocok untuk pemula karena penggunaannya yang cukup mudah. ExpressJS pun dapat digunakan menjadi pijakan untuk membangun web framewrok yang lebih kompleks seperti Sails.JS. Express JS dibuat oleh TJ Holowaychuk dan sekarang dikelola oleh komunitas.

Namun pada artikel ini kita hanya akan membuat CRUD sederhana, belum yang kompleks-kompleks, karena saya pun belum bisa 😅


Preparation

Sebelum memulai membuat project, pastikan di laptop / komputer teman-teman sudah terinstall NodeJS dan NPM

Pertama yang harus kita lakukan adalah menginstall secara global Express-generator dan Sequelize-cli. Kalian bisa juga menginstall modul express dan menyimpannya di package.json, namun menggunakan express-generator membuatnya agak lebih mudah.

npm i -g express-generator sequelize-cli

Start Project

Pertama, kita harus generate aplikasi yang ingin kita bangun

express myapp

Nah setelah menjalankan kode di atas, maka akan muncul folder myapp. Lalu kita masuk ke folder tersebut via terminal kemudian jalankan perintah

npm install

perintah di atas bertujuan untuk menginstall semua module yang ada di package.json.

Setelah semua terinstall maka berikut tampilan hasil dari isi foldernya

Nah sampai disini kalian sudah bisa menjalankan aplikasi yang sudah dibuat. Caranya dengan menuliskan perintah

npm start

kemudian buka browser kalian dan akses localhost:3000

Kalau muncul tampilan seperti itu, maka aplikasi kalian sudah bisa diakses. Untuk menghentikan aplikasi yang sedang berjalan, maka masuk ke terminal dan masukkan kombinasi Ctrl+C

Koneksi ke DB

Pada tutorial ini, DB yang kita gunakan adalah MySQL. Nah untuk tahap ini pasti kalian sudah paham bagaimana membuat DB di MySQL kan?

Nah perihal bagaimana mengkoneksikan aplikasi ke DB, kita akan menggunakan modul ORM bernama Sequelize

Sebelumnya kita harus menginstal NPM mysql dan sequelize terlebih dahulu

npm install sequelize mysql2 --save

Perintah save di atas bertujuan untuk menyimpan modul yang kita pakai tadi ke file package.json

Setelah itu, kita akan membuat direktori yang diperlukan untuk koneksi ke DB dengan perintah

sequelize init

Perintah di atas menghasilkan 4 folder, yaitu config, models, migrations, dan seeders.

Untuk mengkonfigurasikan ke DB, bukalah file config/config.json. Disitu tertera 3 config ke DB, karena kita sedang di tahap development maka kita akan mengkonfigurasikan koneksi DB di config development.

"development": {
"username": "root", // User untuk mengakses DB, secara default root
"password": null, // Password yang digunakan user root, biasanya tidak di password
"database": "myapp_development", // nama DB yang sudah dibuat
"host": "127.0.0.1",
"dialect": "mysql"
},

Membuat Models, dan Migrations

Sebelum memulai membuat API Endpoint, kita harus membuat model sebagai penghubung aplikasi ke DB, buka terminal dan tuliskan perintah berikut

sequelize model:create --name users --attributes name:string,email:string,phone_number:string,gender:boolean

Perintah di atas akan men-generate file model di folder models dan file migration di folder migrations. Bukalah file migrations dan edit sesuai dengan kebutuhan kita

module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('users', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER(5)
},
name: {
type: Sequelize.STRING(30)
},
email: {
type: Sequelize.STRING(50)
},
phone_number: {
type: Sequelize.STRING(15)
},
gender: {
type: Sequelize.BOOLEAN,
defaultValue: true
},
createdAt: {
allowNull: false,
type: Sequelize.DATE,
defaultValue: Sequelize.fn('NOW'),
},
updatedAt: {
allowNull: false,
type: Sequelize.DATE,
defaultValue: Sequelize.fn('NOW'),
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('users');
}
};

Kita bisa memberikan length dari setiap field dan default valuenya. Untuk menjalankan file migrations di atas, jalan perintah di terminal

sequelize db:migrate

Setelah itu cek DB yang sudah kita buat, maka table users sudah terbuat.

Pembuatan Routes API

Pertama kita buat terlebih dahulu file users.js di folder routes

const express = require('express');
const router = express.Router();
const model = require('../models/index');
// GET users listing.
router.get('/', function(req, res, next) {
});// POST users
router.post('/', function(req, res, next) {
});// UPDATE users
router.patch('/:id', function(req, res, next) {
});// DELETE users
router.delete('/:id', function(req, res, next) {
});module.exports = router;

Lalu di file app.js kita konfigurasi agar app.js bisa memanggil route users

.................
.....................
.................
const users = require('./routes/users');
.................
.....................
.................
app.use('/users', users);
................
......................
................

Get All Users

Tambahkan baris kode berikut pada file routes/users.js

router.get('/', async function (req, res, next) {
try {
const users = await model.users.findAll({});
if (users.length !== 0) {
res.json({
'status': 'OK',
'messages': '',
'data': users
})
} else {
res.json({
'status': 'ERROR',
'messages': 'EMPTY',
'data': {}
})
}
} catch (err) {
res.json({
'status': 'ERROR',
'messages': err.messages,
'data': {}
})
}
});

Setelah selesai, coba jalankan perintah npm start, kemudian menggunakan aplikasi Postman akses menggunakan method GET dengan url localhost:3000/users

Create User

Tambahkan baris kode berikut pada file routes/users.js

router.post('/', async function (req, res, next) {
try {
const {
name,
email,
gender,
phoneNumber
} = req.body;
const users = await model.users.create({
name,
email,
gender,
phone_number: phoneNumber
});
if (users) {
res.status(201).json({
'status': 'OK',
'messages': 'User berhasil ditambahkan',
'data': users,
})
}
} catch (err) {
res.status(400).json({
'status': 'ERROR',
'messages': err.message,
'data': {},
})
}
});

Setelah selesai, coba jalankan perintah npm start, jika aplikasi sudah berjalan maka restart aplikasi kemudian menggunakan aplikasi Postman akses menggunakan method POST dengan url localhost:3000/users. Pada body pilih raw dan JSON(application/json).

Update User

Tambahkan baris kode berikut pada file routes/users.js

router.patch('/:id', async function (req, res, next) {
try {
const usersId = req.params.id;
const {
name,
email,
gender,
phoneNumber
} = req.body;
const users = await model.users.update({
name,
email,
gender,
phone_number: phoneNumber
}, {
where: {
id: usersId
}
});
if (users) {
res.json({
'status': 'OK',
'messages': 'User berhasil diupdate',
'data': users,
})
}
} catch (err) {
res.status(400).json({
'status': 'ERROR',
'messages': err.message,
'data': {},
})
}
});

Setelah selesai, coba jalankan perintah npm start, jika aplikasi sudah berjalan maka restart aplikasi kemudian menggunakan aplikasi Postman akses menggunakan method PATCH dengan url localhost:3000/users/{id_user}. Pada body pilih raw dan JSON(application/json).

Delete User

Tambahkan baris kode berikut pada file routes/users.js

router.delete('/:id', async function (req, res, next) {
try {
const usersId = req.params.id;
const users = await model.Todo.destroy({ where: {
id: usersId
}})
if (users) {
res.json({
'status': 'OK',
'messages': 'User berhasil dihapus',
'data': users,
})
}
} catch (err) {
res.status(400).json({
'status': 'ERROR',
'messages': err.message,
'data': {},
})
}
});

Setelah selesai, coba jalankan perintah npm start, jika aplikasi sudah berjalan maka restart aplikasi kemudian menggunakan aplikasi Postman akses menggunakan method DELETE dengan url localhost:3000/users/{id_user}. Pada body pilih raw dan JSON(application/json).


Contoh pembuatan API di atas masih sederhana, kalian bisa mengembangkan code tersebut dengan memisahkan beberapa source code ke dalam middleware dan controller agar code yang kita buat lebih rapi. Selain itu tidak menggunakan hardcode dan menempatkannya sendiri di dalam middleware akan membuat kode kita lebih enak buat dibaca.

Selamat bercoding

SkyshiDigital

We help scale up your startup to the next level

Yoga Pratama

Written by

SkyshiDigital

We help scale up your startup to the next level

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade