Resolvers কী এবং কিভাবে কাজ করে?

Resolvers এবং Data Fetching - গ্রাফকিউএল (GraphQL) - Web Development

337

গ্রাফকিউএল (GraphQL)-এ Resolvers হল একটি গুরুত্বপূর্ণ উপাদান, যা ক্লায়েন্টের কুয়েরি বা মিউটেশন পরিচালনার জন্য সার্ভারকে সাহায্য করে। Resolvers-এর মাধ্যমে, GraphQL সার্ভার ডেটার জন্য কাস্টম লজিক প্রয়োগ করতে সক্ষম হয় এবং প্রাপ্ত কুয়েরির ভিত্তিতে সঠিক ফলাফল প্রদান করে।


Resolvers কী?

Resolvers হল ফাংশন বা মেথড যা একটি নির্দিষ্ট কুয়েরি, মিউটেশন, বা সাবস্ক্রিপশনের জন্য ডেটা রিটার্ন বা পরিবর্তন করার দায়িত্ব পালন করে। এটি ক্লায়েন্টের কুয়েরি বা মিউটেশন অনুযায়ী ডেটা সংগ্রহ করে এবং সেই ডেটা গ্রাফকিউএল স্কিমা অনুযায়ী ফেরত পাঠায়।

প্রতিটি Resolver একটি নির্দিষ্ট Field এর জন্য কাজ করে। যখন গ্রাফকিউএল সার্ভার একটি কুয়েরি বা মিউটেশন পায়, তখন এটি নির্দিষ্ট ফিল্ডের জন্য একটি রেজোলভার কল করে, যাতে সেই ফিল্ডের জন্য সঠিক ডেটা আনা যায়।


Resolver কিভাবে কাজ করে?

GraphQL সার্ভারে প্রতিটি ফিল্ডের জন্য একটি resolver function ডিফাইন করা হয়। এটি কুয়েরি বা মিউটেশনের মধ্যে উল্লেখিত প্রতিটি ফিল্ডের জন্য চালিত হয়। Resolvers সাধারণত নিচের কিছু কার্য সম্পাদন করে:

  1. ডেটা সংগ্রহ করা: রেজোলভারটি ডেটাবেস বা API থেকে প্রয়োজনীয় ডেটা নিয়ে আসে।
  2. ডেটা প্রক্রিয়া করা: ডেটার মধ্যে কোনো পরিবর্তন বা ফিল্টারিং করা হতে পারে।
  3. ফলাফল ফেরত দেওয়া: রেজোলভার সঠিক ডেটা ফেরত দেয় যা কুয়েরি বা মিউটেশনের ফিল্ডে ফিরিয়ে আনা হবে।

এটি একটি Field থেকে ডেটা পাওয়ার জন্য একটি ফাংশন হিসেবে কাজ করে।


Resolver Structure

একটি সাধারণ রেজোলভারের স্ট্রাকচার এইরকম হতে পারে:

const resolvers = {
  Query: {
    getUser: (parent, args, context, info) => {
      // এখানে getUser ফিল্ডের জন্য লজিক থাকবে
      const { id } = args; // id আর্গুমেন্ট নেয়
      return getUserById(id); // ডেটা ফেরত পাঠায়
    }
  },
  Mutation: {
    createUser: (parent, args, context, info) => {
      const { name, email } = args;
      return createUserInDatabase(name, email); // ডেটাবেসে নতুন ইউজার তৈরি করে
    }
  }
};

এখানে:

  • parent: পূর্ববর্তী resolver থেকে প্রাপ্ত ডেটা
  • args: কুয়েরি বা মিউটেশনের আর্গুমেন্টগুলি (যেমন id, name, email)
  • context: সার্ভার সাইডে ব্যবহার করা হয় (এটি সাধারণত ইউজার অথেনটিকেশন, ডেটাবেস সংযোগ ইত্যাদির জন্য ব্যবহৃত হয়)
  • info: কুয়েরির সম্পর্কে তথ্য (যেমন কোন ফিল্ডগুলো চাওয়া হয়েছে)

Resolver এর উপাদান

