প্রথমে আমরা HTTP স্ট্যাটাস কোডগুলি ডিফল্ট সংখ্যা হিসেবে এবং পরে কনস্ট্যান্টস ব্যবহার করে দেখাবো। এর মাধ্যমে আপনি দুটি পদ্ধতির মধ্যে পার্থক্য বুঝতে পারবেন এবং কনস্ট্যান্ট ব্যবহার করার সুবিধাগুলি দেখতে পারবেন।
১. ডিফল্ট সংখ্যা (Magic Numbers) ব্যবহার করা
ধরা যাক, আপনি সরাসরি HTTP স্ট্যাটাস কোড গুলো ব্যবহার করছেন কোডে। অর্থাৎ কোডের মধ্যে 200, 404 বা 500 এর মতো সংখ্যা ব্যবহার করা হচ্ছে।
// controllers/UserController.js
const UserController = {
getUserById: async (req, res, next) => {
try {
// Assume UserService.getUserById() returns user object or null
const user = await UserService.getUserById(req.params.id);
if (!user) {
return res.status(404).json({ message: "User not found" }); // 404 not found
}
return res.status(200).json(user); // 200 OK
} catch (error) {
return res.status(500).json({ message: "Internal Server Error" }); // 500 Internal Server Error
}
},
};
module.exports = UserController;
সমস্যা (Magic Numbers):
- Reusability: এখানে
404,200,500ইত্যাদি কোড বার বার ব্যবহৃত হচ্ছে। যদি কোনো কোড পরিবর্তন করতে হয়, প্রতিটি স্থানে গিয়ে পরিবর্তন করতে হবে। - Maintainability: কোডের মধ্যে সরাসরি সংখ্যাগুলি দেখলে, অনেক সময় সেটা বুঝতে কষ্ট হতে পারে যে প্রতিটি সংখ্যা কোন স্ট্যাটাস কোডের সাথে সম্পর্কিত। উদাহরণস্বরূপ,
200মানেOKএবং404মানেNot Found—এটা মনে রাখা একটু কঠিন হতে পারে। - Readability: কোডে
200,500এর মতো সংখ্যা দেখলে তা সাধারণ পাঠকের কাছে অপ্রকাশিত হতে পারে।
২. কনস্ট্যান্টস ব্যবহার করা
এখন আমরা HTTP_STATUS_CODES কনস্ট্যান্ট ফাইল তৈরি করবো এবং সেগুলো ব্যবহার করব।
কনস্ট্যান্ট ফাইল তৈরি করা:
// constants/httpStatusCodes.js
const HTTP_STATUS_CODES= {
OK: 200,
CREATED: 201,
ACCEPTED: 202,
NO_CONTENT: 204,
BAD_REQUEST: 400,
UNAUTHORIZED: 401,
FORBIDDEN: 403,
NOT_FOUND: 404,
METHOD_NOT_ALLOWED: 405,
NOT_ACCEPTABLE: 406,
CONFLICT: 409,
GONE: 410,
UNSUPPORTED_MEDIA_TYPE: 415,
UNPROCESSABLE_ENTITY: 422,
INTERNAL_SERVER_ERROR: 500,
NOT_IMPLEMENTED: 501,
BAD_GATEWAY: 502,
SERVICE_UNAVAILABLE: 503,
GATEWAY_TIMEOUT: 504,
};
module.exports = HTTP_STATUS_CODES;কনস্ট্যান্ট ব্যবহার করে কোড লেখা:
// controllers/UserController.js
const HTTP_STATUS_CODES = require("../constants/httpStatusCodes");
const UserController = {
getUserById: async (req, res, next) => {
try {
// Assume UserService.getUserById() returns user object or null
const user = await UserService.getUserById(req.params.id);
if (!user) {
return res.status(HTTP_STATUS_CODES.NOT_FOUND).json({
message: "User not found",
});
}
return res.status(HTTP_STATUS_CODES.OK).json(user);
} catch (error) {
return res.status(HTTP_STATUS_CODES.INTERNAL_SERVER_ERROR).json({
message: "Internal Server Error",
});
}
},
};
module.exports = UserController;
কনস্ট্যান্ট ব্যবহার করার সুবিধা
- Readability:
- কোডে
HTTP_STATUS_CODES.OK,HTTP_STATUS_CODES.NOT_FOUNDব্যবহার করার ফলে কোডের মধ্যে স্ট্যাটাস কোডের মান বোঝা অনেক সহজ হয়। কোন কোডটি কি নির্দেশ করে তা স্পষ্টভাবে বুঝতে পারা যায়। - উদাহরণস্বরূপ,
HTTP_STATUS_CODES.OKদেখে আপনি বুঝবেন যে এটি সফল রেসপন্স।HTTP_STATUS_CODES.NOT_FOUNDদেখলে বুঝবেন এটি ব্যবহারকারী না পাওয়ার রেসপন্স।
- কোডে
- Maintainability:
- আপনি যদি একটি কোড পরিবর্তন করতে চান, যেমন
200পরিবর্তন করে অন্য কোনো কোড দিতে চান, তাহলে আপনি কেবল এক জায়গায় (httpStatusCodes.js) পরিবর্তন করবেন। এতে সব জায়গায় আপনার পরিবর্তনটি প্রভাব ফেলবে। - উদাহরণস্বরূপ, যদি আপনার প্রজেক্টে আপনি
200এর বদলে201স্ট্যাটাস কোড ব্যবহার করতে চান, তাহলে শুধুhttpStatusCodes.jsফাইলটি আপডেট করলে, কোডের সব জায়গায় পরিবর্তন হবে।
- আপনি যদি একটি কোড পরিবর্তন করতে চান, যেমন
- Reusability:
HTTP_STATUS_CODESকনস্ট্যান্ট ফাইলটি অন্য কোথাও ব্যবহার করতে চান, তাহলে শুধুrequireকরে ব্যবহার করতে পারবেন। আপনি যখনই নতুন স্ট্যাটাস কোড যোগ করতে চান, সহজেই তা কনস্ট্যান্ট ফাইলে করতে পারবেন।
- Consistency:
- কনস্ট্যান্ট ব্যবহার করলে আপনার কোডে সব জায়গায় এক ধরনের কোড ব্যবহার হয়, যা কোডের মধ্যে consistency আনে এবং error হওয়ার সম্ভাবনা কমায়।
সারাংশ
Magic Numbers (ডিফল্ট সংখ্যা):
- কোডে সরাসরি সংখ্যা ব্যবহার করা হয়।
- কিছু ক্ষেত্রে রিডেবিলিটি কম হতে পারে।
- কোনো পরিবর্তন করার সময় প্রতিটি স্থানে গিয়ে কোড আপডেট করতে হয়।
HTTP Status Code Constants:
- কনস্ট্যান্ট ফাইলের মাধ্যমে স্ট্যাটাস কোড গুলি ব্যবহৃত হয়।
- কোডের রিডেবিলিটি বৃদ্ধি পায়।
- কোনো পরিবর্তন করলে কেবল এক জায়গায় পরিবর্তন করতে হয় এবং কোডের সব স্থানে এটি প্রভাবিত হয়।
- কোডটি আরও maintainable এবং scalable হয়।
এইভাবে আপনি দেখতে পাচ্ছেন, কনস্ট্যান্ট ব্যবহার করা কোডের রিডেবিলিটি, maintainability, এবং scalability বৃদ্ধি করে, যা প্রজেক্ট বড় হওয়ার সাথে সাথে অনেক সহায়ক হবে।