Resolver এর মধ্যে Asynchronous Data Fetching

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

238

গ্রাফকিউএল (GraphQL)-এ Resolver একটি গুরুত্বপূর্ণ উপাদান, যা কুয়েরি বা মিউটেশন প্রক্রিয়াকরণের সময় ডেটা ফিরিয়ে আনে। যখন কুয়েরি বা মিউটেশন করার জন্য ডেটা গ্রহণের প্রয়োজন হয়, তখন Resolver সেই ডেটা ফেরত দেওয়ার কাজ করে। তবে, অনেক সময় ডেটা সংগ্রহের প্রক্রিয়া Asynchronous হতে পারে, যেমন ডেটাবেস থেকে ডেটা পড়া বা API কল করা। এ ক্ষেত্রে Asynchronous Data Fetching ব্যবহার করা হয়, যাতে সার্ভার পেরোল বা ব্লক না হয়ে ডেটা সঠিকভাবে ফেচ করা যায়।


Resolver কী?

গ্রাফকিউএল-এর Resolver হল একটি ফাংশন যা ক্লায়েন্টের কুয়েরি বা মিউটেশন সম্পাদন করার সময় নির্দিষ্ট ফিল্ডের জন্য ডেটা প্রদান করে। প্রতিটি ফিল্ডের জন্য একটি Resolver থাকে যা ওই ফিল্ডের ডেটা ফেচ করে। যখন Query বা Mutation এর মাধ্যমে কোনো ডেটার অনুরোধ করা হয়, তখন Resolver সেই ডেটা পাওয়ার জন্য কার্যকরী হয়।

Asynchronous Data Fetching

অনেক সময়, ডেটা Fetching এর প্রক্রিয়া Asynchronous হতে পারে। উদাহরণস্বরূপ:

  • ডেটাবেসের সঙ্গে যোগাযোগ করা
  • একটি এক্সটার্নাল API-তে কল করা
  • লম্বা সময় নেওয়া কোনো প্রসেসিং কাজ

এ ধরনের অপারেশনগুলো Asynchronous হতে পারে, যার মানে হল যে ফাংশনটির কাজ শেষ না হওয়া পর্যন্ত অন্য কোনো কাজ থামবে না। গ্রাফকিউএল Resolvers-এ Asynchronous প্রক্রিয়া চালানোর জন্য Promises বা Async/Await ব্যবহার করা হয়।


Asynchronous Resolver এর উদাহরণ

ধরা যাক, আমাদের একটি User টাইপ আছে, এবং আমরা users নামে একটি কুয়েরি তৈরি করতে চাই, যা ডেটাবেস থেকে ইউজারদের তথ্য ফিরিয়ে আনবে।

আমরা এখানে Async/Await ব্যবহার করে Asynchronous data fetching দেখাব।

Schema Example:

type Query {
  users: [User]
}

type User {
  id: ID!
  name: String!
  email: String!
}

Resolver Example:

এখানে, আমরা একটি users কুয়েরি Resolver তৈরি করব, যা ডেটাবেস থেকে ইউজারদের তথ্য Asynchronously ফেচ করবে।

const resolvers = {
  Query: {
    // Asynchronous resolver for 'users' query
    users: async () => {
      try {
        const users = await fetchUsersFromDatabase(); // Asynchronous DB call
        return users;
      } catch (error) {
        throw new Error('Error fetching users');
      }
    },
  },
};

async function fetchUsersFromDatabase() {
  // Imagine this is a DB call that fetches users from a database
  return new Promise((resolve) => {
    setTimeout(() => {
      resolve([
        { id: '1', name: 'John Doe', email: 'john@example.com' },
        { id: '2', name: 'Jane Doe', email: 'jane@example.com' },
      ]);
    }, 1000); // Simulate a delay in DB fetching
  });
}

