Next.js-এ API Routes ব্যবহারের মাধ্যমে আপনি সার্ভার সাইডে বিভিন্ন API তৈরি করতে পারেন, যা আপনার অ্যাপ্লিকেশনের ক্লায়েন্ট সাইড থেকে ডেটা ফেচ বা প্রক্রিয়াকরণ করতে সহায়তা করে। Next.js এ Middleware যোগ করার মাধ্যমে আপনি API রিকোয়েস্ট প্রক্রিয়াকরণের আগে কিছু নির্দিষ্ট কাজ যেমন অটেনটিকেশন, অথরাইজেশন, লগিং, বা অন্যান্য সিকিউরিটি চেক করতে পারেন।
Middleware কী?
Middleware হল এমন একটি ফাংশন যা রিকোয়েস্ট এবং রেসপন্সের মধ্যবর্তী অংশে চলে, অর্থাৎ যখন কোনো রিকোয়েস্ট সার্ভারে আসে এবং তার প্রক্রিয়াকরণ শুরু হয়, তখন মিডলওয়্যার কার্যকর হয়। এটি বিভিন্ন কাজ যেমন, ইউজার অটেনটিকেশন যাচাই, লগিং, ডেটা ভ্যালিডেশন বা রিকোয়েস্ট মডিফিকেশন ইত্যাদি করতে পারে।
Next.js এর API Routes এর সাথে Middleware ব্যবহার করার ফলে আপনি রিকোয়েস্ট হ্যান্ডলারগুলির আগেও কাস্টম লজিক যোগ করতে পারেন।
১. Next.js API Route তৈরি করা
প্রথমে, আপনি একটি API Route তৈরি করুন। এটি pages/api/ ফোল্ডারের মধ্যে হতে হবে। উদাহরণস্বরূপ, একটি সিম্পল API রাউট তৈরি করা যাক।
উদাহরণ:
// pages/api/hello.js
export default function handler(req, res) {
res.status(200).json({ message: 'Hello, Next.js!' })
}
এই API রাউটটি খুব সহজ এবং সরাসরি ক্লায়েন্টের কাছে একটি JSON রেসপন্স পাঠায়।
২. Middleware যোগ করা
Next.js এ API Routes এর জন্য Middleware যোগ করার জন্য সাধারণত আপনি একটি নতুন ফোল্ডার বা ফাইল তৈরি করে সেখানে কাস্টম মিডলওয়্যার লজিক যোগ করতে পারেন। Middleware কাস্টম লজিকের জন্য একটি ফাংশন হবে, যা API হ্যান্ডলার থেকে আগে চলে এবং কিছু নির্দিষ্ট শর্ত পূরণ না হলে রিকোয়েস্ট বন্ধ বা অস্বীকার করতে পারে।
উদাহরণ:
ধরা যাক, আমরা একটি মিডলওয়্যার তৈরি করতে চাই যা চেক করবে ব্যবহারকারী একটি নির্দিষ্ট API কিও প্রেরণ করেছে কিনা।
// lib/middleware/checkApiKey.js
export function checkApiKey(req, res, next) {
const apiKey = req.headers['x-api-key']
if (apiKey !== 'my-secret-api-key') {
return res.status(403).json({ message: 'Forbidden: Invalid API Key' })
}
next()
}
এই মিডলওয়্যারটি x-api-key হেডারে প্রেরিত API কির মান যাচাই করবে এবং যদি তা সঠিক না হয়, তবে এটি 403 স্ট্যাটাস কোড সহ একটি ত্রুটি মেসেজ ফিরিয়ে দেবে।
৩. API Route এ Middleware ব্যবহার করা
এখন, আপনি আপনার API রাউটে মিডলওয়্যার যোগ করতে পারবেন। Next.js API Routes এ Middleware ব্যবহার করার জন্য handler ফাংশনের আগে মিডলওয়্যার ফাংশনটি কল করতে হবে।
উদাহরণ:
// pages/api/hello.js
import { checkApiKey } from '../../lib/middleware/checkApiKey'
export default function handler(req, res) {
// Middleware কল করুন
checkApiKey(req, res, () => {
// যদি API কিও ঠিক থাকে, তাহলে মূল হ্যান্ডলার চালানো হবে
res.status(200).json({ message: 'Hello, Next.js with Middleware!' })
})
}
এখানে, checkApiKey মিডলওয়্যার ফাংশনটি req, res, এবং একটি next ফাংশনকে আর্গুমেন্ট হিসেবে নেবে। যদি API কিও ঠিক থাকে, তবে next() কল করা হবে এবং API হ্যান্ডলারটি রান করবে।
৪. Multiple Middleware চেইন করা
Next.js API Routes এ একাধিক মিডলওয়্যার চেইন করতে চাইলে, আপনি একাধিক মিডলওয়্যার ফাংশনকে পরপর কল করতে পারেন। যেমন, প্রথমে অটেনটিকেশন চেক, তারপর লগিং এবং তারপর আসল API রেসপন্স।
উদাহরণ:
// lib/middleware/authenticate.js
export function authenticate(req, res, next) {
const token = req.headers['authorization']
if (!token || token !== 'Bearer my-secret-token') {
return res.status(401).json({ message: 'Unauthorized' })
}
next()
}
// lib/middleware/logRequest.js
export function logRequest(req, res, next) {
console.log(`Request to: ${req.url}`)
next()
}
// pages/api/hello.js
import { authenticate } from '../../lib/middleware/authenticate'
import { logRequest } from '../../lib/middleware/logRequest'
export default function handler(req, res) {
logRequest(req, res, () => {
authenticate(req, res, () => {
res.status(200).json({ message: 'Hello, Next.js with multiple Middleware!' })
})
})
}
এখানে, প্রথমে logRequest মিডলওয়্যার কল করা হবে, তারপর authenticate মিডলওয়্যার। যদি উভয় মিডলওয়্যার সফল হয়, তবেই মূল API রেসপন্স প্রদান করা হবে।
৫. Custom Middleware ব্যবহার করে কাস্টম রিকোয়েস্ট হ্যান্ডলিং
Next.js এ আপনি আরও জটিল মিডলওয়্যার তৈরি করতে পারেন যা আপনার API রিকোয়েস্টের আগে আরো কাস্টম লজিক প্রক্রিয়াকরণ করবে। যেমন, আপনি ডেটাবেস চেক, রেট লিমিটিং, কুকি চেক ইত্যাদি কাজ করতে পারেন।
উদাহরণ:
// lib/middleware/ratelimit.js
let requestCount = 0
const RATE_LIMIT = 100 // 100 requests per minute
export function rateLimit(req, res, next) {
requestCount++
if (requestCount > RATE_LIMIT) {
return res.status(429).json({ message: 'Too many requests, please try again later.' })
}
next()
}
// pages/api/hello.js
import { rateLimit } from '../../lib/middleware/ratelimit'
export default function handler(req, res) {
rateLimit(req, res, () => {
res.status(200).json({ message: 'Request successful!' })
})
}
এখানে, rateLimit মিডলওয়্যারটি রিকোয়েস্টের সংখ্যা ট্র্যাক করে এবং একটি নির্দিষ্ট সীমা পেরিয়ে গেলে রিকোয়েস্ট রিজেক্ট করে।
Next.js API Routes এর সাথে Middleware যুক্ত করে আপনি সার্ভার সাইড রিকোয়েস্ট প্রসেসিংয়ে কাস্টম লজিক যোগ করতে পারেন, যেমন অটেনটিকেশন, অথরাইজেশন, লগিং, রেট লিমিটিং ইত্যাদি। এইভাবে, আপনি আপনার অ্যাপ্লিকেশনটিকে আরও সুরক্ষিত এবং অপটিমাইজড করতে পারেন, যা ব্যবহারকারীর জন্য ভালো অভিজ্ঞতা প্রদান করবে।
Read more