আগের পর্বে আমরা শিখেছি কীভাবে Express.js দিয়ে প্রথম API তৈরি করতে হয় এবং GET /products রাউটের মাধ্যমে সব প্রোডাক্টের তালিকা JSON আকারে দেখাতে হয়। আজ আমরা শিখবো কীভাবে নতুন প্রোডাক্ট যোগ করতে হয় — এটাই আমাদের দোকান ম্যানেজমেন্ট সিস্টেমের প্রথম বড় ধাপ।

POST API কী?

ওয়েব দুনিয়ায় ডেটা আদান-প্রদানের জন্য কিছু নির্দিষ্ট পদ্ধতি (methods) আছে। আজ পর্যন্ত আমরা শুধু GET ব্যবহার করেছি — যার কাজ ডেটা পড়া। POST পদ্ধতি ঠিক তার উল্টো — এটা নতুন ডেটা তৈরি করে বা পাঠায়।

HTTP Methodকাজসহজ বাংলায়
GETডেটা পড়া"আমাকে তালিকাটা দাও"
POSTনতুন ডেটা যোগ"এই নতুন জিনিসটা রাখো"

কেন POST API দরকার?

GET API শুধু ডেটা পড়তে পারে, কিন্তু POST API নতুন ডেটা তৈরি করতে পারে। তুমি যখন ফেসবুকে নতুন পোস্ট করো বা ইউটিউবে ভিডিও আপলোড করো, তখন POST API-ই কাজ করে। আমাদের দোকানে নতুন প্রোডাক্ট যোগ করতে গেলে POST API ছাড়া তো চলবেই না!

যা যা লাগবে

  • Termux (আগের পর্বেই সেটআপ করা আছে)
  • products.json ফাইল (আগের পর্বে তৈরি)
  • server.js ফাইল (আমরা আপডেট করবো)
  • curl কমান্ড (টেস্ট করার জন্য)

ধাপ ১: বর্তমান server.js চেক করো

প্রথমে নিশ্চিত হও যে তোমার server.js ফাইলে এই লাইনটি আছে:

app.use(express.json());

এটি না থাকলে Express POST রিকোয়েস্টের JSON বডি পড়তে পারবে না।

ধাপ ২: POST রাউট যোগ করো

server.js ফাইলটি খোলো:

cd ~/shop-api
micro server.js

এখন app.get('/products', ...) রাউটের নিচে এই নতুন কোডটি যোগ করো:

app.post('/products', (req, res) => {
  const products = readProducts();
  const newProduct = req.body;

  // ভ্যালিডেশন: নাম ও মূল্য থাকতেই হবে
  if (!newProduct.name || !newProduct.price) {
    return res.status(400).json({ message: 'নাম এবং মূল্য দিতেই হবে' });
  }

  // নতুন id তৈরি (সর্বোচ্চ id + 1)
  const maxId = products.length > 0 ? Math.max(...products.map(p => p.id)) : 0;
  newProduct.id = maxId + 1;

  if (!newProduct.stock) { newProduct.stock = 0; }

  products.push(newProduct);
  writeProducts(products);

  res.status(201).json({ message: 'প্রোডাক্ট যোগ হয়েছে!', product: newProduct });
});

লাইন-বাই-লাইন ব্যাখ্যা

লাইনকী করছে?সহজ ভাষায়
readProducts()JSON ফাইল থেকে তালিকা পড়ছে"দোকানের তালিকাটা দাও"
req.bodyক্লায়েন্ট থেকে পাঠানো ডেটা"গ্রাহক কী পাঠিয়েছে"
if (!newProduct.name...)নাম ও দাম চেক করছে"নাম বা দাম ছাড়া নেবে না"
Math.max(...)সবচেয়ে বড় id + 1"নতুন নম্বর তৈরি"
products.push(...)তালিকায় যোগ করছে"তালিকায় ঢোকানো"
res.status(201)সফলতার স্ট্যাটাস"তোমার জিনিস যোগ হয়ে গেছে"

ধাপ ৩: সার্ভার রিস্টার্ট করো

# Ctrl+C দিয়ে বন্ধ করো, তারপর:
node server.js

ধাপ ৪: curl দিয়ে টেস্ট করো

curl -X POST http://localhost:3000/products \
  -H "Content-Type: application/json" \
  -d '{"name":"গ্লুকোজ পাউডার","price":40,"stock":30}'

সফল হলে দেখতে পাবে:

{"message":"প্রোডাক্ট যোগ হয়েছে!","product":{"id":4,"name":"গ্লুকোজ পাউডার","price":40,"stock":30}}

ধাপ ৫: যাচাই করো

curl http://localhost:3000/products

তালিকায় নতুন প্রোডাক্ট দেখতে পাবে।

ভুল টেস্ট করো

নাম ছাড়া পাঠিয়ে দেখি কী হয়:

curl -X POST http://localhost:3000/products \
  -H "Content-Type: application/json" \
  -d '{"price":50}'

উত্তর: {"message":"নাম এবং মূল্য দিতেই হবে"} — এটাই ভ্যালিডেশন! তোমার API এখন বুদ্ধিমান হয়ে গেছে।

আজ তুমি কী শিখলে

  • POST — নতুন ডেটা সার্ভারে পাঠানো
  • req.body — ক্লায়েন্ট কী পাঠাচ্ছে তা পড়া
  • Math.max() — স্বয়ংক্রিয় id তৈরি
  • ভ্যালিডেশন — ভুল ডেটা আটকানো
  • 201 Created — সফল POST-এর স্ট্যাটাস কোড
  • curl -X POST — টার্মিনাল দিয়ে POST টেস্ট

পরবর্তী পর্বে আমরা শিখবো DELETE API — কীভাবে প্রোডাক্ট মুছে ফেলতে হয়।

In the previous episode, we learned how to create our first API with Express.js and display all products as JSON using the GET /products route. Today we'll learn how to add new products – a major step for our shop management system.

What is POST API?

HTTP MethodActionSimple Meaning
GETRead data"Give me the list"
POSTCreate new data"Add this new item"

Why do we need POST API?

GET API can only read data, but POST API can create new data. When you post on Facebook or upload a video on YouTube, POST API is at work. We need POST API to add new products to our shop.

Requirements

  • Termux (already set up)
  • products.json file (created earlier)
  • server.js file (we will update it)
  • curl command (for testing)

Step 1: Check your server.js

Make sure this line exists in your server.js:

app.use(express.json());

Step 2: Add POST route

app.post('/products', (req, res) => {
  const products = readProducts();
  const newProduct = req.body;

  if (!newProduct.name || !newProduct.price) {
    return res.status(400).json({ message: 'Name and price are required' });
  }

  const maxId = products.length > 0 ? Math.max(...products.map(p => p.id)) : 0;
  newProduct.id = maxId + 1;
  if (!newProduct.stock) { newProduct.stock = 0; }

  products.push(newProduct);
  writeProducts(products);

  res.status(201).json({ message: 'Product added!', product: newProduct });
});

Step 3: Restart server

# Ctrl+C to stop, then:
node server.js

Step 4: Test with curl

curl -X POST http://localhost:3000/products \
  -H "Content-Type: application/json" \
  -d '{"name":"Glucose Powder","price":40,"stock":30}'

Step 5: Verify

curl http://localhost:3000/products

In the next episode, we'll learn DELETE API — how to remove products.