Tutorial Membuat RESTful API Menggunakan Node.js Express dan Sequelize

Tutorial Membuat RESTful API Menggunakan Node.js Express dan Sequelize

Pada tutorial ini Anda akan belajar bagaimana membuat RESTful API menggunakan node.js, express, sequelize, dan MySQL.

Ini bukanlah tutorial untuk pemula,

Jika Anda seorang pemula di node.js express, saya sarankan Anda terlebih dahulu mempelajari “Tutorial Express Js Untuk Pemula”. 

Mari kita mulai.

Tonton video tutorial web berkualitas GRATIS di channel youtube saya:

Klik Disini.!

 

Apa Itu Sequelize?

Sequelize merupakan node.js promise-based ORM (Object Relational Mapping) untuk Postgre, MySQL, MariaDB, SQLite, dan Microsoft SQL Server.

Dengan memanfaatkan ORM, Anda dapat membuat aplikasi dengan mudah tanpa menuliskan perintah SQL (Structured Query Language).

Sama halnya dengan Mongoose untuk mongoDB.

Pada tutorial ini, saya menggunakan MySQL.

Jika Anda juga menggunakan MySQL, Anda akan menyukai tutorial ini.

Meskipun tutorial ini menggunakan MySQL, bukan berarti Anda tidak dapat menerapkannya untuk Postgre, SQLite, ataupun Microsoft SQL Server, perbedaannya hanya terletak pada koneksi ke database.

Anda dapat melihatnya di dokumentasi sequelize untuk info lebih lengkap.

 

#1. Design EndPoint

Ini penting!

Sebelum membuat RESTful API, ada baiknya kita definisikan dulu EndPoint dari RESTful API yang akan dibuat.

EndPoint merupakan routes dari API yang akan kita buat.

RESTful API menggunakan HTTP verbs.

HTTP verbs yang umum digunakan adalah GET, POST, PUT, dan DELETE.

GET untuk mendapatkan data dari server atau lebih dikenal dengan istilah READ, POST untuk meng-CREATE data baru, PUT untuk UPDATE data, dan DELETE untuk menghapus data.

Atau lebih dikenal dengan istilah CRUD (Create-Read-Update-Delete).

Pada tutorial kali ini, saya akan sharing bagaimana membuat RESTful API sederhana untuk mengambil data dari server (GET), membuat data baru ke server (POST), mengupdate data ke server (PUT), dan menghapus data ke server (DELETE) dari suatu table di database yaitu table products.

Berikut rancangan EndPoint dari RESTful API yang akan kita buat:

endpoint

 

#2. Buat database dan table

Buat database baru pada MySQL, Anda dapat menggunakan tools seperti SQLyog, PHPMyAdmin atau sejenisnya.

Disini saya membuat database dengan nama “sequelize_db”.

Jika Anda membuat database dengan nama yang sama itu lebih baik.

Untuk  membuat database dengan MySQL, dapat dilakukan dengan mengeksekusi query berikut:

CREATE DATABASE sequelize_db;

Perintah SQL diatas akan membuat sebuah database dengan nama “sequelize_db”.

Selanjutnya, buat sebuah table di dalam database “sequelize_db”.

Disini saya membuat sebuah table dengan nama “products”.

Jika Anda membuat table dengan nama yang sama itu lebih baik. 

Untuk membuat table “products”, dapat dilakukan dengan mengeksekusi perintah SQL berikut:

CREATE TABLE products(
id INT(11) PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(200),
price DOUBLE,
createdAt DATE,
updatedAt DATE 
)ENGINE=INNODB;

Perintah SQL diatas akan membuat sebuah table bernama “products” dengan field: id, title, price, createdAt, dan updatedAt.

Sequelize mewajibkan Anda untuk memiliki field: id, createdAt, dan updatedAt.

Jika Anda tidak memiliki field tersebut, maka akan terdapat error.

 

#3. Install Express, MySQL2, Sequelize, dan Cors

Buat sebuah folder di komputer Anda, disini saya beri nama “sequelize-app”.

Jika Anda membuat folder dengan nama yang sama, itu lebih baik.