এখানে:

  • users কুয়েরি জন্য async ফাংশন ব্যবহার করা হয়েছে।
  • fetchUsersFromDatabase() একটি Asynchronous ফাংশন যা একটি Promise ফেরত দেয়। এই Promise হল ডেটাবেস থেকে ডেটা ফেচ করার প্রক্রিয়া।
  • await ব্যবহার করা হয়েছে যাতে ডেটা ফেচ করার প্রক্রিয়া সম্পন্ন না হওয়া পর্যন্ত পরবর্তী কোড 실행 না হয়।

Promise ব্যবহার করা

তবে, async/await ব্যবহার না করে Promise পদ্ধতিতেও Asynchronous data fetching করা যায়। নিচে Promise ব্যবহার করে কিভাবে কাজ করা যায় তা দেখানো হলো।

const resolvers = {
  Query: {
    users: () => {
      return new Promise((resolve, reject) => {
        fetchUsersFromDatabase()
          .then(users => resolve(users))
          .catch(err => reject(new Error('Error fetching users')));
      });
    },
  },
};

এখানে:

  • users কুয়েরি Resolver একটি Promise ফেরত দেয়।
  • fetchUsersFromDatabase() ফাংশনটি thencatch ব্লক ব্যবহার করে ডেটা প্রাপ্তি এবং ত্রুটি পরিচালনা করে।

Asynchronous Resolver এর ব্যবহার

Asynchronous Resolver সাধারণত তখন ব্যবহার করা হয় যখন:

  1. ডেটাবেস থেকে ডেটা ফেচ করা:
    ডেটাবেসের সাথে যোগাযোগ করার জন্য সঠিকভাবে Asynchronous কল করা প্রয়োজন। যেমন, একটি SQL বা NoSQL ডেটাবেস থেকে ডেটা পড়া।
  2. API কল:
    বাইরের API-তে HTTP রিকুয়েস্ট পাঠিয়ে ডেটা ফিরিয়ে আনা। যেমন, থার্ড-পার্টি সিস্টেম থেকে তথ্য গ্রহণ।
  3. File I/O:
    সার্ভারের মধ্যে ফাইলের তথ্য পড়া বা লেখা যেখানে ব্লকিং অপারেশন হতে পারে।
  4. Long-running Operations:
    এমন কাজ যা সময় নিয়ে কাজ করতে পারে, যেমন কমপ্লেক্স প্রসেসিং বা মেইল পাঠানো।

Resolver-এ Asynchronous Data Fetching এর সুবিধা

  1. ক্লায়েন্টের অভিজ্ঞতা উন্নত:
    একাধিক Asynchronous কাজ একসঙ্গে সম্পাদিত হওয়ার ফলে অ্যাপ্লিকেশন দ্রুত এবং দক্ষভাবে কাজ করতে পারে, যা ক্লায়েন্টের অভিজ্ঞতাকে উন্নত করে।
  2. প্রতিক্রিয়া সময় কমানো:
    যখন একাধিক Asynchronous কাজ একযোগে চলছে, তা সার্ভারকে একযোগে কাজ করার সুযোগ দেয়, যার ফলে প্রতিক্রিয়া সময় কমে।
  3. Non-blocking:
    Asynchronous ফাংশনগুলি সার্ভারকে ব্লক না করে অন্য কাজগুলো চলতে দেয়, ফলে সার্ভারের কর্মক্ষমতা বৃদ্ধি পায়।

সারাংশ

Asynchronous Data Fetching গ্রাফকিউএল-এ Resolver এর মধ্যে ব্যবহৃত একটি গুরুত্বপূর্ণ কৌশল, যা বিভিন্ন ধরনের দীর্ঘ সময় নেয়া অপারেশন, যেমন ডেটাবেস কল বা API রিকুয়েস্ট, নির্বিঘ্নে পরিচালনা করে। Async/Await বা Promise ব্যবহারের মাধ্যমে, গ্রাফকিউএল রিসলভারগুলো ডেটা ফেচ করার জন্য Asynchronous প্রক্রিয়া অনুসরণ করে, এবং এভাবে সার্ভারের কর্মক্ষমতা বৃদ্ধি পায় এবং ক্লায়েন্টের অভিজ্ঞতা উন্নত হয়।

Content added By
Promotion

Are you sure to start over?

Loading...