ফ্রিল্যান্সিং ক্যারিয়ারে প্রথম ক্লায়েন্ট প্রজেক্ট হাতে নেওয়ার পর যে জিনিসটা সবচেয়ে বেশি দরকার হয়, সেটা হলো একটি শক্তিশালী API। ক্লায়েন্টের ওয়েবসাইট, মোবাইল অ্যাপ বা ড্যাশবোর্ড—সবকিছুর পেছনে কাজ করে API। বাংলাদেশের ফ্রিল্যান্সারদের মধ্যে Node.js এবং MongoDB-র চাহিদা দিন দিন বাড়ছে, কারণ এগুলো শেখা সহজ, খরচ কম এবং কাজের গতি দ্রুত। আজ আমি আপনাকে দেখাবো কীভাবে Express.js এবং MongoDB দিয়ে একটি RESTful API তৈরি করবেন, যা আপনার ফ্রিল্যান্স প্রজেক্টে সরাসরি ব্যবহার করতে পারবেন। এই Express.js MongoDB API tutorial-টি ধাপে ধাপে সাজানো, তাই শুরু থেকে শেষ পর্যন্ত পড়লে আপনি নিজেই একটি কার্যকর API বানিয়ে ফেলতে পারবেন।
প্রথমে জেনে নিই RESTful API কী এবং কেন এটি দরকার
RESTful API হলো এমন একটি নিয়ম বা কাঠামো, যার মাধ্যমে ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা আদান-প্রদান হয়। ধরুন, আপনার ক্লায়েন্টের একটি ই-কমার্স ওয়েবসাইট আছে যেখানে পণ্য যোগ, দেখানো, আপডেট এবং ডিলিট করতে হবে। এই কাজগুলো করার জন্য প্রতিবার ডেটাবেসে সরাসরি ঢোকার দরকার নেই; API-র মাধ্যমে নির্দিষ্ট URL-এ HTTP request পাঠালেই সার্ভার কাজটি করে ফলাফল পাঠায়। এতে ডেটাবেস নিরাপদ থাকে এবং বিভিন্ন ডিভাইস (ওয়েব, মোবাইল) একই API ব্যবহার করতে পারে।
বাংলাদেশের ফ্রিল্যান্স মার্কেটপ্লেসে (যেমন Fiverr, Upwork) অনেক ক্লায়েন্টই Node.js API ডেভেলপার খোঁজেন। কারণ Node.js দিয়ে খুব দ্রুত API বানানো যায় এবং MongoDB-র মতো NoSQL ডেটাবেসের সাথে এর জুড়ি নেই। এই টিউটোরিয়ালে আমরা একটি টাস্ক ম্যানেজমেন্ট API বানাবো—সহজ অথচ বাস্তব উদাহরণ। আপনি চাইলে পরে নিজের প্রজেক্টে এই কাঠামো ব্যবহার করতে পারবেন।
প্রয়োজনীয় সেটআপ: Node.js, Express.js এবং MongoDB ইনস্টল
শুরু করার আগে আমাদের কিছু টুল ইনস্টল করতে হবে। প্রথমে নিশ্চিত করুন আপনার কম্পিউটারে Node.js আছে। না থাকলে Node.js অফিসিয়াল সাইট থেকে LTS ভার্সন ডাউনলোড করে ইনস্টল করুন। এরপর MongoDB-র জন্য দুটি অপশন—লোকালি MongoDB Community Server ইনস্টল করা, অথবা MongoDB Atlas-এ ফ্রি ক্লাস্টার তৈরি করা। ফ্রিল্যান্স প্রজেক্টে সাধারণত Atlas ব্যবহার করাই ভালো, কারণ ক্লায়েন্টের সাথে শেয়ার করা সহজ এবং সার্ভার সবসময় চালু থাকে।
একটি নতুন ফোল্ডার তৈরি করে সেখানে টার্মিনাল খুলুন এবং নিচের কমান্ড দিয়ে প্রজেক্ট শুরু করুন:
npm init -y
npm install express mongoose dotenv
এখানে express হলো ওয়েব ফ্রেমওয়ার্ক, mongoose হলো MongoDB-র সাথে সংযোগ স্থাপনের জন্য ODM (Object Data Modeling) লাইব্রেরি, এবং dotenv দিয়ে আমরা পরিবেশ পরিবর্তনশীল (environment variables) ম্যানেজ করবো। সব ঠিকঠাক ইনস্টল হলে আপনার package.json ফাইলে এই প্যাকেজগুলো দেখা যাবে।
প্রজেক্টের ফোল্ডার স্ট্রাকচার এবং সার্ভার সেটআপ
একটি ভালো প্রজেক্টে কোড গোছানো থাকা জরুরি। আমরা নিচের মতো ফোল্ডার স্ট্রাকচার ব্যবহার করবো:
project/
├── config/
│ └── db.js
├── models/
│ └── Task.js
├── routes/
│ └── taskRoutes.js
├── controllers/
│ └── taskController.js
├── .env
└── server.js
প্রথমে server.js ফাইলে এক্সপ্রেস সার্ভার তৈরি করি। নিচের কোডটি কপি করে আপনার ফাইলে পেস্ট করুন:
require('dotenv').config();
const express = require('express');
const connectDB = require('./config/db');
const app = express();
// মিডলওয়্যার
app.use(express.json());
// ডেটাবেস সংযোগ
connectDB();
// রাউট
app.use('/api/tasks', require('./routes/taskRoutes'));
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => console.log('Server running on port ' + PORT));
এখানে express.json() মিডলওয়্যারটি JSON ডেটা পার্স করতে সাহায্য করে, কারণ API-তে আমরা JSON ফরম্যাটে ডেটা পাঠাবো। এখন config/db.js ফাইলে MongoDB-র সাথে সংযোগের কোড লিখি:
const mongoose = require('mongoose');
const connectDB = async () => {
try {
const conn = await mongoose.connect(process.env.MONGO_URI);
console.log('MongoDB connected: ' + conn.connection.host);
} catch (err) {
console.error(err);
process.exit(1);
}
};
module.exports = connectDB;
এবং .env ফাইলে লিখুন:
MONGO_URI=your_mongodb_connection_string
PORT=5000
Atlas-এ ক্লাস্টার তৈরি করলে আপনার connection string পাবেন, সেটি এখানে বসান। এখন পর্যন্ত আমাদের সার্ভার তৈরি হয়ে গেছে, কিন্তু এখনো কোনো API endpoint নেই।
মডেল তৈরি: Mongoose দিয়ে ডেটা স্কিমা
MongoDB হলো স্কিমালেস, কিন্তু Mongoose ব্যবহার করলে আমরা একটি নির্দিষ্ট কাঠামো (schema) ঠিক করে নিতে পারি। আমাদের টাস্ক মডেলে কী কী ফিল্ড থাকবে? যেমন—title, description, status, createdAt। models/Task.js ফাইলে লিখুন:
const mongoose = require('mongoose');
const taskSchema = new mongoose.Schema({
title: {
type: String,
required: true,
trim: true
},
description: {
type: String,
default: ''
},
status: {
type: String,
enum: ['pending', 'in-progress', 'completed'],
default: 'pending'
},
createdAt: {
type: Date,
default: Date.now
}
});
module.exports = mongoose.model('Task', taskSchema);
এখানে required: true মানে হলো title ছাড়া টাস্ক তৈরি করা যাবে না। enum দিয়ে আমরা status-এর সম্ভাব্য মান নির্ধারণ করেছি, যাতে ভুল ডেটা ঢুকতে না পারে।
কন্ট্রোলার এবং রাউট: CRUD অপারেশন বাস্তবায়ন
এবার আসল কাজ—API-র বিভিন্ন endpoint তৈরি করা। আমরা ছয়টি সাধারণ endpoint বানাবো: নতুন টাস্ক তৈরি (POST), সব টাস্ক দেখা (GET), নির্দিষ্ট টাস্ক দেখা (GET by ID), টাস্ক আপডেট (PUT/PATCH), টাস্ক ডিলিট (DELETE), এবং status অনুযায়ী ফিল্টার। প্রথমে controllers/taskController.js ফাইলে ফাংশনগুলো লিখি:
const Task = require('../models/Task');
// সব টাস্ক পাওয়া
exports.getTasks = async (req, res) => {
try {
const tasks = await Task.find();
res.json(tasks);
} catch (err) {
res.status(500).json({ message: err.message });
}
};
// একটি টাস্ক পাওয়া (ID দিয়ে)
exports.getTaskById = async (req, res) => {
try {
const task = await Task.findById(req.params.id);
if (!task) return res.status(404).json({ message: 'Task not found' });
res.json(task);
} catch (err) {
res.status(500).json({ message: err.message });
}
};
// নতুন টাস্ক তৈরি
exports.createTask = async (req, res) => {
try {
const task = new Task(req.body);
const savedTask = await task.save();
res.status(201).json(savedTask);
} catch (err) {
res.status(400).json({ message: err.message });
}
};
// টাস্ক আপডেট
exports.updateTask = async (req, res) => {
try {
const task = await Task.findByIdAndUpdate(req.params.id, req.body, {
new: true,
runValidators: true
});
if (!task) return res.status(404).json({ message: 'Task not found' });
res.json(task);
} catch (err) {
res.status(400).json({ message: err.message });
}
};
// টাস্ক ডিলিট
exports.deleteTask = async (req, res) => {
try {
const task = await Task.findByIdAndDelete(req.params.id);
if (!task) return res.status(404).json({ message: 'Task not found' });
res.json({ message: 'Task deleted' });
} catch (err) {
res.status(500).json({ message: err.message });
}
};
এখন এই কন্ট্রোলারগুলোকে রাউটের সাথে যুক্ত করি routes/taskRoutes.js ফাইলে:
const express = require('express');
const router = express.Router();
const {
getTasks,
getTaskById,
createTask,
updateTask,
deleteTask
} = require('../controllers/taskController');
router.route('/')
.get(getTasks)
.post(createTask);
router.route('/:id')
.get(getTaskById)
.put(updateTask)
.delete(deleteTask);
module.exports = router;
এখন আপনার API প্রস্তুত। সার্ভার চালু করতে টার্মিনালে node server.js লিখুন। তারপর Postman বা ব্রাউজারে http://localhost:5000/api/tasks এ GET request পাঠিয়ে দেখুন—প্রথমে একটি খালি অ্যারে পাবেন।
API টেস্টিং এবং ফ্রিল্যান্স প্রজেক্টে ব্যবহারের টিপস
API বানানো শেষ, কিন্তু কাজ শেষ না। ফ্রিল্যান্স প্রজেক্টে ডেলিভারির আগে API ভালোভাবে টেস্ট করা জরুরি। আমি সাধারণত Postman ব্যবহার করি। সেখানে প্রতিটি endpoint-এ বিভিন্ন ডেটা দিয়ে request পাঠাই, যেমন—নতুন টাস্ক তৈরি করতে POST request এ JSON বডি দিই:
{
'title': 'ক্লায়েন্টের ওয়েবসাইটের জন্য API ডকুমেন্টেশন লিখা',
'description': 'API-র প্রতিটি endpoint-এর উদাহরণ সহ ডকুমেন্টেশন তৈরি করুন।',
'status': 'in-progress'
}
এতে যদি 201 status code এবং নতুন টাস্কের ডেটা ফেরত আসে, তাহলে বুঝবেন কাজ ঠিকঠাক চলছে। এছাড়াও এরর হ্যান্ডলিং-এর জন্য try-catch আমরা ইতিমধ্যে ব্যবহার করেছি, কিন্তু প্রোডাকশনে আরও বিস্তারিত এরর মেসেজ দেওয়া ভালো। যেমন—res.status(400).json({ success: false, error: 'দয়া করে title দিন' })।
ফ্রিল্যান্স প্রজেক্টে আরও কিছু বিষয় মনে রাখবেন:
- ভ্যালিডেশন: Mongoose-এর বিল্ট-ইন ভ্যালিডেটর ব্যবহার করুন; পাশাপাশি নিজেও কিছু চেক যোগ করতে পারেন। যেমন—title-এর দৈর্ঘ্য ৩-এর কম হলে এরর দেখানো।
- প্যাজিনেশন: যখন ডেটা অনেক বড় হবে, তখন
limitএবংskipব্যবহার করে পেজ আকারে ডেটা পাঠান। যেমন—GET /api/tasks?page=1&limit=10। - সিকিউরিটি: ক্লায়েন্টের ডেটা সুরক্ষিত রাখতে JWT (JSON Web Token) অথেনটিকেশন যোগ করুন। তবে এই টিউটোরিয়ালে আমরা সেটি করিনি, কারণ এটি একটি বেসিক গাইড।
- ডিপ্লয়মেন্ট: প্রজেক্ট শেষে Vercel, Railway বা Render-এ ফ্রি ডিপ্লয় করতে পারেন। ক্লায়েন্টকে দেখানোর জন্য একটি লাইভ URL খুব দরকারি।
এই Express.js MongoDB API tutorial-এ আমরা শুধু বেসিক CRUD শিখলাম, কিন্তু আপনার ফ্রিল্যান্স প্রজেক্টে আরও অনেক কিছু যোগ করতে হবে। যেমন—অথেনটিকেশন, ফাইল আপলোড, ডেটা ভ্যালিডেশন ইত্যাদি। তবে ভিত্তিটা এখন আপনার হাতে, বাকিটা অনুশীলন।
সাধারণ সমস্যা এবং সমাধান
নতুনদের মধ্যে কিছু সাধারণ সমস্যা দেখা যায়। যেমন—MONGO_URI ঠিকমতো সেট না করলে সংযোগ হয় না। আবার অনেক সময় body-parser ব্যবহার করতে ভুলে যান, কিন্তু আমরা express.json() ব্যবহার করেছি, যা আধুনিক ভার্সনে বিল্ট-ইন। আরেকটি সমস্যা হলো CORS (Cross-Origin Resource Sharing)। যদি আপনার API-কে অন্য ডোমেইন থেকে ব্যবহার করতে হয়, তাহলে cors প্যাকেজ ইনস্টল করে app.use(cors()) যোগ করুন।
আপনি যদি এই API-কে আরও প্রফেশনাল করতে চান, তাহলে আমাদের Node.js কোর্স দেখতে পারেন, যেখানে আরও গভীরভাবে শেখানো হয়। আর যেকোনো সমস্যায় আমাদের কমিউনিটি-তে প্রশ্ন করতে পারেন।
সাধারণ প্রশ্নোত্তর
Express.js এবং MongoDB দিয়ে API তৈরি করতে কতদিন লাগে?
বেসিক CRUD API তৈরি করতে ২-৩ দিন লাগতে পারে, যদি আপনি Node.js-এর সাথে আগে থেকে পরিচিত হন। তবে ভালোভাবে শিখতে ১-২ সপ্তাহ নিয়মিত অনুশীলন করা উচিত। আমাদের টিউটোরিয়ালটি অনুসরণ করলে একদিনেই একটি কার্যকর API বানিয়ে ফেলতে পারবেন।
MongoDB Atlas-এর ফ্রি টিয়ার কি ফ্রিল্যান্স প্রজেক্টের জন্য যথেষ্ট?
হ্যাঁ, ছোট প্রজেক্টের জন্য ফ্রি টিয়ার (M0) যথেষ্ট। এতে ৫১২ MB স্টোরেজ পাওয়া যায়, যা ছোট অ্যাপ্লিকেশনের জন্য যথেষ্ট। তবে প্রজেক্ট বড় হলে পেইড ভার্সনে আপগ্রেড করতে হতে পারে।
এই API-তে অথেনটিকেশন কীভাবে যোগ করবো?
সাধারণত JWT (JSON Web Token) ব্যবহার করা হয়। প্রথমে jsonwebtoken এবং bcryptjs প্যাকেজ ইনস্টল করুন, তারপর ইউজার মডেল তৈরি করে লগইন ও রেজিস্ট্রেশন endpoint বানান। প্রতিটি প্রোটেক্টেড রাউটে মিডলওয়্যার দিয়ে টোকেন ভেরিফাই করুন। বিস্তারিত জানতে আমাদের ব্লগ-এর অন্যান্য টিউটোরিয়াল দেখুন।
ক্লায়েন্টের কাছে API ডেলিভার করার সময় কী কী দিতে হবে?
শুধু কোড নয়, একটি API ডকুমেন্টেশন (যেমন Postman collection বা Swagger) দিতে হবে। এতে ক্লায়েন্ট সহজেই বুঝতে পারবে কীভাবে API ব্যবহার করতে হয়। এছাড়া ডিপ্লয় করা লাইভ URL এবং সোর্স কোড (GitHub রিপোজিটরি) দিলে ভালো হয়।
শেষ কথা: পরবর্তী পদক্ষেপ
আশা করি এই Express.js MongoDB API tutorial আপনার কাজে লাগবে। এখন আপনি নিজে কিছু প্রজেক্ট করে দেখুন—যেমন একটি ব্লগ API বা নোট অ্যাপ। যত বেশি হাতেকলমে কাজ করবেন, তত দ্রুত শিখবেন। ফ্রিল্যান্সিংয়ে সফল হতে হলে শুধু শেখা নয়, কাজের পোর্টফোলিও তৈরি করাও জরুরি। আপনার তৈরি API-গুলো GitHub-এ পুশ করে রাখুন, পরে ক্লায়েন্টকে দেখাতে পারবেন। আর কোনো প্রশ্ন থাকলে আমাদের যোগাযোগ পেজে জানাতে পারেন। শুভকামনা!


