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.
//import expressimport express from "express";//import mongooseimport mongoose from "mongoose";// import routesimport route from "./routes/index.js";//import corsimport cors from "cors";// construct express functionconst 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 portapp.listen('3000',()=> console.log('Server Running at port: 3000'));// import expressimport express from "express";// import controllersimport { getProducts, getProductById, saveProduct, updateProduct, deleteProduct } from "../controllers/productController.js"; // express routerconst router = express.Router();// Route get All Productsrouter.get('/', getProducts);// Route get single Productrouter.get('/:id', getProductById);// Route CREATE Productrouter.post('/', saveProduct);// Route UPDATE Productrouter.patch('/:id', updateProduct);// Route DELETE Productrouter.delete('/:id', deleteProduct);// export routerexport default router;// import mongoose import mongoose from "mongoose";// Buat Schemaconst Product = mongoose.Schema({ title:{ type: String, required: true }, price:{ type: Number, required: true }});// export modelexport default mongoose.model('Products', Product);// import modelsimport Product from "../models/Product.js";// function get All Productsexport 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 Productexport 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 Productexport 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 Productexport 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 Productexport 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}); }}








ConversionConversion EmoticonEmoticon