গ্রাফকিউএল (GraphQL)-এ Resolvers হল সেই ফাংশনগুলি যা কুয়েরি (Query) এবং মিউটেশন (Mutation) অপারেশনগুলির জন্য ডেটা রিটার্ন বা ডেটা পরিবর্তন করার কাজ করে। Resolvers মূলত ক্লায়েন্টের দ্বারা পাঠানো কুয়েরি বা মিউটেশনের সাথে সম্পর্কিত ডেটা প্রক্রিয়া করে এবং ফলাফল প্রদান করে।
Resolvers কী?
Resolvers হল ফাংশন যা কুয়েরি (Query) বা মিউটেশন (Mutation) এ পাঠানো অনুরোধগুলির জন্য বাস্তব ডেটা প্রক্রিয়া করে এবং ক্লায়েন্টের কাছে সঠিক ডেটা পাঠায়। যখন আপনি একটি কুয়েরি বা মিউটেশন চালান, সার্ভার তা ডিফাইন করা Resolver ফাংশনের মাধ্যমে কার্যকরী করে এবং ফলাফল ক্লায়েন্টে ফেরত পাঠায়।
যেকোনো গ্রাফকিউএল সার্ভারে, স্কিমা অনুযায়ী Resolvers ডিফাইন করা হয়, এবং প্রতিটি স্কিমা টাইপের জন্য একটি Resolver ফাংশন থাকতে হবে।
Query Resolvers তৈরি
Query Resolvers ডেটা পড়ার জন্য ব্যবহৃত হয়। সাধারণত, Query Resolvers ডেটাবেস থেকে ডেটা আনতে বা অন্য কোনো ডেটা সোর্স থেকে তথ্য নিতে ব্যবহৃত হয়।
ধরুন, আমাদের একটি User টাইপ আছে এবং আমরা ইউজারের তথ্য কুয়েরি করতে চাই। এখানে একটি Query Resolver এর উদাহরণ দেখানো হল।
Example: Query Resolver
type Query {
users: [User]
user(id: ID!): User
}
এখন, স্কিমা অনুযায়ী users এবং user কুয়েরি ফিল্ড রয়েছে। এগুলির জন্য আমরা Resolver তৈরি করব:
const resolvers = {
Query: {
// users কুয়েরির জন্য Resolver
users: () => {
return usersData; // usersData হল ডেটাবেস বা স্ট্যাটিক ডেটা
},
// user কুয়েরির জন্য Resolver
user: (parent, args) => {
const { id } = args;
return usersData.find(user => user.id === id); // ইউজারের আইডি দিয়ে খোঁজা
}
}
};
এখানে:
users: একটি Resolver ফাংশন যা সমস্ত ইউজারদের ফেরত আনে।user: একটি Resolver ফাংশন যা ইউজারের আইডি ব্যবহার করে নির্দিষ্ট ইউজারের তথ্য ফেরত আনে।
Mutation Resolvers তৈরি
Mutation Resolvers হল সেই ফাংশন যা ডেটা পরিবর্তন বা তৈরি করতে ব্যবহৃত হয়। সাধারণত, এই Resolvers নতুন ডেটা তৈরি করা, পুরানো ডেটা আপডেট করা বা ডেটা মুছে ফেলার জন্য ব্যবহৃত হয়।
ধরুন, আমাদের একটি createUser মিউটেশন ফিল্ড আছে, যা একটি নতুন ইউজার তৈরি করবে। এর জন্য আমরা একটি Mutation Resolver তৈরি করব।
Example: Mutation Resolver
type Mutation {
createUser(name: String!, email: String!): User
updateUser(id: ID!, name: String!): User
}
এখন, স্কিমা অনুযায়ী createUser এবং updateUser মিউটেশন ফিল্ড রয়েছে। এর জন্য Resolver গুলি হতে পারে:
const resolvers = {
Mutation: {
// createUser মিউটেশনের জন্য Resolver
createUser: (parent, args) => {
const { name, email } = args;
const newUser = { id: Date.now().toString(), name, email }; // নতুন ইউজার তৈরি
usersData.push(newUser); // নতুন ইউজার ডেটা যুক্ত করা
return newUser;
},
// updateUser মিউটেশনের জন্য Resolver
updateUser: (parent, args) => {
const { id, name } = args;
const user = usersData.find(u => u.id === id); // ইউজারের আইডি দিয়ে খোঁজা
if (user) {
user.name = name; // ইউজারের নাম আপডেট করা
return user;
}
return null; // ইউজার না পেলে null ফেরত
}
}
};
এখানে:
createUser: একটি Resolver ফাংশন যা নতুন ইউজার তৈরি করে এবংusersDataঅ্যারেতে যোগ করে।updateUser: একটি Resolver ফাংশন যা একটি ইউজারের নাম আপডেট করে এবং সংশোধিত ইউজার রিটার্ন করে।
Resolver ফাংশনে parent, args, এবং context ব্যবহার
Resolvers ফাংশনে তিনটি গুরুত্বপূর্ণ প্যারামিটার ব্যবহার করা হয়:
- parent: এটি পূর্ববর্তী Resolver এর ফলাফল (যদি থাকে)।
- args: এটি কুয়েরি বা মিউটেশন থেকে প্রাপ্ত আর্গুমেন্টস।
- context: এটি সাধারণত গ্লোবাল স্টেট বা ডেটাবেস কানেকশন যেমন সাধারণ তথ্য ধারণ করে, যা সমস্ত Resolver গুলিতে শেয়ার করা হয়।
Example: Using parent, args, and context
const resolvers = {
Query: {
user: (parent, args, context) => {
// context থেকে ডেটাবেস এক্সেস করা
return context.db.users.find(user => user.id === args.id);
}
},
Mutation: {
createUser: (parent, args, context) => {
const newUser = { id: Date.now().toString(), name: args.name, email: args.email };
context.db.users.push(newUser); // context-এ থাকা ডেটাবেসে নতুন ইউজার যোগ করা
return newUser;
}
}
};
এখানে, context একটি ডেটাবেস কানেকশন বা সাধারণ তথ্য ধারণ করে যা সব রিজলভারে শেয়ার করা হয়।
সারাংশ
Resolvers হল গ্রাফকিউএল-এর সবচেয়ে গুরুত্বপূর্ণ উপাদান, যেগুলি কুয়েরি (Query) এবং মিউটেশন (Mutation) ফিল্ডগুলির জন্য ডেটা প্রক্রিয়া করে এবং ক্লায়েন্টে ফলাফল ফেরত পাঠায়। Query Resolvers ডেটা পড়তে ব্যবহৃত হয়, এবং Mutation Resolvers ডেটা তৈরি, আপডেট বা মুছে ফেলার জন্য ব্যবহৃত হয়। Resolvers ক্লায়েন্টের কুয়েরি বা মিউটেশন অনুযায়ী ডেটা প্রসেস করে এবং ফলাফল প্রদান করে, এবং parent, args, এবং context প্যারামিটারগুলি ব্যবহার করে আরও নির্দিষ্ট কাজ করতে সাহায্য করে।
Read more