গ্রাফকিউএল (GraphQL)-এ Nested Resolvers এবং Parent-Child Relationship দুটি অত্যন্ত গুরুত্বপূর্ণ ধারণা, যা ডেটার মধ্যে সম্পর্ক তৈরি এবং সেই সম্পর্কের ভিত্তিতে ডেটা উদ্ধার করার প্রক্রিয়াকে সহজ করে তোলে। এগুলির মাধ্যমে আপনি একটি Parent Object থেকে সম্পর্কিত Child Object গুলি বের করে আনতে পারেন, এমনকি সেগুলি বিভিন্ন স্তরের মধ্যে গঠন করা থাকলেও।
Nested Resolvers কী?
Nested Resolvers হল একাধিক resolver এর মধ্যে সম্পর্ক স্থাপন, যেখানে এক resolver (parent) অন্য resolver (child) এর মাধ্যমে ডেটা ফেরত আনতে সহায়তা করে। এটি একটি parent-child relationship তৈরি করে, যেখানে একটি অবজেক্টের ডেটার ভিত্তিতে সম্পর্কিত অন্যান্য অবজেক্টের ডেটা ফেরত আসে।
ধরা যাক, আপনার কাছে একটি User টাইপ রয়েছে, যার মধ্যে posts রয়েছে, এবং প্রতিটি Post এর মধ্যে comments রয়েছে। এই সম্পর্ককে Nested Resolvers এর মাধ্যমে তৈরি করা হয়।
Nested Resolvers এর উদাহরণ
স্কিমা উদাহরণ
ধরা যাক, আমাদের একটি User টাইপ, Post টাইপ এবং Comment টাইপ রয়েছে।
type User {
id: ID!
name: String!
posts: [Post]
}
type Post {
id: ID!
title: String!
content: String!
comments: [Comment]
}
type Comment {
id: ID!
text: String!
}
এখানে:
Userটাইপেpostsফিল্ড রয়েছে, যাPostটাইপের একটি লিস্ট।Postটাইপেcommentsফিল্ড রয়েছে, যাCommentটাইপের একটি লিস্ট।
Resolvers উদাহরণ
এখন, আমরা একটি resolver তৈরি করব যা nested ভাবে ডেটা ফেরত আনবে। উদাহরণস্বরূপ, প্রথমে আমরা User এর তথ্য পেতে চাই, তারপর সেই User এর posts এবং প্রতিটি Post এর comments পেতে চাই।
const resolvers = {
Query: {
user: (parent, args, context, info) => {
// ইউজার ডেটা ফেরত
return {
id: "1",
name: "John Doe"
};
}
},
User: {
posts: (parent, args, context, info) => {
// User এর posts ফিরিয়ে দেয়া হচ্ছে, এখানে parent হল User
return [
{ id: "1", title: "My first post", content: "This is content of first post" },
{ id: "2", title: "Another post", content: "Content of another post" }
];
}
},
Post: {
comments: (parent, args, context, info) => {
// Post এর comments ফিরিয়ে দেয়া হচ্ছে, এখানে parent হল Post
return [
{ id: "1", text: "Great post!" },
{ id: "2", text: "Very informative." }
];
}
}
};
এখানে:
Query.user: ইউজারের তথ্য প্রদান করছে।User.posts:Userঅবজেক্টের মধ্যে থাকাpostsগুলি ফেরত আনছে।Post.comments: প্রতিটিPostএর মধ্যে থাকাcommentsফেরত আনছে।
কুয়েরি উদাহরণ
এখন, ক্লায়েন্টের পক্ষ থেকে একটি কুয়েরি দেখতে হবে, যাতে User এর posts এবং সেই Post এর comments দেখতে পাওয়া যায়:
query {
user(id: "1") {
name
posts {
title
comments {
text
}
}
}
}
ফলাফল:
{
"data": {
"user": {
"name": "John Doe",
"posts": [
{
"title": "My first post",
"comments": [
{ "text": "Great post!" },
{ "text": "Very informative." }
]
},
{
"title": "Another post",
"comments": [
{ "text": "Nice read!" }
]
}
]
}
}
}
এখানে:
- প্রথমে
Userএরnameপেয়েছি। - তারপর
Userএরpostsপেয়েছি, এবং প্রতিটিPostএরcommentsপেয়েছি।
Parent-Child Relationship
Parent-Child Relationship হল গ্রাফকিউএলে এমন একটি সম্পর্ক, যেখানে একটি টাইপ (Parent) অন্য একটি টাইপ (Child) এর সাথে সম্পর্কিত থাকে। Nested Resolvers এর মাধ্যমে এই সম্পর্ক বাস্তবায়িত করা হয়।
যেমন, উপরের উদাহরণে User হল Parent টাইপ, এবং Post ও Comment গুলি Child টাইপ। এখানে, User এর posts ফিল্ডের মাধ্যমে Post টাইপের অবজেক্ট পাওয়া যায়, এবং Post এর comments ফিল্ডের মাধ্যমে Comment টাইপের অবজেক্ট পাওয়া যায়।
Parent-Child Relationship-এর মাধ্যমে Resolver কাজের পদ্ধতি
- Parent Object থেকে ডেটা নেওয়া হয়।
- সেই ডেটার ভিত্তিতে Child Object গুলি বের করা হয়।
- Child Object গুলি আবার ডেটার মধ্যে লিঙ্কিং করা হয় এবং সেই অনুযায়ী সমস্ত সম্পর্কিত ডেটা ফেরত আসে।
এই প্রক্রিয়াটি nested resolvers হিসেবে পরিচিত।
Resolvers এর মধ্যে Parent-Child Relationship এর গুরুত্ব
- এফিসিয়েন্ট ডেটা রিট্রিভাল: Nested Resolvers ডেটার মধ্যে সম্পর্ক সহজে সংজ্ঞায়িত করে এবং ডেটা একসাথে ফিরিয়ে আনে, যার ফলে API এর কর্মক্ষমতা বাড়ে।
- নমনীয়তা: আপনি সহজেই ডেটার মধ্যে বিভিন্ন স্তরের সম্পর্ক তৈরি করতে পারেন। উদাহরণস্বরূপ,
UserএরpostsএবংPostএরcommentsএর মধ্যে সম্পর্ক স্থাপন করে সহজে প্রয়োজনীয় ডেটা নিয়ে আসা যায়। - স্বতন্ত্র রেজোলভার: প্রতিটি রেজোলভারকে একটি নির্দিষ্ট ফিল্ডের ডেটা অ্যাক্সেস করতে নিয়ন্ত্রণ দেয়া হয়, যা ডেটা প্রক্রিয়াকরণকে পরিষ্কার এবং সহজ করে তোলে।
সারাংশ
Nested Resolvers এবং Parent-Child Relationship গ্রাফকিউএল-এ ডেটার মধ্যে সম্পর্ক স্থাপন এবং সম্পর্কিত ডেটা একত্রে প্রাপ্তির গুরুত্বপূর্ণ উপাদান। Nested Resolvers ডেটার বিভিন্ন স্তরের মধ্যে সম্পর্ক তৈরি করতে এবং সেই সম্পর্কের মাধ্যমে ডেটা ফেরত আনতে সহায়তা করে, আর Parent-Child Relationship এর মাধ্যমে আপনি Parent টাইপ থেকে Child টাইপের ডেটা সহজে অ্যাক্সেস করতে পারেন। এই সম্পর্কের মাধ্যমে ডেটার সঠিক কাঠামো এবং তা থেকে প্রয়োজনীয় ডেটা নিয়ে আসা সম্ভব হয়।
Read more