RESTful API Menggunakan Node.js, Express, dan MongoDB


Application Programming Interface (API) menentukan aturan yang harus Anda ikuti untuk berkomunikasi dengan sistem perangkat lunak lain. Developer mengekspos dan membuat API sehingga aplikasi lain dapat berkomunikasi dengan aplikasinya secara terprogram.

Representational State Transfer (REST) adalah arsitektur perangkat lunak yang memberlakukan syarat mengenai cara API bekerja. REST pada awalnya dibuat sebagai panduan untuk mengelola komunikasi pada jaringan kompleks seperti internet. Anda dapat menggunakan arsitektur berbasis REST untuk mendukung komunkasi berperforma tinggi dan andal sesuai skala. Anda dapat dengan mudah menerapkan dan memodifikasinya, membawa visibilitas dan portabilitas lintas platform ke semua sistem API

Developer API dapat merancang API menggunakan beberapa arsitektur yang berbeda. API yang mengikuti gaya arsitektur REST disebut sebagai API REST. Layanan web yang menerapkan arsitektur REST disebut sebagai layanan web RESTful.

API RESTful adalah antarmuka yang digunakan oleh dua sistem komputer untuk bertukar informasi secara aman melalui internet.

1. Buat sebuah folder dalam komputer anda dengan nama "restful". Kemudian buka folder tersebut menggunakan aplikasi Visual Studio Code.





2. Buka terminal baru pada Visual Studio Code dan ketikan perintah npm init -y untuk membuat file "package.json"




3. Kemudian install express, mongoose, cors, dan nodemon dengan mengetikkan perintah "npm install express mongoose cors" dan "npm install -save-dev nodemon" pada terminal. 




4. Selanjutnya tambahkan code " "type": "module", " pada file package.json sehingga menjadi seperti yang terlihat pada gambar dibawah. Hal ini bertujuan agar kita dapat menggunakan ES6 Module Syntax untuk export dan import module.



5. Lalu buat file bernama index.js pada folder "restful" yang sudah dibuat dan ketikkan kode dibawah. Tujuan dibuatnya file dan kode ini adalah untuk membuat koneksi ke Database mongoDB dengan nama "restful_db".

//import express
import express from "express";
//import mongoose
import mongoose from "mongoose";
// import routes
import route from "./routes/index.js";
//import cors
import cors from "cors";
// construct express function
const app = express();
 
// connect ke database mongoDB
    useNewUrlParser: true,
    useUnifiedTopology: true
});
const db = mongoose.connection;
db.on('error', (error)=> console.error(error));
db.once('open', () => console.log('Database Connected'));
 
// middleware
app.use(cors());
app.use(express.json());
app.use('/product',route);
 
// listening to port
app.listen('3000',()=> console.log('Server Running at port: 3000'));


6. Buat sebuah folder dengan nama "routes" dan buat file bernama index.js dalam folder tersebut. Lalu ketikan kode dibawah pada file index.js. Tujuan dibuatnya file dan kode ini adalah untuk membuat routes atau endpoints dari restful api yang kita buat.


// import express
import express from "express";
// import controllers
import { getProducts,
    getProductById,
    saveProduct,
    updateProduct,
    deleteProduct } from "../controllers/productController.js";
 
    // express router
const router = express.Router();
 
// Route get All Products
router.get('/', getProducts);
// Route get single Product
router.get('/:id', getProductById);
// Route CREATE Product
router.post('/', saveProduct);
// Route UPDATE Product
router.patch('/:id', updateProduct);
// Route DELETE Product
router.delete('/:id', deleteProduct);
 
// export router
export default router;


7. Selanjutnya buat sebuah folder dengan nama "models" dan buat file product.js didalamnya. Lalu isi file tersebut dengan kode dibawah.


// import mongoose
import mongoose from "mongoose";
 
// Buat Schema
const Product = mongoose.Schema({
    title:{
        type: String,
        required: true
    },
    price:{
        type: Number,
        required: true
    }
});
 
// export model
export default mongoose.model('Products', Product);


8. Buat sebuah folder dengan nama "controllers" dan buat file dengan nama "productController.js" dalam folder tersebut.


// import models
import Product from "../models/Product.js";
 
// function get All Products
export const getProducts = async (req, res) => {
    try {
        const products = await Product.find();
        res.json(products);
    } catch (error) {
        res.status(500).json({message: error.message});
    }
     
}
 
// function get single Product
export const getProductById = async (req, res) => {
    try {
        const product = await Product.findById(req.params.id);
        res.json(product);
    } catch (error) {
        res.status(404).json({message: error.message});
    }
     
}
 
// function Create Product
export const saveProduct = async (req, res) => {
    const product = new Product(req.body);
    try {
        const savedProduct = await product.save();
        res.status(201).json(savedProduct);
    } catch (error) {
        res.status(400).json({message: error.message});
    }
}
 
// function Update Product
export const updateProduct = async (req, res) => {
    const cekId = await Product.findById(req.params.id);
    if(!cekId) return res.status(404).json({message: "Data tidak ditemukan"});
    try {
        const updatedProduct = await Product.updateOne({_id: req.params.id}, {$set: req.body});
        res.status(200).json(updatedProduct);
    } catch (error) {
        res.status(400).json({message: error.message});
    }
}
 
// function Delete Product
export const deleteProduct = async (req, res) => {
    const cekId = await Product.findById(req.params.id);
    if(!cekId) return res.status(404).json({message: "Data tidak ditemukan"});
    try {
        const deletedProduct = await Product.deleteOne({_id: req.params.id});
        res.status(200).json(deletedProduct);
    } catch (error) {
        res.status(400).json({message: error.message});
    }
}


9. Jalankan server dengan mengetikan perintah "nodemon index" pada terminal vscode. Kemudian lakukan pengujian dengan menggunakan aplikasi Postman, dapat didownload melalui link berikut https://www.postman.com/downloads/



9.1. POST Product Baru (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:


Jika berhasil, maka akan terdapat data sebagai respon seperti gambar diatas.

Setelah itu, insert beberapa data lagi untuk mempermudah pengujian.
 

9.2. GET Data Product (READ)

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

Seperti gambar berikut:


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


Pada gambar diatas, saya menampilkan product dengan _id=60d16609546fa82a4c5d63e5.


9.3. PATCH Data Product (UPDATE)

Pilih method “PATCH” => 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:


Jika update berhasil, maka akan terdapat “nModified”: 1 seperti gambar diatas.

 
9.4. DELETE Product (DELETE)

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

Seperti gambar berikut:


Jika delete berhasil, maka akan terdapat “deletedCount”: 1 seperti gambar diatas.












ConversionConversion EmoticonEmoticon

:)
:(
=(
^_^
:D
=D
=)D
|o|
@@,
;)
:-bd
:-d
:p
:ng
:lv
Thanks for your comment