Di part sebelumnya kita sudah berhasil menyelesaikan Instalasi dan persiapan & Pengaturan Konfigurasi Aplikasi. Sebelum melangkah lebih jauh dalam membangun aplikasi REST API, kita perlu menyiapkan databasenya terlebih dahulu.
Di sini kita akan menggunakan database MySQL jadi pastikan kamu sudah menginstal MySQL pada pc/laptop kamu. Setelah itu buat database baru yang masih kosong dan catat terlebih dahulu informasi-informasi yang dibutuhkan (sesuaikan dengan settingan pada MySQL kamu):
- Host : localhost
- Nama Database: simple_restapi
- User: root
- Password:
Membuat Model dan Migration
Bagi yang pernah belajar framework php seperti Codeigniter, Yii maupun Laravel mungkin tidak akan asing dengan istilah Model & Migration. Secara sederhana model itu bisa digambarkan sebagai sebuah objek yang mewakili sebuah tabel di database sedangkan migration sendiri adalah script yang biasanya digunakan untuk menambah,memodifikasi maupun menghapus tabel dari aplikasi. Jadi kita tidak perlu membuat tabel secara manual dari MySQL.
Aplikasi yang akan kita buat adalah REST API untuk CRUD data artikel/post untuk sebuah blog, jadi kita akan membuat tabel posts dengan struktur seperti ini:
-
id : Integer (PK)
-
title : String
-
content : Text
-
tags : String
-
published : Boolean
-
created_at : Datetime
-
updated_at : Datetime
Selanjutnya kita perlu menginstal package-package yang dibutuhkan.
-
sequelize : ORM berbasis Node.js
-
sequelize-cli : Tool pendukung Sequelize untuk membuat&menjalankan migration,seeder maupun model.
-
mysql2 : driver mysql pada Node.js
Jalankan perintah di bawah ini untuk menginstal semua package di atas:
npm install sequelize mysql2 --save
Untuk sequelize-cli kita akan menginstalnya secara global atau terpisah dari aplikasi, karena package ini hanya sebuah tool yang tidak terkait dengan aplikasi itu sendiri. Cara instalasinya sedikit berbeda seperti ini:
npm install -g sequelize-cli
Kita perlu menjalankan perintah berikut untuk menggenerate file-file yang dibutuhkan untuk koneksi database dengan sequelize.
sequelize init
Perintah di atas menghasilkan 4 folder baru yaitu config, models, migrations dan seeders dan akan muncul pesan seperti ini pada terminal:
Sequelize CLI [Node: 12.10.0, CLI: 5.5.1, ORM: 5.21.3]
Created "config/config.json"
Successfully created models folder at "/home/sakukode/node-apps/simple-restapi/models".
Successfully created migrations folder at "/home/sakukode/node-apps/simple-restapi/migrations".
Successfully created seeders folder at "/home/sakukode/node-apps/simple-restapi/seeders".
Untuk mengkonfigurasi koneksi DB kita buka file config/config.json dan sesuaikan dengan settingan MySQL kamu. Kita cukup mengubah yang bagian "development" karena saat ini kita sedang dalam tahap development.
{
"development": {
"username": "root",
"password": null,
"database": "simple_restapi",
"host": "127.0.0.1",
"dialect": "mysql"
},
"test": {
"username": "root",
"password": null,
"database": "database_test",
"host": "127.0.0.1",
"dialect": "mysql"
},
"production": {
"username": "root",
"password": null,
"database": "database_production",
"host": "127.0.0.1",
"dialect": "mysql"
}
}
Kita buat sebuah model baru dengan nama posts. model ini yang nantinya akan menghubungkan aplikasi dengan DB dalam mengolah data di database.
sequelize model:create --name posts --attributes title:string,content:text,tags:string,published:boolean
Perintah di atas akan menggenerate 2 file baru di folder models dan migrations. Kita perlu mengedit 2 file tersebut sebelum menjalankan migrationnya.
models/posts.js
'use strict';
module.exports = (sequelize, DataTypes) => {
const posts = sequelize.define('posts', {
title: DataTypes.STRING,
content: DataTypes.TEXT,
tags: DataTypes.STRING,
published: DataTypes.BOOLEAN
}, {
timestamps: true,
tableName: 'posts',
createdAt: 'created_at',
updatedAt: 'updated_at'
});
posts.associate = function(models) {
// associations can be defined here
};
return posts;
};
migrations/20200127055412-create-post.js
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.createTable('posts', {
id: {
allowNull: false,
autoIncrement: true,
primaryKey: true,
type: Sequelize.INTEGER
},
title: {
type: Sequelize.STRING
},
content: {
type: Sequelize.TEXT
},
tags: {
type: Sequelize.STRING
},
published: {
type: Sequelize.BOOLEAN,
defaultValue: false
},
created_at: {
allowNull: false,
type: Sequelize.DATE,
defaultValue: Sequelize.fn('NOW')
},
updated_at: {
allowNull: false,
type: Sequelize.DATE,
defaultValue: Sequelize.fn('NOW')
}
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.dropTable('posts');
}
};
Setelah melakukan perubahan 2 file tersebut, saatnya menjalankan migration dengan perintah:
sequelize db:migrate
Jika berhasil seharusnya akan muncul pesan seperti di bawah ini:
Sequelize CLI [Node: 12.10.0, CLI: 5.5.1, ORM: 5.21.3]
Loaded configuration file "config/config.json".
Using environment "development".
== 20200127223955-create-posts: migrating =======
== 20200127223955-create-posts: migrated (0.715s)
Dan pada DB akan tergenerate dua tabel baru yaitu "posts" dan "SequelizeMeta"
Membuat Seeder
Membuat seeder ini opsional karena seeder ini hanya sebuah script yang berfungsi untuk menggenerate data dummy. Jadi jika kamu tidak malas, kamu bisa skip tahap ini dan menambahkan data dummy secara manual dari MySQL.
Untuk membuat seeder baru kita jalankan perintah berikut:
sequelize seed:generate —name dummy-posts
periksa pada folder seeders, otomatis akan tergenerate 1 file baru, buka file tersebut dan lakukan perubahan seperti ini:
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.bulkInsert('posts', [{
title: 'Hello World',
content: "Lorem ipsum dolor sit amet, consectetur adipisicing elit.",
tags: 'hello,world'
}, {
title: 'Lorem Ipsum',
content: "Quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.",
tags: 'lorem,ipsum'
}
], {});
},
down: (queryInterface, Sequelize) => {
return queryInterface.bulkDelete('posts', null, {});
}
};
Pada bagian title,content dan tags bisa diisi terserah ya, karena itu hanya fake data untuk contoh data saja. Oke setelah selesai melakukan perubahan, jalankan seeder dengan perintah ini:
sequelize db:seed:all
Perintah di atas akan menggenerate dan menginsert data baru ke dalam tabel "posts". Kamu bisa mengeceknya di DB apakah memang sudah muncul data-data dummy tersebut.
Untuk mendownload atau melihat full source code pada tahap ini, silahkan kunjungi repo github https://github.com/sakukode/simple-restapi/tree/v0.2