Anda bebas membuatnya di manapun, baik di C, D, ataupun di Desktop.

Folder ini akan menjadi folder project utama.

Kemudian buka folder “sequelize-app” tersebut menggunakan kode editor, disini saya menggunakan Visual Studio Code.

Saya juga menyarankan Anda untuk menggunakan Visual Studio Code.

Anda dapat mendownload Visual Studio Code pada link berikut dan menginstallnya di komputer Anda:

https://code.visualstudio.com/

Selanjutnya, buka terminal pada Visual Studio Code pada menu bar terminal.

Setelah itu, ketikan perintah berikut untuk membuat file “package.json”:

npm init –y

Selanjutnya, install express, mysql2, sequelize, dan cors dengan mengetikan perintah berikut pada terminal:

npm install express mysql2 sequelize cors

Seperti gambar berikut:

dependencies

Selanjutnya, tambahkan kode berikut pada file “package.json”:

"type": "module",

Sehingga file “package.json” terlihat menjadi seperti berikut:

{
  "name": "sequelize-app",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "module",
  "scripts": {
    "test": "echo "Error: no test specified" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "cors": "^2.8.5",
    "express": "^4.17.1",
    "mysql2": "^2.2.5",
    "sequelize": "^6.3.5"
  }
}

Hal ini bertujuan agar kita dapat menggunakan ES6 Module Syntax untuk export dan import module.

 

#4. Struktur Aplikasi

Agar aplikasi lebih terstruktur rapi, kita akan menerapkan pola MVC (Model-View-Controllers).

Buat folder “config”, “controllers”, “models”, dan “routes” di dalam folder “sequelize-app”.

Kemudian buat file “database.js” di dalam folder “config”, buat file “Product.js” di dalam folder “controllers”, buat file “Product.js” di dalam folder “models”, buat file “routes.js” di dalam folder “routes”, dan buat file “index.js” di dalam folder “sequelize-app”.

Perhatikan gambar berikut untuk lebih jelasnya:

app-struktur

 

#5. Connect ke Database

Buka file “database.js” yang terdapat pada folder “config”, kemudian ketikan kode berikut:

// import sequelize
import { Sequelize } from "sequelize";

// create connection
const db = new Sequelize('sequelize_db', 'root', '', {
    host: 'localhost',
    dialect: 'mysql'
});

// export connection
export default db;

 

#6. Models

Buka file model “Product.js” yang terdapat pada folder “models”, kemudian ketikan kode berikut:

// import sequelize 
import { Sequelize } from "sequelize";
// import connection 
import db from "../config/database.js";

// init DataTypes
const { DataTypes } = Sequelize;

// Define schema
const Product = db.define('products', {
  // Define attributes
  title: {
    type: DataTypes.STRING
  },
  price: {
    type: DataTypes.DOUBLE
  }
},{
  // Freeze Table Name
  freezeTableName: true
});

// Export model Product
export default Product;

 

#7. Controllers

Buka file controller “Product.js” yang terdapat pada folder “controllers”, kemudian ketikan kode berikut:

// Import model Product
import Product from "../models/Product.js";

// Get semua product
export const getProducts = async (req, res) => {
    try {
        const product = await Product.findAll();
        res.send(product);
    } catch (err) {
        console.log(err);
    }
}

// Get product berdasarkan id
export const getProductById = async (req, res) => {
    try {
        const product = await Product.findAll({
            where: {
                id: req.params.id
            }
        });
        res.send(product[0]);
    } catch (err) {
        console.log(err);
    }
}

// Create product baru
export const createProduct = async (req, res) => {
    try {
        await Product.create(req.body);
        res.json({
            "message": "Product Created"
        });
    } catch (err) {
        console.log(err);
    }
}

// Update product berdasarkan id
export const updateProduct = async (req, res) => {
    try {
        await Product.update(req.body, {
            where: {
                id: req.params.id
            }
        });
        res.json({
            "message": "Product Updated"
        });
    } catch (err) {
        console.log(err);
    }
}

