গ্রাফকিউএল (GraphQL) অ্যাপ্লিকেশনে Custom Error Messages এবং Exceptions ব্যবস্থাপনা খুবই গুরুত্বপূর্ণ। এটি ডেভেলপারদের ইউজারের জন্য আরো নির্দিষ্ট এবং স্পষ্ট ত্রুটি বার্তা প্রদান করতে সাহায্য করে এবং এক্সেপশন হ্যান্ডলিং প্রক্রিয়াকে উন্নত করে। সাধারণত, গ্রাফকিউএল টুলস আপনাকে error এবং exception হ্যান্ডলিংয়ের জন্য মৌলিক পদ্ধতি দেয়, তবে আপনি custom error messages তৈরি করতে পারেন যা কাস্টমাইজড এবং আরও উপযোগী।
গ্রাফকিউএল সাধারণত Apollo Server বা অন্যান্য গ্রাফকিউএল সার্ভার লাইব্রেরি ব্যবহার করে কাজ করে, যেখানে এক্সেপশন হ্যান্ডলিংয়ের জন্য ডিফল্ট মেকানিজম আছে, কিন্তু আপনি তা কাস্টমাইজ করতে পারেন।
Custom Error Messages তৈরি করা
Custom Error Messages তৈরি করতে, প্রথমে আপনাকে গ্রাফকিউএল কুয়েরির মধ্যে কোনো ত্রুটি ঘটলে তা সঠিকভাবে ধরা এবং পাঠানোর জন্য কাস্টম এক্সেপশন তৈরি করতে হবে।
Error Class তৈরি করা
আপনি একটি কাস্টম Error class তৈরি করতে পারেন যা ব্যবহারকারীর জন্য আরও স্পষ্ট এবং অর্থপূর্ণ ত্রুটি বার্তা পাঠাবে।
class CustomError extends Error {
constructor(message, code = 400, details = null) {
super(message);
this.code = code;
this.details = details;
this.name = this.constructor.name;
}
}
এখানে:
message: ত্রুটির বার্তা যা ব্যবহারকারীকে দেখানো হবে।code: HTTP স্ট্যাটাস কোড, যেমন 400 (Bad Request), 401 (Unauthorized), 500 (Internal Server Error) ইত্যাদি।details: অতিরিক্ত বিস্তারিত তথ্য, যদি প্রয়োজন হয়, যেমন ত্রুটির কারণ বা ঠিক কী ভুল হয়েছে।
কাস্টম ত্রুটি ব্যবহার করা
এখন, আপনি এই কাস্টম Error ক্লাসটি ব্যবহার করতে পারেন গ্রাফকিউএল রেজোলভারে কাস্টম ত্রুটি তৈরি করার জন্য। যেমন:
const { ApolloError } = require('apollo-server');
// Custom Error using ApolloError
const resolvers = {
Query: {
getUser: (parent, args, context) => {
if (!args.id) {
throw new ApolloError('User ID is required', 'USER_ID_MISSING');
}
const user = getUserFromDatabase(args.id); // Assume this function checks the DB
if (!user) {
throw new ApolloError('User not found', 'USER_NOT_FOUND');
}
return user;
}
}
};
এখানে:
ApolloError: Apollo Server এর একটি বিল্ট-ইন ক্লাস যা কাস্টম ত্রুটি তৈরি করতে সাহায্য করে। এতে আপনি message এবং code সেট করতে পারেন।USER_ID_MISSINGএবংUSER_NOT_FOUND: কাস্টম ত্রুটি কোড, যা গ্রাফকিউএল রেসপন্সে ত্রুটির ধরন চিহ্নিত করে।
Custom Error Message Format
এখন, কাস্টম ত্রুটির বার্তা কিভাবে ফরম্যাট হবে তা দেখতে হবে। Apollo Server স্বয়ংক্রিয়ভাবে message, code, এবং অন্যান্য ত্রুটি সম্পর্কিত তথ্য গ্রাফকিউএল রেসপন্সে যুক্ত করবে।
Response Example:
{
"errors": [
{
"message": "User not found",
"extensions": {
"code": "USER_NOT_FOUND",
"exception": {
"stacktrace": [...]
}
}
}
]
}
এখানে, আপনি ত্রুটির বার্তা এবং এর কোড দেখতে পাবেন, এবং এই তথ্যটি আপনি API-তে ফেরত দিতে পারবেন।
Exception Handling in GraphQL
গ্রাফকিউএল কুয়েরি বা মিউটেশনে যে কোন সমস্যা ঘটলে, আপনি সাধারণত try-catch ব্লক ব্যবহার করে এক্সেপশন হ্যান্ডলিং করতে পারেন।
try-catch ব্লক ব্যবহার করা
const resolvers = {
Query: {
getUser: async (parent, args, context) => {
try {
if (!args.id) {
throw new CustomError('User ID is required');
}
const user = await getUserFromDatabase(args.id);
if (!user) {
throw new CustomError('User not found', 404);
}
return user;
} catch (error) {
// Custom Error handling
if (error instanceof CustomError) {
throw new ApolloError(error.message, error.code, { details: error.details });
}
throw new ApolloError('Internal Server Error', 'INTERNAL_SERVER_ERROR');
}
}
}
};
এখানে:
- try-catch ব্লকটি ব্যবহার করে আপনি ত্রুটিগুলি ধরছেন এবং কাস্টম ApolloError তৈরি করছেন।
- CustomError ইন্সট্যান্স চেক করে, কাস্টম বার্তা এবং কোড প্রেরণ করা হচ্ছে, অন্যথায় ডিফল্ট "Internal Server Error" বার্তা পাঠানো হচ্ছে।
কাস্টম এক্সেপশন ধরা
আপনি যেকোনো কাস্টম এক্সেপশন তৈরি করতে পারেন, যেমন একটি DatabaseError যা ডেটাবেস সংক্রান্ত ত্রুটির জন্য ব্যবহৃত হতে পারে:
class DatabaseError extends ApolloError {
constructor(message, code = 'DATABASE_ERROR') {
super(message, code);
this.name = 'DatabaseError';
}
}
এটি ApolloError এর একটি এক্সটেনশন হতে পারে, যা ডেটাবেস সংক্রান্ত সমস্যাগুলির জন্য কাস্টম এক্সেপশন তৈরি করতে ব্যবহৃত হবে।
Best Practices for GraphQL Error Handling
- Error Codes: নিশ্চিত করুন যে আপনি কাস্টম ত্রুটির জন্য একটি নির্দিষ্ট কোড ব্যবহার করছেন, যাতে ক্লায়েন্টের জন্য ত্রুটির ধরন চিহ্নিত করা সহজ হয়। যেমন
USER_NOT_FOUND,INVALID_INPUT,INTERNAL_SERVER_ERRORইত্যাদি। - Error Extensions:
extensionsঅংশে অতিরিক্ত ত্রুটি তথ্য রাখতে পারেন, যেমন সঠিক ত্রুটি কোড এবং স্ট্যাকট্রেস। তবে, প্রোডাকশনে স্ট্যাকট্রেস কখনো প্রকাশ করবেন না। - Descriptive Messages: ত্রুটি বার্তাগুলিকে বোধগম্য এবং পরিষ্কার রাখুন। ভেরি সুনির্দিষ্ট বার্তা যেমন
User with the provided ID does not existআরো সহায়ক। - Custom Error Classes: আপনি যদি একাধিক প্রকারের ত্রুটি হ্যান্ডেল করতে চান, তবে Custom Error Classes তৈরি করুন। যেমন, DatabaseError, ValidationError ইত্যাদি।
- ApolloError ব্যবহার করা: গ্রাফকিউএল API-তে ApolloError ক্লাস ব্যবহারের মাধ্যমে ত্রুটি পরিচালনা সহজ করা যায়, বিশেষত যখন আপনি GraphQL API-তে কাস্টম কোড এবং বার্তা চান।
- Log Errors: প্রতিটি ত্রুটির ক্ষেত্রে লগ রাখা খুবই গুরুত্বপূর্ণ, বিশেষত যখন ডিবাগিং বা ট্রাবলশুটিং করতে হয়।
সারাংশ
গ্রাফকিউএল ত্রুটি পরিচালনা এবং কাস্টম এক্সেপশন তৈরি করার জন্য অনেক নমনীয়তা প্রদান করে। আপনি CustomError ক্লাস এবং try-catch ব্লক ব্যবহার করে স্পষ্ট এবং উপযোগী ত্রুটি বার্তা তৈরি করতে পারেন। ApolloError ব্যবহার করা এবং কাস্টম ত্রুটির কোড, বার্তা ও অন্যান্য তথ্য extensions-এ প্রদান করা গ্রাফকিউএল API ডেভেলপমেন্টে ভাল অভ্যাস।
Read more