Resolvers সাধারণত Query, Mutation, বা Subscription এর অধীনে কাজ করে এবং ফিল্ড ভিত্তিক ডেটা ফেরত দেয়।

  1. Query Resolvers:
    কেবল ডেটা পড়তে ব্যবহৃত হয়। এটি একটি নির্দিষ্ট ফিল্ডের জন্য ডেটা রিটার্ন করে। উদাহরণস্বরূপ:

    const resolvers = {
      Query: {
        getUser: (parent, args) => {
          return { id: args.id, name: "John Doe" };
        }
      }
    };
    
  2. Mutation Resolvers:
    ডেটা তৈরি, আপডেট, বা মুছতে ব্যবহৃত হয়। উদাহরণস্বরূপ:

    const resolvers = {
      Mutation: {
        createUser: (parent, args) => {
          const newUser = { id: "1", name: args.name };
          return newUser;
        }
      }
    };
    
  3. Subscription Resolvers:
    রিয়েল-টাইম ডেটা আপডেটের জন্য ব্যবহৃত হয়, যেমন চ্যাট সিস্টেম বা লাইভ ডেটা ফিড।

Resolver এর সাথে ব্যবহারযোগ্য অন্যান্য ফিচার

  1. Argument Handling:
    রেজোলভারটি কুয়েরি বা মিউটেশনের আর্গুমেন্টগুলি গ্রহণ করে, যা তার কাজ করতে প্রয়োজনীয় তথ্য প্রদান করে। এই আর্গুমেন্টগুলি রেজোলভার ফাংশনের args প্যারামিটার হিসেবে পাওয়া যায়।
  2. Context:
    রেজোলভারটি context প্যারামিটারও পেতে পারে, যা সার্ভার সাইডের প্রেক্ষাপট সম্পর্কিত তথ্য ধারণ করে। এটি সাধারণত ইউজার অথেনটিকেশন, লগিং বা অন্যান্য সাধারণ কার্যকরী তথ্য প্রদান করতে ব্যবহৃত হয়।
  3. Parent:
    যদি এটি একটি Nested Query হয়, তাহলে parent প্যারামিটার ব্যবহার করা হয়। এটি আগের স্তরের রেজোলভার থেকে প্রাপ্ত ফলাফল ধারণ করে।

Resolver এর ব্যবহার উদাহরণ

ধরা যাক, আমাদের একটি User এবং Post টাইপ রয়েছে এবং আমরা একটি ইউজারের পোস্টগুলি প্রাপ্ত করতে চাই।

type User {
  id: ID!
  name: String!
  posts: [Post]
}

type Post {
  id: ID!
  title: String!
  content: String!
}

type Query {
  getUser(id: ID!): User
}

এখন, রেজোলভারটি এরকম হবে:

const resolvers = {
  Query: {
    getUser: (parent, args) => {
      const { id } = args;
      const user = { id: "1", name: "John Doe" };  // ডেটা পাওয়া যাচ্ছে
      return user; // ইউজার রিটার্ন করা হচ্ছে
    }
  },
  User: {
    posts: (parent) => {
      // আগের resolver থেকে প্রাপ্ত `parent` ইউজারের `id` ব্যবহার করে পোস্টগুলি খুঁজে বের করা
      if (parent.id === "1") {
        return [
          { id: "101", title: "My first post", content: "This is a post." },
          { id: "102", title: "Another post", content: "This is another post." }
        ];
      }
      return [];
    }
  }
};

এখানে:

  • getUser রেজোলভার ইউজার রিটার্ন করে।
  • posts রেজোলভার User টাইপের একটি Nested ফিল্ড হিসাবে কাজ করে, এবং এটি parent (এখানে ইউজার) এর id ব্যবহার করে পোস্টের তালিকা রিটার্ন করে।

সারাংশ

Resolvers হল ফাংশন বা মেথড যা গ্রাফকিউএল কুয়েরি বা মিউটেশনগুলির জন্য ডেটা সংগ্রহ বা পরিবর্তন করার কাজ করে। তারা ক্লায়েন্টের কুয়েরি অনুযায়ী ডেটা ফেরত দেয় এবং সার্ভারের ডেটাবেস বা অন্যান্য উৎস থেকে ডেটা প্রাপ্তির জন্য লজিক প্রয়োগ করে। Resolvers এর মাধ্যমে GraphQL সার্ভার তার API এর কার্যকারিতা সম্পাদন করে এবং ডেটার সঠিক কাঠামো এবং ফলাফল প্রদান করে।

Content added By
Promotion

Are you sure to start over?

Loading...