// Delete product berdasarkan id
export const deleteProduct = async (req, res) => {
    try {
        await Product.destroy({
            where: {
                id: req.params.id
            }
        });
        res.json({
            "message": "Product Deleted"
        });
    } catch (err) {
        console.log(err);
    }
}

 

#8. Routes

Buka file “routes.js” yang terdapat pada folder “routes”, kemudian ketikan kode berikut:

// Import express
import express from "express";
// Import Controller Product
import { 
    getProducts,
    getProductById,
    createProduct,
    updateProduct,
    deleteProduct
 } from "../controllers/Product.js";

 // Init express router
const router = express.Router();

// Route get semua product
router.get('/products', getProducts);
// Route get product by id
router.get('/products/:id', getProductById);
// Route create product baru
router.post('/products', createProduct);
// Route update product by id
router.put('/products/:id', updateProduct);
// Route delete product by id
router.delete('/products/:id', deleteProduct);

// export router
export default router;

 

#9. Index.js

Buka file “index.js” yang terdapat pada folder “sequelize-app”, kemudian ketikan kode berikut:

// Import express
import express from "express";
// Import cors
import cors from "cors";
// Import connection
import db from "./config/database.js";
// Import router
import Router from "./routes/routes.js";

// Init express
const app = express();
// use express json
app.use(express.json());
// use cors
app.use(cors());

// Testing database connection 
try {
    await db.authenticate();
    console.log('Connection has been established successfully.');
} catch (error) {
    console.error('Unable to connect to the database:', error);
}

// use router
app.use(Router);

// listen on port
app.listen(5000, () => console.log('Server running at http://localhost:5000'));

 

#10. Testing

Untuk memastikan aplikasi berjalan dengan baik, jalankan aplikasi dengan mengetikan perintah berikut pada terminal:

node index

Jika berjalan dengan baik, maka akan tampil seperti gambar berikut:

node-index

Pada tutorial ini, saya akan menggunakan POSTMAN untuk melakukan pengujian.

Anda dapat mendownload POSTMAN pada link berikut:

https://www.postman.com/downloads/

Download sesuai dengan OS (Operating System) Anda, kemudian install di komputer Anda!

#10.1 CREATE

Buka POSTMAN, kemudian pilih method “POST” => masukan EndPoint pada kolom URL => pilih Body => pilih raw => pilih application/json => masukan data dalam format json => klik tombol Send.

Seperti gambar berikut:

create

Jika berhasil, maka akan terdapat message: “Product Created” seperti gambar diatas.

Setelah itu, insert beberapa data lagi untuk mempermudah pengujian.

#10.2 READ

Ubah method menjadi “GET” dengan EndPoint yang sama, kemudian klik tombol “Send”.

Seperti gambar berikut:

read-all

Untuk menampilkan product berdasarkan id, tambahkan id pada kolom URL seperti gambar berikut:

get-single-product

Pada gambar diatas, saya menampilkan product dengan id=2.

#10.3 UPDATE

Pilih method “PUT” => masukan EndPoint beserta id product yang akan di update pada kolom URL => pilih Body => pilih raw => pilih application/json => masukan data dalam format json => klik tombol Send.

Seperti gambar berikut:

update-product

Jika update berhasil, maka akan terdapat message: “Product Updated” seperti gambar diatas.

#10.4 DELETE

Pilih method “DELETE”, kemudian masukan URL beserta id yang akan di hapus, kemudian klik tombol “Send”.

Seperti gambar berikut:

delete-product

Jika delete berhasil, maka akan terdapat message: “Product Deleted” seperti gambar diatas.

Pada gambar diatas, saya menghapus product dengan id=1.

 

Kesimpulan:

Pembahasan kali ini adalah bagaimana membuat RESTful API menggunakan node.js, express, dan sequelize.

Dengan demikian, Anda telah memiliki gambaran bagaimana membuat aplikasi tanpa menulis perintah SQL pada aplikasi.

Jadi tunggu apalagi, Let’s Coding!

Download Source Code

Share:




LAINNYA UNTUK ANDA


Komentar (0)

Leave a Comment