প্রয়োজনীয় প্রতিটি অংশ ইতিমধ্যে কভার করা হয়েছে — রুট, HTTP মেথড, রুট প্যারামিটার, JSON বডি। এই পাঠ সেগুলোকে একত্র করে একটি সম্পূর্ণ, কার্যকর REST API-তে পরিণত করে: URL-এর একটি সেট যা অন্য একটি প্রোগ্রামকে HTTP-এর মাধ্যমে ডেটা তৈরি, পড়া, আপডেট, আর মুছতে দেয়।
REST একটি প্রথার সেট, কোনো লাইব্রেরি বা কোডের টুকরো নয়। মূল ধারণা: একটি URL একটি রিসোর্স (একটি পণ্য, একজন ব্যবহারকারী, একটি অর্ডার) শনাক্ত করে, আর HTTP মেথড বলে দেয় এতে কী করা হবে। /products/7 সবসময় "পণ্য নম্বর 7" — আপনি এটি পড়ছেন, প্রতিস্থাপন করছেন, নাকি মুছছেন তা URL-এর উপর নয়, মেথডের উপর নির্ভর করে।
সহজ করার জন্য, এই উদাহরণটি একটি বাস্তব ডেটাবেসের বদলে পণ্যগুলো একটি in-memory অ্যারেতে রাখে — পরের পাঠ এটিকে একটি আসল দিয়ে প্রতিস্থাপন করে।
const express = require('express')
const app = express()
app.use(express.json())
let products = [
{ id: 1, name: 'Laptop Stand', price: 25 },
{ id: 2, name: 'Wireless Mouse', price: 15 },
]
// সব READ করা
app.get('/products', (req, res) => {
res.json(products)
})
// একটি READ করা
app.get('/products/:id', (req, res) => {
const product = products.find(p => p.id === Number(req.params.id))
if (!product) return res.status(404).json({ error: 'Product not found' })
res.json(product)
})
// CREATE
app.post('/products', (req, res) => {
const newProduct = { id: products.length + 1, ...req.body }
products.push(newProduct)
res.status(201).json(newProduct)
})
// UPDATE
app.put('/products/:id', (req, res) => {
const product = products.find(p => p.id === Number(req.params.id))
if (!product) return res.status(404).json({ error: 'Product not found' })
Object.assign(product, req.body)
res.json(product)
})
// DELETE
app.delete('/products/:id', (req, res) => {
products = products.filter(p => p.id !== Number(req.params.id))
res.status(204).end()
})
app.listen(3000)| কোড | অর্থ | উপরে যার জন্য ব্যবহৃত |
|---|---|---|
| 200 | OK | একটি সফল GET বা PUT |
| 201 | Created | একটি সফল POST যা নতুন কিছু যোগ করেছে |
| 204 | No Content | একটি সফল DELETE — ফেরত পাঠানোর মতো অর্থপূর্ণ কিছু নেই |
| 404 | Not Found | একটি অনুরোধকৃত পণ্য ID যা নেই |
কোনো রিসোর্স নিয়ে কাজ করার আগে সবসময় এটি অনুপস্থিত কিনা চেক করুন, যেমনটি উপরের প্রতিটি হ্যান্ডলার if (!product) দিয়ে করে। সেই চেকটি বাদ দেওয়ার অর্থ একটি অস্তিত্বহীন ID-এর জন্য একটি রিকোয়েস্ট পরিষ্কারভাবে 404 ফেরত দেওয়ার বদলে undefined-এর উপর একটি প্রপার্টি পড়ার চেষ্টা করে হ্যান্ডলারটি ক্র্যাশ করে।
একটি বাস্তব API এর উপরে আরও যোগ করে: req.body ব্যবহারের আগে এতে আসলে প্রত্যাশিত জিনিসই আছে কিনা যাচাই করা, অথেন্টিকেশন যাতে যে কেউ একটি পণ্য মুছতে না পারে, আর — পরের পাঠের বিষয় — সার্ভার প্রতিবার রিস্টার্ট হলে রিসেট হওয়া একটি অ্যারের বদলে একটি বাস্তব ডেটাবেস।