ExpressJS ব্যবহার করে API (Application Programming Interface) ডেভেলপমেন্ট অত্যন্ত সহজ এবং দ্রুত। ExpressJS, একটি Node.js ফ্রেমওয়ার্ক হিসেবে, API তৈরির জন্য HTTP মেথড (GET, POST, PUT, DELETE) সহ রাউটিং এবং মিডলওয়্যার ব্যবস্থাপনাকে সহজ করে তোলে। বিশেষ করে RESTful Services তৈরি করার ক্ষেত্রে ExpressJS শক্তিশালী একটি টুল।
REST (Representational State Transfer) হল একটি আর্কিটেকচার স্টাইল, যা ক্লায়েন্ট-সার্ভার আর্কিটেকচার এবং HTTP প্রোটোকল ব্যবহার করে ডেটা রিট্রিভ, তৈরি, আপডেট, এবং মুছতে সহায়তা করে। RESTful API তৈরি করতে ExpressJS একেবারে সহজ এবং অত্যন্ত জনপ্রিয় একটি টুল।
১. ExpressJS দিয়ে API তৈরি
API তৈরি করতে প্রথমে Express অ্যাপ্লিকেশন সেটআপ করতে হবে এবং HTTP রিকোয়েস্টগুলির জন্য বিভিন্ন রাউট কনফিগার করতে হবে।
১.১. প্রথম API তৈরি করা
প্রথমে একটি নতুন Express অ্যাপ্লিকেশন তৈরি করুন:
mkdir express-api
cd express-api
npm init -y
npm install express
এরপর app.js ফাইল তৈরি করুন এবং Express অ্যাপ্লিকেশন ইনিশিয়ালাইজ করুন:
const express = require('express');
const app = express();
const port = 3000;
// JSON বডি পার্সিং মিডলওয়্যার
app.use(express.json());
// রুট রাউট
app.get('/', (req, res) => {
res.send('Welcome to my API');
});
// API সার্ভার চালু করা
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
এখানে express.json() মিডলওয়্যারটি JSON ডেটা পার্স করার জন্য ব্যবহার করা হয়।
২. RESTful API রাউটিং
RESTful API তৈরিতে সাধারণত ৪টি প্রধান HTTP মেথড ব্যবহার করা হয়:
- GET: ডেটা রিট্রিভ করার জন্য।
- POST: নতুন ডেটা তৈরি করার জন্য।
- PUT: বিদ্যমান ডেটা আপডেট করার জন্য।
- DELETE: ডেটা মুছে ফেলার জন্য।
ExpressJS-এ প্রতিটি HTTP মেথডের জন্য রাউট তৈরি করা খুবই সহজ।
২.১. GET (ডেটা রিট্রিভ করা)
GET মেথড ব্যবহার করা হয় সার্ভারের ডেটা রিট্রিভ করার জন্য:
// GET রাউট - সমস্ত ইউজারদের তথ্য দেখানো
let users = [
{ id: 1, name: 'John Doe', email: 'john@example.com' },
{ id: 2, name: 'Jane Doe', email: 'jane@example.com' }
];
app.get('/users', (req, res) => {
res.json(users); // সমস্ত ইউজারের তথ্য রিটার্ন করা
});
২.২. POST (নতুন ডেটা যোগ করা)
POST মেথড ব্যবহার করা হয় নতুন ডেটা সার্ভারে পাঠানোর জন্য:
// POST রাউট - নতুন ইউজার তৈরি
app.post('/users', (req, res) => {
const newUser = req.body; // রিকোয়েস্ট বডি থেকে নতুন ইউজারের ডেটা নেয়া
users.push(newUser); // নতুন ইউজার তালিকায় যোগ করা
res.status(201).json(newUser); // 201 স্ট্যাটাস কোড এবং নতুন ইউজার রিটার্ন করা
});
এখানে req.body থেকে POST রিকোয়েস্টের ডেটা নেওয়া হয় এবং সেটি users অ্যারের মধ্যে যোগ করা হয়।
২.৩. PUT (ডেটা আপডেট করা)
PUT মেথড ব্যবহৃত হয় বিদ্যমান ডেটা আপডেট করার জন্য:
// PUT রাউট - ইউজারের তথ্য আপডেট করা
app.put('/users/:id', (req, res) => {
const userId = parseInt(req.params.id); // URL প্যারামিটার থেকে ইউজার আইডি নেয়া
const updatedUser = req.body; // রিকোয়েস্ট বডি থেকে নতুন ডেটা নেয়া
let user = users.find(u => u.id === userId); // ইউজার খোঁজা
if (user) {
user.name = updatedUser.name; // নাম আপডেট করা
user.email = updatedUser.email; // ইমেইল আপডেট করা
res.json(user); // আপডেট করা ইউজার রিটার্ন করা
} else {
res.status(404).json({ message: 'User not found' }); // ইউজার না পাওয়া গেলে
}
});
২.৪. DELETE (ডেটা মুছে ফেলা)
DELETE মেথড ব্যবহৃত হয় ডেটা মুছে ফেলার জন্য:
// DELETE রাউট - ইউজার মুছে ফেলা
app.delete('/users/:id', (req, res) => {
const userId = parseInt(req.params.id); // URL প্যারামিটার থেকে ইউজার আইডি নেয়া
const userIndex = users.findIndex(u => u.id === userId); // ইউজার খোঁজা
if (userIndex !== -1) {
users.splice(userIndex, 1); // ইউজার মুছে ফেলা
res.status(204).end(); // 204 স্ট্যাটাস কোডের সাথে রেসপন্স দেয়া
} else {
res.status(404).json({ message: 'User not found' }); // ইউজার না পাওয়া গেলে
}
});
৩. RESTful API এর নকশা
RESTful API ডিজাইনে কিছু মূল ধারণা রয়েছে:
- Resources: API-তে যে ডেটাগুলো ব্যবহৃত হয়, সেগুলো
resourcesনামে পরিচিত। যেমন:users,posts,commentsইত্যাদি। - HTTP Methods: API-তে ডেটা রিট্রিভ, ক্রিয়েট, আপডেট এবং ডিলিট করার জন্য বিভিন্ন HTTP মেথড (GET, POST, PUT, DELETE) ব্যবহার করা হয়।
- URL Structure: API রাউটগুলোর URL স্ট্রাকচার RESTful স্টাইল অনুসরণ করে:
- GET
/users: সমস্ত ইউজার রিটার্ন করবে - POST
/users: নতুন ইউজার তৈরি করবে - GET
/users/:id: নির্দিষ্ট ইউজার রিটার্ন করবে - PUT
/users/:id: নির্দিষ্ট ইউজার আপডেট করবে - DELETE
/users/:id: নির্দিষ্ট ইউজার মুছে ফেলবে
- GET
৪. API Error Handling
API তে সঠিক error handling খুবই গুরুত্বপূর্ণ। যখন কোনো রিকোয়েস্টের জন্য একটি সমস্যা ঘটে, তখন তা একটি যথাযথ স্ট্যাটাস কোড এবং মেসেজ সহ ক্লায়েন্টকে পাঠানো উচিত।
app.get('/users/:id', (req, res) => {
const userId = parseInt(req.params.id);
const user = users.find(u => u.id === userId);
if (!user) {
return res.status(404).json({ message: 'User not found' }); // 404 এরর
}
res.json(user); // ইউজার রিটার্ন
});
এখানে, যদি কোনো ইউজার আইডি পাওয়া না যায়, তবে 404 স্ট্যাটাস কোডের সাথে একটি কাস্টম মেসেজ পাঠানো হয়।
সারাংশ
ExpressJS দিয়ে RESTful API ডেভেলপমেন্ট খুবই সহজ। GET, POST, PUT, এবং DELETE HTTP মেথডগুলো ব্যবহার করে API রাউট তৈরি করা হয়, যা ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা রিট্রিভ, তৈরি, আপডেট, এবং মুছতে সাহায্য করে। API তে সঠিক error handling এবং কাস্টম মেসেজ ব্যবহারের মাধ্যমে API উন্নত করা যায়। ExpressJS এর সহজ রাউটিং সিস্টেম API ডেভেলপমেন্টের কাজকে অনেক সহজ করে তোলে।
REST (Representational State Transfer) একটি আর্কিটেকচারাল স্টাইল যা ওয়েব সার্ভিস তৈরি করার জন্য ব্যবহৃত হয়। REST API (Application Programming Interface) একটি পদ্ধতি যার মাধ্যমে ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা আদান-প্রদান হয়। ExpressJS-এর মাধ্যমে আপনি খুব সহজেই RESTful API তৈরি করতে পারেন।
১. REST API কি?
REST API একটি ওয়েব সার্ভিস যা HTTP প্রোটোকল ব্যবহার করে ডেটা অ্যাক্সেস এবং ম্যানিপুলেশন করার জন্য ক্লায়েন্ট এবং সার্ভারের মধ্যে যোগাযোগ স্থাপন করে। এটি REST আর্কিটেকচারের মূল নীতির উপর ভিত্তি করে কাজ করে এবং CRUD (Create, Read, Update, Delete) অপারেশন পরিচালনা করে।
REST API সাধারণত ৪টি মূল HTTP মেথড ব্যবহার করে:
- GET: ডেটা রিট্রিভ (অথবা পড়া)
- POST: নতুন ডেটা তৈরি (অথবা যোগ করা)
- PUT: ডেটা আপডেট করা
- DELETE: ডেটা মুছে ফেলা
১.১. RESTful API এর মূল বৈশিষ্ট্য
- Stateless: প্রতিটি রিকোয়েস্ট সম্পূর্ণভাবে স্বাধীন, সার্ভার কোনো পূর্ববর্তী রিকোয়েস্টের তথ্য সংরক্ষণ করে না।
- Client-Server: ক্লায়েন্ট এবং সার্ভার একে অপর থেকে স্বাধীন, ফলে উভয়ের মধ্যে যোগাযোগ সহজ হয়।
- Cacheable: কিছু রিকোয়েস্টকে ক্যাশ করা যেতে পারে, যা কর্মক্ষমতা বৃদ্ধি করতে সাহায্য করে।
- Uniform Interface: API এর সকল রাউট ও রিকোয়েস্ট হ্যান্ডলিং নিয়মাবলী একটি নির্দিষ্ট কাঠামোর মধ্যে থাকে, যাতে ব্যবহার করা সহজ হয়।
২. REST API তৈরি করার জন্য ExpressJS ব্যবহার
ExpressJS-এ REST API তৈরি করা বেশ সহজ। ExpressJS এর মাধ্যমে রাউট সেটআপ করে, আপনি HTTP মেথডের মাধ্যমে ডেটা পরিচালনা করতে পারেন।
২.১. REST API এর উদাহরণ (GET, POST, PUT, DELETE)
ধরা যাক, আপনি একটি users রিসোর্সের জন্য API তৈরি করতে চান যেখানে আপনি ব্যবহারকারীদের তথ্য দেখতে, যোগ করতে, আপডেট করতে এবং মুছে ফেলতে পারবেন। এর জন্য ExpressJS-এ কিছু সাধারণ রাউট তৈরি করা হবে।
const express = require('express');
const app = express();
const port = 3000;
// মিথ্যা ডেটাবেস
let users = [
{ id: 1, name: 'John Doe', age: 30 },
{ id: 2, name: 'Jane Doe', age: 25 }
];
// JSON বডি পার্স করার জন্য মিডলওয়্যার
app.use(express.json());
// GET: সমস্ত ব্যবহারকারীদের তথ্য রিটার্ন করা
app.get('/users', (req, res) => {
res.json(users);
});
// GET: নির্দিষ্ট ব্যবহারকারীর তথ্য রিটার্ন করা
app.get('/users/:id', (req, res) => {
const user = users.find(u => u.id === parseInt(req.params.id));
if (!user) return res.status(404).send('User not found');
res.json(user);
});
// POST: নতুন ব্যবহারকারী তৈরি করা
app.post('/users', (req, res) => {
const { name, age } = req.body;
const user = { id: users.length + 1, name, age };
users.push(user);
res.status(201).json(user);
});
// PUT: ব্যবহারকারীর তথ্য আপডেট করা
app.put('/users/:id', (req, res) => {
const user = users.find(u => u.id === parseInt(req.params.id));
if (!user) return res.status(404).send('User not found');
user.name = req.body.name;
user.age = req.body.age;
res.json(user);
});
// DELETE: ব্যবহারকারী মুছে ফেলা
app.delete('/users/:id', (req, res) => {
const userIndex = users.findIndex(u => u.id === parseInt(req.params.id));
if (userIndex === -1) return res.status(404).send('User not found');
users.splice(userIndex, 1);
res.status(204).send(); // 204 No Content
});
// সার্ভার শুরু
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
এখানে আমরা চারটি প্রধান HTTP মেথডের সাহায্যে একটি REST API তৈরি করেছি:
- GET
/users: সমস্ত ব্যবহারকারীর তথ্য দেখাবে। - GET
/users/:id: নির্দিষ্ট একটি ব্যবহারকারীর তথ্য দেখাবে। - POST
/users: নতুন একটি ব্যবহারকারী তৈরি করবে। - PUT
/users/:id: একটি নির্দিষ্ট ব্যবহারকারীর তথ্য আপডেট করবে। - DELETE
/users/:id: একটি নির্দিষ্ট ব্যবহারকারী মুছে ফেলবে।
২.২. API রিকোয়েস্ট এবং রেসপন্স
- GET
/usersরিকোয়েস্ট:- রেসপন্স: একটি JSON অ্যারে যার মধ্যে সমস্ত ব্যবহারকারীর তথ্য থাকবে।
- GET
/users/:idরিকোয়েস্ট:- রেসপন্স: নির্দিষ্ট ব্যবহারকারীর তথ্য (যেমন
{ id: 1, name: 'John Doe', age: 30 })
- রেসপন্স: নির্দিষ্ট ব্যবহারকারীর তথ্য (যেমন
- POST
/usersরিকোয়েস্ট:- রিকোয়েস্ট বডি:
{ "name": "Alice", "age": 35 } - রেসপন্স: নতুন ব্যবহারকারী তৈরির তথ্য সহ (যেমন
{ id: 3, name: 'Alice', age: 35 })
- রিকোয়েস্ট বডি:
- PUT
/users/:idরিকোয়েস্ট:- রিকোয়েস্ট বডি:
{ "name": "John Smith", "age": 32 } - রেসপন্স: আপডেট করা ব্যবহারকারীর তথ্য
- রিকোয়েস্ট বডি:
- DELETE
/users/:idরিকোয়েস্ট:- রেসপন্স: 204 No Content (ব্যবহারকারী সফলভাবে মুছে ফেলা হয়েছে)
৩. REST API এর মৌলিক ধারণা
REST API তৈরির সময় কিছু মৌলিক ধারণা মনে রাখা জরুরি:
- Stateless: প্রতিটি রিকোয়েস্ট সম্পূর্ণভাবে স্বাধীন এবং পূর্ববর্তী রিকোয়েস্টের তথ্যের উপর নির্ভর করে না।
- Resources: API-তে প্রতিটি ডেটা একটি রিসোর্স হিসেবে গণ্য হয় (যেমন:
users,posts,comments)। - HTTP Methods: CRUD অপারেশনগুলো HTTP মেথডের মাধ্যমে পরিচালিত হয়: GET (পড়ার জন্য), POST (নতুন ডেটা তৈরি করার জন্য), PUT (আপডেট করার জন্য), DELETE (ডেটা মুছতে)।
- URL পাথ: প্রতিটি রিসোর্সের জন্য একটি নির্দিষ্ট URL পাথ থাকে। যেমন
/users,/users/:idইত্যাদি।
সারাংশ
ExpressJS-এ REST API তৈরি করা খুবই সহজ এবং কার্যকর। এটি HTTP মেথড (GET, POST, PUT, DELETE) ব্যবহার করে ডেটা হ্যান্ডলিং এবং CRUD অপারেশন সম্পাদন করতে সক্ষম। REST API Stateless আর্কিটেকচারের উপর ভিত্তি করে কাজ করে, যেখানে প্রতিটি রিকোয়েস্ট স্বাধীন এবং URL পাথের মাধ্যমে নির্দিষ্ট রিসোর্সগুলোর সাথে কাজ করা হয়। ExpressJS-এ API তৈরি করার জন্য আপনাকে রাউট সেটআপ করতে হবে এবং HTTP মেথড ব্যবহার করে সঠিক অপারেশন সম্পাদন করতে হবে।
ExpressJS দিয়ে RESTful API তৈরি করা খুবই সহজ এবং দ্রুত। REST (Representational State Transfer) একটি আর্কিটেকচারাল স্টাইল, যা HTTP প্রোটোকল ব্যবহার করে ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা আদান-প্রদান করার জন্য ওয়েব অ্যাপ্লিকেশন তৈরি করতে সাহায্য করে। ExpressJS-এর মাধ্যমে আপনি HTTP মেথডগুলো (GET, POST, PUT, DELETE) ব্যবহার করে একটি পূর্ণাঙ্গ REST API তৈরি করতে পারেন।
১. ExpressJS অ্যাপ ইনস্টল করা
প্রথমে, একটি নতুন Node.js প্রোজেক্ট তৈরি করুন এবং ExpressJS ইনস্টল করুন।
Step 1: নতুন Node.js প্রোজেক্ট তৈরি
mkdir express-rest-api
cd express-rest-api
npm init -y
Step 2: ExpressJS ইনস্টল করা
npm install express
এখন, ExpressJS ইনস্টল হয়ে যাবে এবং আপনার node_modules ফোল্ডারে থাকবে।
২. ExpressJS অ্যাপ তৈরি করা
এখন, একটি app.js ফাইল তৈরি করুন, যা REST API সার্ভ করবে।
উদাহরণ: app.js
const express = require('express');
const app = express();
const port = 3000;
// Middleware - JSON ডেটা পার্স করার জন্য
app.use(express.json());
// GET রাউট
app.get('/api/hello', (req, res) => {
res.json({ message: 'Hello, World!' });
});
// POST রাউট
app.post('/api/users', (req, res) => {
const { name, email } = req.body;
res.status(201).json({
message: 'User created successfully!',
user: { name, email }
});
});
// PUT রাউট
app.put('/api/users/:id', (req, res) => {
const { id } = req.params;
const { name, email } = req.body;
res.json({
message: `User with ID ${id} updated successfully!`,
user: { name, email }
});
});
// DELETE রাউট
app.delete('/api/users/:id', (req, res) => {
const { id } = req.params;
res.json({ message: `User with ID ${id} deleted successfully!` });
});
// সার্ভার চালু করা
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
এখানে:
- GET:
/api/helloরাউটটি একটি সাধারণ বার্তা পাঠাবে। - POST:
/api/usersরাউটটি ব্যবহারকারীর তথ্য গ্রহণ করে এবং তাকে সফলভাবে তৈরি করার একটি সাড়া পাঠাবে। - PUT:
/api/users/:idরাউটটি ব্যবহারকারীর তথ্য আপডেট করবে (উল্লেখযোগ্য ID দিয়ে)। - DELETE:
/api/users/:idরাউটটি একটি ব্যবহারকারী মুছে ফেলবে।
৩. ExpressJS API রাউটিং ও হ্যান্ডলিং
ExpressJS-এ RESTful API তৈরি করার জন্য বিভিন্ন HTTP মেথড (GET, POST, PUT, DELETE) ব্যবহার করা হয়। রাউটগুলো হল:
- GET: তথ্যের জন্য রিকোয়েস্ট পাঠানোর জন্য ব্যবহৃত হয়।
- POST: নতুন তথ্য তৈরি করার জন্য ব্যবহৃত হয়।
- PUT: বিদ্যমান তথ্য আপডেট করার জন্য ব্যবহৃত হয়।
- DELETE: বিদ্যমান তথ্য মুছে ফেলার জন্য ব্যবহৃত হয়।
উদাহরণ:
GET: ডেটা ক্লায়েন্ট থেকে সার্ভারে আনার জন্য।
app.get('/api/items', (req, res) => { // ডেটা ফেরত পাঠানো });POST: নতুন ডেটা তৈরি করা।
app.post('/api/items', (req, res) => { const newItem = req.body; // POST ডেটা // নতুন আইটেম তৈরি করা res.status(201).json(newItem); });PUT: বিদ্যমান আইটেম আপডেট করা।
app.put('/api/items/:id', (req, res) => { const { id } = req.params; // URL থেকে ID গ্রহণ const updatedItem = req.body; // PUT ডেটা // আইটেম আপডেট করা res.json(updatedItem); });DELETE: আইটেম মুছে ফেলা।
app.delete('/api/items/:id', (req, res) => { const { id } = req.params; // আইটেম মুছে ফেলা res.json({ message: `Item with ID ${id} deleted` }); });
৪. Error Handling
REST API-তে এরর হ্যান্ডলিং খুবই গুরুত্বপূর্ণ। আপনি try-catch ব্লক ব্যবহার করে বা next() মেথড দিয়ে কাস্টম এরর হ্যান্ডলার তৈরি করতে পারেন।
উদাহরণ: কাস্টম Error Handling Middleware
app.use((err, req, res, next) => {
console.error(err.stack);
res.status(500).json({ message: 'Something went wrong!' });
});
এটি যখন কোনো রাউটের মধ্যে এরর হবে, তখন 500 Internal Server Error রেসপন্স পাঠাবে।
৫. REST API Testing
API-টি টেস্ট করার জন্য আপনি Postman বা CURL ব্যবহার করতে পারেন। উদাহরণস্বরূপ:
GET রিকোয়েস্ট:
GET http://localhost:3000/api/helloPOST রিকোয়েস্ট (Body JSON):
POST http://localhost:3000/api/users { "name": "John Doe", "email": "john@example.com" }PUT রিকোয়েস্ট:
PUT http://localhost:3000/api/users/1 { "name": "John Doe", "email": "john.updated@example.com" }DELETE রিকোয়েস্ট:
DELETE http://localhost:3000/api/users/1
৬. JSON Web Token (JWT) দিয়ে Authentication
আপনি JWT (JSON Web Token) ব্যবহার করে API তে নিরাপত্তা যোগ করতে পারেন। এটি সাধারণত ব্যবহারকারী লগইন, অথেন্টিকেশন এবং অথরাইজেশন চেক করার জন্য ব্যবহৃত হয়। JWT-এ ডেটা এনক্রিপ্ট করে নিরাপদে পাঠানো হয়।
সারাংশ
ExpressJS-এ REST API তৈরি করা খুবই সহজ এবং দ্রুত। আপনি HTTP মেথড (GET, POST, PUT, DELETE) ব্যবহার করে বিভিন্ন রাউট তৈরি করে ডেটা প্রক্রিয়া করতে পারেন। ExpressJS এর মাধ্যমে API তৈরি করে আপনি ওয়েব বা মোবাইল অ্যাপ্লিকেশনগুলির জন্য ডেটা সেবা প্রদান করতে পারেন। এই API-কে নিরাপদ এবং নির্ভরযোগ্য করার জন্য কাস্টম এরর হ্যান্ডলিং, JWT অথেন্টিকেশন ইত্যাদি ব্যবহার করা যেতে পারে।
ExpressJS ব্যবহার করে API তৈরি করার সময়, Routes এবং Controllers তৈরি করা গুরুত্বপূর্ণ। Routes রিকোয়েস্টগুলো নির্দিষ্ট অ্যাকশন বা ফাংশনের সাথে সম্পর্কিত করে এবং Controllers রিকোয়েস্টগুলোর প্রক্রিয়া (যেমন: ডাটাবেস থেকে তথ্য আনানো বা ফর্ম ডাটা প্রক্রিয়া করা) সম্পাদন করে। এই পদ্ধতিতে অ্যাপ্লিকেশনটি আরও পরিষ্কার এবং মডুলার হয়, কারণ আপনি রাউট এবং কন্ট্রোলারকে আলাদা আলাদা ফাইলে রাখতে পারেন।
১. ExpressJS API Routes
Routes হল অ্যাপ্লিকেশনের URL পাথের সাথে সম্পর্কিত কোড, যা নির্দিষ্ট HTTP মেথড (GET, POST, PUT, DELETE ইত্যাদি) এর জন্য কাজ করে। API রাউট তৈরি করতে, ExpressJS-এ app.get(), app.post(), app.put() এবং app.delete() মেথডগুলি ব্যবহার করা হয়।
১.১. Routes তৈরির প্রাথমিক উদাহরণ
const express = require('express');
const app = express();
// JSON ডাটা প্যার্সিং
app.use(express.json());
// GET রাউট (তথ্য প্রদর্শন)
app.get('/api/users', (req, res) => {
res.status(200).send('Fetching all users');
});
// POST রাউট (তথ্য যোগ করা)
app.post('/api/users', (req, res) => {
const user = req.body;
res.status(201).send(`User added: ${JSON.stringify(user)}`);
});
app.listen(3000, () => {
console.log('Server running at http://localhost:3000');
});
এখানে:
- GET /api/users: সমস্ত ইউজার তথ্য ফিরে পাওয়া যাবে।
- POST /api/users: নতুন ইউজার যোগ করার জন্য API রাউট।
এছাড়া, বিভিন্ন HTTP মেথডের জন্য আলাদা রাউট তৈরি করা যায়, যেমন PUT বা DELETE রাউট।
২. Controllers তৈরি করা
Controllers হল সেই অংশ যা রাউটগুলোর সাথে যুক্ত ফাংশনগুলিকে প্রক্রিয়া করে। উদাহরণস্বরূপ, একটি GET রাউট ব্যবহার করে ডাটাবেস থেকে ইউজার তথ্য প্রাপ্তি বা POST রাউটের মাধ্যমে নতুন ইউজার ইনসার্ট করার মতো কাজগুলি কন্ট্রোলার দ্বারা করা হয়। কন্ট্রোলারের মাধ্যমে কোডের পুনরায় ব্যবহারযোগ্যতা এবং অ্যাপ্লিকেশনের মডুলারিটি উন্নত হয়।
২.১. Controller Example
আমরা এখানে Users API তৈরি করবো যেখানে একটি usersController.js কন্ট্রোলার ফাইল থাকবে যা ইউজারদের তথ্য প্রসেস করবে।
controllers/usersController.js:
// কন্ট্রোলার ফাইল
const getAllUsers = (req, res) => {
res.status(200).json({ message: 'Fetching all users' });
};
const createUser = (req, res) => {
const user = req.body;
res.status(201).json({ message: 'User created', user });
};
module.exports = { getAllUsers, createUser };
এখানে, আমরা দুটি ফাংশন তৈরি করেছি:
getAllUsers: সমস্ত ইউজারের তথ্য প্রাপ্তি।createUser: নতুন ইউজার তৈরি করা।
২.২. Routes এবং Controllers একত্রে ব্যবহার করা
এখন, রাউটগুলো কন্ট্রোলার ফাংশনের সাথে সংযুক্ত করা হবে। routes/users.js ফাইলে রাউটগুলো এবং কন্ট্রোলার ফাংশনগুলো সংযুক্ত করা হবে।
routes/users.js:
const express = require('express');
const router = express.Router();
const usersController = require('../controllers/usersController');
// GET রাউট (সব ইউজার পাওয়া)
router.get('/', usersController.getAllUsers);
// POST রাউট (নতুন ইউজার তৈরি)
router.post('/', usersController.createUser);
module.exports = router;
এখানে, users.js রাউটার ফাইলে রাউটগুলো কন্ট্রোলার ফাংশনের সাথে যুক্ত করা হয়েছে।
২.৩. Main App এ Routes ব্যবহার করা
এখন, মূল অ্যাপ ফাইলে (যেমন: app.js) এই রাউটগুলো ইমপোর্ট করে ব্যবহার করতে হবে।
app.js:
const express = require('express');
const app = express();
const usersRoutes = require('./routes/users');
// JSON প্যার্সিং মিডলওয়্যার
app.use(express.json());
// রাউট সংযোগ
app.use('/api/users', usersRoutes);
app.listen(3000, () => {
console.log('Server running at http://localhost:3000');
});
এখানে:
/api/usersরাউটটিusersRoutesফাইল থেকে এসেছে, যেখানে কন্ট্রোলার ফাংশনগুলো যুক্ত করা হয়েছিল।- Express.json() মিডলওয়্যার ব্যবহার করে আমরা JSON ডাটা প্যার্স করছি।
৩. RESTful API Design
RESTful API ডিজাইনে কিছু কনভেনশন থাকে, যা আমরা ব্যবহার করতে পারি:
৩.১. রাউট স্ট্রাকচার
- GET /api/users: সমস্ত ইউজার দেখানো হবে।
- GET /api/users/:id: নির্দিষ্ট ইউজার দেখানো হবে (id দ্বারা শনাক্ত করা হবে)।
- POST /api/users: নতুন ইউজার তৈরি করা হবে।
- PUT /api/users/:id: নির্দিষ্ট ইউজারের তথ্য আপডেট করা হবে।
- DELETE /api/users/:id: নির্দিষ্ট ইউজার মুছে ফেলা হবে।
৩.২. Controller Update
যেহেতু RESTful ডিজাইন অনুসারে আমাদের ইউজার আপডেট এবং ডিলিট রাউট তৈরি করতে হবে, সেজন্য কন্ট্রোলারেও নতুন ফাংশন যুক্ত করতে হবে।
controllers/usersController.js:
const getAllUsers = (req, res) => {
res.status(200).json({ message: 'Fetching all users' });
};
const createUser = (req, res) => {
const user = req.body;
res.status(201).json({ message: 'User created', user });
};
const getUserById = (req, res) => {
const userId = req.params.id;
res.status(200).json({ message: `Fetching user with ID: ${userId}` });
};
const updateUser = (req, res) => {
const userId = req.params.id;
const updatedData = req.body;
res.status(200).json({ message: `User with ID: ${userId} updated`, updatedData });
};
const deleteUser = (req, res) => {
const userId = req.params.id;
res.status(200).json({ message: `User with ID: ${userId} deleted` });
};
module.exports = { getAllUsers, createUser, getUserById, updateUser, deleteUser };
এখানে:
getUserById: নির্দিষ্ট ইউজার ID দিয়ে ইউজার পাওয়া।updateUser: নির্দিষ্ট ইউজারের তথ্য আপডেট করা।deleteUser: নির্দিষ্ট ইউজার মুছে ফেলা।
৩.৩. Routes Update
এখন এই কন্ট্রোলার ফাংশনগুলো রাউটগুলোতে যোগ করতে হবে।
routes/users.js:
const express = require('express');
const router = express.Router();
const usersController = require('../controllers/usersController');
// GET রাউট (সব ইউজার পাওয়া)
router.get('/', usersController.getAllUsers);
// GET রাউট (নির্দিষ্ট ইউজার পাওয়া)
router.get('/:id', usersController.getUserById);
// POST রাউট (নতুন ইউজার তৈরি)
router.post('/', usersController.createUser);
// PUT রাউট (ইউজার আপডেট)
router.put('/:id', usersController.updateUser);
// DELETE রাউট (ইউজার ডিলিট)
router.delete('/:id', usersController.deleteUser);
module.exports = router;
এখানে:
/api/users/:idরাউট ব্যবহার করা হচ্ছে নির্দিষ্ট ইউজার পেতে, আপডেট করতে বা মুছে ফেলতে।
সারাংশ
ExpressJS এর মাধ্যমে API Routes এবং Controllers তৈরি করা একটি ক্লিন এবং মডুলার অ্যাপ্লিকেশন স্ট্রাকচার তৈরি করতে সাহায্য করে। Routes ব্যবহার করে নির্দিষ্ট URL এবং HTTP মেথডের সাথে কাজ করা হয়, আর Controllers ফাংশনগুলি এই রিকোয়েস্টগুলোর মধ্যে কার্যকরী প্রক্রিয়া সম্পাদন করে। RESTful API ডিজাইন অনুসরণ করে, ExpressJS অ্যাপ্লিকেশনটি সোজা, পরিষ্কার এবং মেইনটেনেবল থাকে।
API নিরাপত্তা (security) এবং ব্যবহারকারী প্রমাণীকরণ (authentication) কোনো ওয়েব অ্যাপ্লিকেশনের জন্য অত্যন্ত গুরুত্বপূর্ণ। ExpressJS-এ API authentication ও security ব্যবস্থা তৈরি করার জন্য কয়েকটি সাধারণ পদ্ধতি ও লাইব্রেরি ব্যবহার করা হয়। এখানে আমরা JWT (JSON Web Token) এবং Passport.js ব্যবহার করে API authentication এবং ExpressJS-এ বিভিন্ন নিরাপত্তা ব্যবস্থা আলোচনা করব।
১. API Authentication
API authentication সাধারণত ব্যবহারকারীদের একটি সিস্টেমে প্রবেশাধিকার (access) প্রদান করার জন্য ব্যবহৃত হয়। ExpressJS-এ API authentication-এর জন্য প্রধান দুটি পদ্ধতি ব্যবহার করা হয়:
- Session-based Authentication
- Token-based Authentication (যেমন JWT)
১.১. Token-based Authentication (JWT)
JWT (JSON Web Token) হল একটি ওপেন স্ট্যান্ডার্ড যা দুটি সিস্টেমের মধ্যে নিরাপদ তথ্য ট্রান্সফার করতে ব্যবহৃত হয়। ExpressJS-এ JWT ব্যবহার করে API authentication-এর প্রক্রিয়া খুবই জনপ্রিয় এবং নিরাপদ।
১.১.১. JWT ইনস্টল করা
JWT ব্যবহার করতে হলে প্রথমে jsonwebtoken প্যাকেজ ইনস্টল করতে হবে:
npm install jsonwebtoken
১.১.২. JWT এর মাধ্যমে Authentication প্রক্রিয়া
ExpressJS-এ JWT এর মাধ্যমে API authentication এর উদাহরণ:
const express = require('express');
const jwt = require('jsonwebtoken');
const bodyParser = require('body-parser');
const app = express();
const port = 3000;
app.use(bodyParser.json());
// Secret key
const secretKey = 'mysecretkey';
// Dummy user data
const users = [
{ id: 1, username: 'user1', password: 'password1' },
{ id: 2, username: 'user2', password: 'password2' }
];
// লগইন রাউট - JWT টোকেন জেনারেট করা
app.post('/login', (req, res) => {
const { username, password } = req.body;
// ইউজার যাচাই
const user = users.find(u => u.username === username && u.password === password);
if (!user) {
return res.status(401).send('Invalid credentials');
}
// JWT টোকেন তৈরি
const token = jwt.sign({ userId: user.id, username: user.username }, secretKey, { expiresIn: '1h' });
res.json({ token });
});
// Middleware to verify JWT token
function authenticateToken(req, res, next) {
const token = req.headers['authorization'];
if (!token) {
return res.status(401).send('Access Denied');
}
jwt.verify(token, secretKey, (err, user) => {
if (err) {
return res.status(403).send('Invalid token');
}
req.user = user;
next();
});
}
// প্রোটেক্টেড রাউট
app.get('/protected', authenticateToken, (req, res) => {
res.send(`Hello ${req.user.username}, you have access to this route.`);
});
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});
ব্যাখ্যা:
- login route: ব্যবহারকারীর সঠিক username এবং password যাচাই করা হয়। সফল হলে JWT টোকেন তৈরি করা হয় এবং সেটি ক্লায়েন্টকে ফেরত পাঠানো হয়।
- authenticateToken middleware: এটি JWT টোকেন যাচাই করে এবং রিকোয়েস্টের সাথে প্রাপ্ত টোকেনটি সঠিক না হলে অ্যাক্সেস রোধ করে।
- protected route: এই রাউটটি শুধুমাত্র প্রমাণীকৃত ব্যবহারকারীদের জন্য উন্মুক্ত।
২. API Security ব্যবস্থা
API নিরাপত্তা নিশ্চিত করা অত্যন্ত গুরুত্বপূর্ণ, বিশেষ করে যখন আপনি পাবলিক বা সেনসিটিভ ডেটা নিয়ে কাজ করছেন। ExpressJS-এ API security এর জন্য কিছু গুরুত্বপূর্ণ ব্যবস্থা নিতে হবে।
২.১. HTTPS ব্যবহার করা
একটি নিরাপদ API জন্য HTTPS (HyperText Transfer Protocol Secure) ব্যবহার অত্যন্ত গুরুত্বপূর্ণ। এটি ডেটা এনক্রিপ্ট করে পাঠানোর মাধ্যমে মধ্যবর্তী আক্রমণ (man-in-the-middle attacks) রোধ করে।
২.১.১. HTTPS সেটআপ করা
ExpressJS-এ HTTPS চালু করতে ssl certificates প্রয়োজন হয়। এখানে একটি সাধারণ উদাহরণ দেওয়া হলো:
const https = require('https');
const fs = require('fs');
const express = require('express');
const app = express();
const options = {
key: fs.readFileSync('path/to/your/private.key'),
cert: fs.readFileSync('path/to/your/certificate.crt')
};
app.get('/', (req, res) => {
res.send('This is a secure connection');
});
https.createServer(options, app).listen(3000, () => {
console.log('Server is running on https://localhost:3000');
});
২.২. CORS (Cross-Origin Resource Sharing) সুরক্ষা
যখন আপনার API ভিন্ন ডোমেইন থেকে অ্যাক্সেস করা হয়, তখন CORS পলিসি সেট করা গুরুত্বপূর্ণ। CORS হল একটি নিরাপত্তা ফিচার যা ব্রাউজারকে বাধ্য করে শুধুমাত্র অনুমোদিত উৎস থেকে রিকোয়েস্ট গ্রহণ করতে।
২.২.১. CORS সেটআপ করা
CORS হ্যান্ডলিংয়ের জন্য cors প্যাকেজ ব্যবহার করা হয়।
npm install cors
ExpressJS-এ CORS সেটআপ করার উদাহরণ:
const express = require('express');
const cors = require('cors');
const app = express();
app.use(cors({
origin: 'http://example.com' // শুধুমাত্র এই ডোমেইন থেকে রিকোয়েস্ট গ্রহণ করবে
}));
app.get('/', (req, res) => {
res.send('CORS is enabled');
});
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
২.৩. Helmet ব্যবহার করা
Helmet প্যাকেজটি আপনার ExpressJS অ্যাপ্লিকেশনকে বিভিন্ন ধরনের নিরাপত্তা হুমকি থেকে রক্ষা করতে সাহায্য করে, যেমনঃ XSS attacks, clickjacking, content security policy ইত্যাদি।
২.৩.১. Helmet ইনস্টল এবং ব্যবহার
npm install helmet
const express = require('express');
const helmet = require('helmet');
const app = express();
// Helmet middleware ব্যবহার
app.use(helmet());
app.get('/', (req, res) => {
res.send('Helmet is helping to secure this app');
});
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
২.৪. Rate Limiting
Rate limiting হলো একটি নিরাপত্তা ব্যবস্থা যা API-তে খুব বেশি রিকোয়েস্ট আসা রোধ করে, যেটি ডস (DoS) আক্রমণ (Denial of Service attacks) থেকে রক্ষা করে।
২.৪.১. Rate limiting সেটআপ করা
express-rate-limit প্যাকেজ ব্যবহার করে rate limiting সেটআপ করা যেতে পারে।
npm install express-rate-limit
const express = require('express');
const rateLimit = require('express-rate-limit');
const app = express();
// রেট লিমিটার সেটআপ
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 মিনিট
max: 100, // প্রতি 15 মিনিটে 100 রিকোয়েস্ট
message: 'Too many requests, please try again later.'
});
app.use(limiter);
app.get('/', (req, res) => {
res.send('Rate limiting applied');
});
app.listen(3000, () => {
console.log('Server is running on http://localhost:3000');
});
সারাংশ
ExpressJS-এ API authentication এবং security ব্যবস্থা তৈরি করতে JWT, Passport.js, Helmet, CORS, এবং Rate limiting ব্যবহার করা হয়। JWT ব্যবহার করে token-based authentication সিস্টেমটি কার্যকরভাবে বাস্তবায়ন করা সম্ভব, যেখানে ব্যবহারকারীদের সুরক্ষিতভাবে API অ্যাক্সেস দেওয়া হয়। এছাড়া, HTTPS, CORS, Helmet এবং Rate limiting এর মাধ্যমে আপনার API-এর নিরাপত্তা নিশ্চিত করা যায়। ExpressJS এর সাহায্যে এই নিরাপত্তা ব্যবস্থা ব্যবহার করে আপনার অ্যাপ্লিকেশনকে নিরাপদ এবং সুরক্ষিত রাখা সম্ভব।
Read more