GraphQL এর মাধ্যমে REST API এর উপরে একটি লেয়ার তৈরি করা

GraphQL এবং REST API Integration - গ্রাফকিউএল (GraphQL) - Web Development

349

গ্রাফকিউএল (GraphQL) এবং REST API একসাথে ব্যবহার করা অনেক সময় সুবিধাজনক হতে পারে, বিশেষ করে যখন আপনি গ্রাফকিউএল ব্যবহার করে REST API এর উপর একটি নতুন লেয়ার তৈরি করতে চান। এটি একটি সাধারণ কৌশল হতে পারে যেখানে আপনি REST API থেকে ডেটা সংগ্রহ করেন এবং তারপর গ্রাফকিউএল কুয়েরি বা মিউটেশন এর মাধ্যমে সেই ডেটা সরবরাহ করেন। এই পদ্ধতির মাধ্যমে আপনি REST API এর সুবিধা গ্রহণ করতে পারেন এবং একই সময়ে গ্রাফকিউএল এর নমনীয়তা এবং দক্ষতা ব্যবহার করতে পারেন।

এখানে আমরা GraphQL-এর মাধ্যমে REST API-র উপরে একটি লেয়ার তৈরি করার প্রক্রিয়া দেখাব।


GraphQL এর মাধ্যমে REST API এর উপরে একটি লেয়ার তৈরি করার সুবিধা

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

ধাপ ১: REST API কল করার জন্য একটি Resolver তৈরি করা

গ্রাফকিউএল-এর Resolvers ব্যবহার করে আমরা REST API থেকে ডেটা সংগ্রহ করতে পারি। এ ক্ষেত্রে, আমরা Axios অথবা node-fetch এর মতো HTTP ক্লায়েন্ট ব্যবহার করে REST API-কে কল করব।

  1. Axios ইন্সটল করা:
npm install axios
  1. GraphQL Resolver তৈরি করা:

ধরা যাক, আপনি একটি REST API ব্যবহার করে ইউজারের তথ্য অ্যাক্সেস করতে চান। নিচে একটি উদাহরণ দেওয়া হলো যেখানে গ্রাফকিউএল রেজোলভার REST API থেকে ডেটা কল করছে।

const axios = require('axios');

// GraphQL Resolver যা REST API কল করে
const resolvers = {
  Query: {
    getUser: async (_, { id }) => {
      try {
        const response = await axios.get(`https://jsonplaceholder.typicode.com/users/${id}`);
        return response.data;
      } catch (error) {
        throw new Error("Error fetching data from REST API");
      }
    },
  },
};

এখানে, getUser গ্রাফকিউএল কুয়েরি রেজোলভার হিসেবে কাজ করছে এবং এটি REST API-কে কল করে ইউজারের তথ্য ফেরত আনে।


ধাপ ২: Apollo Server এবং GraphQL Schema সেটআপ

এখন, গ্রাফকিউএল স্কিমা এবং রেজোলভার তৈরি করার পর Apollo Server চালু করতে হবে। নীচে একটি উদাহরণ দেওয়া হলো:

const { ApolloServer, gql } = require('apollo-server');
const axios = require('axios');

// GraphQL Schema
const typeDefs = gql`
  type User {
    id: ID
    name: String
    username: String
    email: String
  }

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

const resolvers = {
  Query: {
    getUser: async (_, { id }) => {
      try {
        const response = await axios.get(`https://jsonplaceholder.typicode.com/users/${id}`);
        return response.data;
      } catch (error) {
        throw new Error("Error fetching data from REST API");
      }
    },
  },
};

const server = new ApolloServer({
  typeDefs,
  resolvers,
});

server.listen().then(({ url }) => {
  console.log(`Server ready at ${url}`);
});

এখানে:

  • getUser কুয়েরি গ্রাফকিউএল API এর মাধ্যমে ইউজারের ডেটা ফেরত আনে।
  • ApolloServer কনফিগার করা হয়েছে যাতে আপনি সহজেই গ্রাফকিউএল কুয়েরি রিকোয়েস্ট করতে পারেন।

ধাপ ৩: REST API থেকে আরও ডেটা সংগ্রহ এবং ম্যানিপুলেশন

আপনি আরও অনেক REST API একসাথে গ্রাফকিউএল রেজোলভার ব্যবহার করে একত্রিত করতে পারেন। ধরুন, আপনি একটি REST API থেকে ইউজারের ডেটা এবং আরেকটি REST API থেকে ইউজারের পোষ্ট সংগ্রহ করতে চান। নিচে একটি উদাহরণ দেওয়া হলো:

const resolvers = {
  Query: {
    getUserAndPosts: async (_, { id }) => {
      try {
        const userResponse = await axios.get(`https://jsonplaceholder.typicode.com/users/${id}`);
        const postsResponse = await axios.get(`https://jsonplaceholder.typicode.com/posts?userId=${id}`);
        
        return {
          user: userResponse.data,
          posts: postsResponse.data,
        };
      } catch (error) {
        throw new Error("Error fetching data from REST API");
      }
    },
  },
};

এখানে:

  • getUserAndPosts একটি নতুন কুয়েরি, যা একই সময়ে ইউজারের তথ্য এবং তার পোষ্টগুলি REST API থেকে একসাথে নিয়ে আসে।

GraphQL Schema আপডেট

type Post {
  id: ID
  title: String
  body: String
}

type UserWithPosts {
  user: User
  posts: [Post]
}

type Query {
  getUserAndPosts(id: ID!): UserWithPosts
}

এখানে:

  • UserWithPosts নামক টাইপটি ব্যবহার করা হয়েছে যাতে ইউজার এবং তার পোষ্ট একসাথে রিটার্ন করা যায়।

ধাপ ৪: GraphQL এবং REST API এর মধ্যে ত্রুটি হ্যান্ডলিং

REST API থেকে ডেটা সংগ্রহের সময় ত্রুটি মোকাবেলা করা গুরুত্বপূর্ণ। আপনি এটি সহজে try-catch ব্লক ব্যবহার করে করতে পারেন, যাতে যে কোনও ত্রুটি সংঘটিত হলে তা সঠিকভাবে গ্রাহককে জানানো যায়।

const resolvers = {
  Query: {
    getUser: async (_, { id }) => {
      try {
        const response = await axios.get(`https://jsonplaceholder.typicode.com/users/${id}`);
        return response.data;
      } catch (error) {
        throw new Error("Error fetching data from REST API");
      }
    },
  },
};

এখানে:

  • try-catch ব্লকের মাধ্যমে ত্রুটি ঘটলে Error এর মাধ্যমে ক্লায়েন্টকে ত্রুটি বার্তা পাঠানো হচ্ছে।

সারাংশ

GraphQL এর মাধ্যমে REST API এর উপরে একটি লেয়ার তৈরি করা একটি শক্তিশালী এবং নমনীয় পদ্ধতি, যেখানে আপনি REST API থেকে ডেটা সংগ্রহ করেন এবং গ্রাফকিউএল কুয়েরি বা মিউটেশন এর মাধ্যমে তা সরবরাহ করেন। এর মাধ্যমে আপনি ডেটা ফিল্টারিং, একত্রিত ডেটা সংগ্রহ, এবং ত্রুটি হ্যান্ডলিং সহজভাবে করতে পারবেন। Apollo Server এবং Axios ব্যবহার করে এই ইন্টিগ্রেশনটি খুব সহজেই করা সম্ভব।

Content added By
Promotion

Are you sure to start over?

Loading...