API Versioning এবং Pagination হলো আধুনিক ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টে গুরুত্বপূর্ণ বৈশিষ্ট্য। API Versioning ব্যবহারকারীদের নতুন API সংস্করণ গ্রহণের সুবিধা দেয়, যখন Pagination API রেসপন্সের আকার সীমিত করে এবং কার্যকারিতা বাড়ায়। KoaJS-এ এই দুটি ফিচার সহজে ইমপ্লিমেন্ট করা যায়।
এই টিউটোরিয়ালে, আমরা দেখব কিভাবে API Versioning এবং Pagination KoaJS-এ ইমপ্লিমেন্ট করা যায়।
১. API Versioning
API Versioning হল একটি পদ্ধতি যা আপনাকে একই API রাউটের বিভিন্ন সংস্করণ পরিচালনা করতে সাহায্য করে। যখন আপনার API-তে নতুন ফিচার বা পরিবর্তন আসে, তখন আপনি API-র সংস্করণ পরিবর্তন করতে পারেন। এতে করে পুরানো সংস্করণ ব্যবহারকারী এবং নতুন সংস্করণ ব্যবহারকারীরা একই API ব্যবহার করতে পারেন।
১.১. API Versioning কিভাবে কাজ করে?
API Versioning সাধারণত URL পাথ, হেডার অথবা কুয়েরি প্যারামিটার দ্বারা করা হয়। সবচেয়ে জনপ্রিয় পদ্ধতিটি হলো URL পাথ দিয়ে API সংস্করণ পরিচালনা করা।
১.২. API Versioning এর জন্য KoaJS রাউট কনফিগারেশন
এখানে আমরা দেখব কিভাবে API Versioning পাথ দিয়ে KoaJS-এ পরিচালনা করা যায়।
const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();
// V1 API রাউট
const v1Router = new Router();
v1Router.get('/data', async (ctx) => {
ctx.body = {
version: 'v1',
data: 'This is version 1 of the API',
};
});
// V2 API রাউট
const v2Router = new Router();
v2Router.get('/data', async (ctx) => {
ctx.body = {
version: 'v2',
data: 'This is version 2 of the API with more data!',
};
});
// API Versioning রাউট পাথ কনফিগার করা
router.use('/v1', v1Router.routes());
router.use('/v2', v2Router.routes());
app.use(router.routes()).use(router.allowedMethods());
// অ্যাপ চালু করা
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
এখানে:
/v1/dataরাউটটি API version 1 এর জন্য তৈরি করা হয়েছে।/v2/dataরাউটটি API version 2 এর জন্য তৈরি করা হয়েছে।- আপনি v1 এবং v2 রাউটের মাধ্যমে আলাদা API সংস্করণ পরিচালনা করতে পারবেন।
URL Versioning হল সহজ এবং সাধারণ পদ্ধতি, তবে আপনি Header-based versioning বা Query Parameter-based versioning ব্যবহারও করতে পারেন।
২. Pagination
Pagination হল একটি পদ্ধতি যা লম্বা ডেটা লিস্ট বা সার্ভারের রিসোর্স লোড কমানোর জন্য ব্যবহার করা হয়। সাধারণত, Pagination API রেসপন্সের মধ্যে limit এবং offset প্যারামিটার ব্যবহার করে ডেটা পেজিং করা হয়। এতে API রেসপন্সে প্রদর্শিত ডেটার সংখ্যা সীমাবদ্ধ থাকে এবং প্রোসেসিং দ্রুত হয়।
২.১. Pagination কনফিগারেশন
এখানে আমরা দেখব কিভাবে Pagination কনফিগার করা যায় KoaJS-এ।
const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();
// ডামি ডেটা
const items = Array.from({ length: 100 }, (_, index) => ({ id: index + 1, name: `Item ${index + 1}` }));
// Pagination রাউট
router.get('/items', async (ctx) => {
// Query প্যারামিটার থেকে limit এবং page নিয়ে আসা
const page = parseInt(ctx.query.page) || 1;
const limit = parseInt(ctx.query.limit) || 10;
const offset = (page - 1) * limit;
// Paginate ডেটা
const paginatedItems = items.slice(offset, offset + limit);
// Pagination ইনফরমেশন সহ রেসপন্স
ctx.body = {
page,
limit,
totalItems: items.length,
totalPages: Math.ceil(items.length / limit),
items: paginatedItems,
};
});
app.use(router.routes()).use(router.allowedMethods());
// অ্যাপ চালু করা
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
এখানে:
limitএবংpageকুয়েরি প্যারামিটার ব্যবহার করা হচ্ছে ডেটা পেজিংয়ের জন্য।items.slice(offset, offset + limit)পদ্ধতি ব্যবহার করে নির্দিষ্ট সংখ্যক আইটেম রিটার্ন করা হচ্ছে।- Pagination সম্পর্কিত তথ্য যেমন
page,limit,totalItems, এবংtotalPagesরেসপন্সে দেওয়া হচ্ছে।
Pagination Example:
- Request:
GET /items?page=2&limit=10 - Response:
{
"page": 2,
"limit": 10,
"totalItems": 100,
"totalPages": 10,
"items": [
{ "id": 11, "name": "Item 11" },
{ "id": 12, "name": "Item 12" },
...
{ "id": 20, "name": "Item 20" }
]
}
এখানে, page=2 এবং limit=10 ব্যবহার করে দ্বিতীয় পেজের ১০টি আইটেম রিটার্ন করা হচ্ছে।
৩. API Versioning এবং Pagination একসাথে ব্যবহার
আপনি API Versioning এবং Pagination একসাথে ব্যবহার করতে পারেন। নিচে একটি উদাহরণ দেওয়া হলো যেখানে দুটি সংস্করণের জন্য Pagination যোগ করা হয়েছে:
const Koa = require('koa');
const Router = require('koa-router');
const app = new Koa();
const router = new Router();
// ডামি ডেটা
const items = Array.from({ length: 100 }, (_, index) => ({ id: index + 1, name: `Item ${index + 1}` }));
// V1 Pagination রাউট
const v1Router = new Router();
v1Router.get('/items', async (ctx) => {
const page = parseInt(ctx.query.page) || 1;
const limit = parseInt(ctx.query.limit) || 10;
const offset = (page - 1) * limit;
const paginatedItems = items.slice(offset, offset + limit);
ctx.body = {
version: 'v1',
page,
limit,
totalItems: items.length,
totalPages: Math.ceil(items.length / limit),
items: paginatedItems,
};
});
// V2 Pagination রাউট
const v2Router = new Router();
v2Router.get('/items', async (ctx) => {
const page = parseInt(ctx.query.page) || 1;
const limit = parseInt(ctx.query.limit) || 10;
const offset = (page - 1) * limit;
const paginatedItems = items.slice(offset, offset + limit);
ctx.body = {
version: 'v2',
page,
limit,
totalItems: items.length,
totalPages: Math.ceil(items.length / limit),
items: paginatedItems,
additionalInfo: 'This is version 2 with added info',
};
});
// Versioning রাউট কনফিগারেশন
router.use('/v1', v1Router.routes());
router.use('/v2', v2Router.routes());
app.use(router.routes()).use(router.allowedMethods());
// অ্যাপ চালু করা
app.listen(3000, () => {
console.log('Server running on http://localhost:3000');
});
এখানে:
/v1/itemsএবং/v2/itemsদুইটি আলাদা API সংস্করণ তৈরি করা হয়েছে।v2সংস্করণে আরও অতিরিক্ত তথ্য যোগ করা হয়েছে।
সারাংশ
KoaJS-এ API Versioning এবং Pagination অত্যন্ত গুরুত্বপূর্ণ ফিচার যা আপনার API এর উন্নতি এবং কার্যকারিতা নিশ্চিত করতে সাহায্য করে। API Versioning দিয়ে আপনি বিভিন্ন API সংস্করণ পরিচালনা করতে পারেন, এবং Pagination ব্যবহার করে আপনি ডেটার আকার সীমাবদ্ধ রাখতে পারেন। এই দুটি ফিচার একসাথে ব্যবহার করে আপনি আপনার API এবং ডেটা রেসপন্সকে আরও কার্যকরী এবং নিরাপদ করতে পারবেন।
Read more