GraphQL এর বিল্ট-ইন Error Handling

GraphQL এর মধ্যে Error Handling - গ্রাফকিউএল (GraphQL) - Web Development

208

গ্রাফকিউএল (GraphQL)-এ Error Handling খুবই গুরুত্বপূর্ণ, কারণ এটি ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা ট্রান্সফার করার সময় অনেক ধরনের সমস্যা বা ত্রুটি তৈরি করতে পারে। গ্রাফকিউএল নিজেই কিছু বিল্ট-ইন error handling ফিচার প্রদান করে, যা ডেভেলপারদের ত্রুটিগুলিকে পরিচালনা করতে সাহায্য করে এবং কুয়েরি বা মিউটেশন সফলভাবে সম্পাদন না হলে যথাযথ ত্রুটি বার্তা প্রদান করে।


GraphQL এ Error Handling এর মৌলিক ধারণা

গ্রাফকিউএল এ ত্রুটির (error) ধারণাটি সাধারণত Execution Errors এবং Syntax Errors এর মধ্যে ভাগ করা হয়।

  1. Syntax Errors:
    যখন গ্রাফকিউএল কুয়েরি সঠিকভাবে লিখিত না হয় এবং কুয়েরির স্ট্রাকচার বা সিঙ্কট্যাক্স ভুল থাকে, তখন এটি একটি সিঙ্কট্যাক্স ত্রুটি (Syntax Error) তৈরি করবে।
  2. Execution Errors:
    যখন কুয়েরি সঠিকভাবে গ্রাফকিউএল সার্ভারে প্রসেস হয়, তবে ডেটার অ্যাক্সেস বা ম্যানিপুলেশনের সময় কোনও সমস্যা ঘটে (যেমন ডেটাবেসে অ্যাক্সেস সমস্যা বা অনুমতির অভাব), তখন এটি Execution Error সৃষ্টি করে।

গ্রাফকিউএল ত্রুটি (Error) কিভাবে পরিচালিত হয়?

গ্রাফকিউএল এর বিল্ট-ইন error handling সাধারণত কুয়েরি বা মিউটেশনের ফলস্বরূপ errors ফিল্ডে ত্রুটির বিস্তারিত প্রদান করে। এই ত্রুটির তথ্য সাধারণত একটি array আকারে আসে, যার মধ্যে প্রতিটি ত্রুটি একটি অবজেক্ট হিসেবে থাকে। ত্রুটির অবজেক্টে বেশ কিছু তথ্য থাকতে পারে, যেমন:

  • message: ত্রুটির বিবরণ
  • locations: কুয়েরির কোন অংশে ত্রুটি হয়েছে
  • path: কোথায় ত্রুটির সূত্রপাত
  • extensions: অতিরিক্ত কাস্টম ত্রুটি ডেটা

Error Response Structure

যখন কোনো ত্রুটি ঘটে, গ্রাফকিউএল সাধারণত নিম্নলিখিত ফর্ম্যাটে একটি ত্রুটি রেসপন্স প্রদান করে:

{
  "data": null,
  "errors": [
    {
      "message": "User not found",
      "locations": [
        {
          "line": 2,
          "column": 5
        }
      ],
      "path": [
        "user"
      ]
    }
  ]
}

এখানে:

  • data: যদি কুয়েরি বা মিউটেশন কোনোভাবে আংশিকভাবে সম্পন্ন হয়, তবে কিছু ডেটা ফেরত আসতে পারে। ত্রুটির কারণে data ফিল্ড null থাকতে পারে।
  • errors: এটি একটি array, যেখানে ত্রুটির বিশদ বিবরণ দেওয়া থাকে।

গ্রাফকিউএল ত্রুটি ব্যবস্থাপনার জন্য বিল্ট-ইন বৈশিষ্ট্য

গ্রাফকিউএল-এ ত্রুটি ব্যবস্থাপনার জন্য কিছু বিল্ট-ইন বৈশিষ্ট্য রয়েছে:

1. Error Propagation

গ্রাফকিউএল স্বয়ংক্রিয়ভাবে ত্রুটি সনাক্ত করে এবং কুয়েরির ফলস্বরূপ সেগুলি প্রপাগেট করে। অর্থাৎ, যদি একটি ফিল্ডে ত্রুটি ঘটে, তবে পুরো কুয়েরি বা মিউটেশন ব্যর্থ হতে পারে, তবে অন্য সঠিকভাবে চলমান ফিল্ডগুলি থেকে ডেটা ফিরিয়ে আনা হতে পারে।

query {
  user(id: "1") {
    name
    email
  }
  post(id: "1") {
    title
    content
  }
}

এখানে:

  • যদি user কুয়েরি ত্রুটিপূর্ণ হয়, তবে গ্রাফকিউএল কেবল post কুয়েরির ফলাফল ফিরিয়ে দিতে পারে এবং ত্রুটির তথ্য errors ফিল্ডে প্রদান করবে।

2. Custom Error Extensions

গ্রাফকিউএল ত্রুটির ক্ষেত্রে extensions নামে একটি অতিরিক্ত ফিল্ড অন্তর্ভুক্ত করা সম্ভব, যেখানে আপনি ত্রুটির সম্পর্কে আরও বিস্তারিত বা কাস্টম ডেটা প্রদান করতে পারেন।

const { ApolloError } = require('apollo-server');

const resolvers = {
  Query: {
    user: async (_, { id }) => {
      const user = await findUserById(id);
      if (!user) {
        throw new ApolloError('User not found', 'USER_NOT_FOUND', {
          userId: id,
        });
      }
      return user;
    },
  },
};

এখানে:

  • ApolloError ব্যবহার করা হয়েছে কাস্টম ত্রুটি তৈরি করার জন্য, এবং তাতে extensions এর মাধ্যমে অতিরিক্ত ডেটা (যেমন userId) পাঠানো হচ্ছে।

3. Error Formatting (Custom Error Handling)

আপনার সার্ভারে গ্রাফকিউএল ত্রুটির আচরণ কাস্টমাইজ করা সম্ভব। আপনি কাস্টম ত্রুটি বার্তা এবং কাস্টম ত্রুটি রেসপন্স প্রদান করতে পারেন, যাতে ক্লায়েন্টদের ত্রুটি বুঝতে সুবিধা হয়।

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

const typeDefs = gql`
  type Query {
    hello: String
  }
`;

const resolvers = {
  Query: {
    hello: () => {
      throw new GraphQLError('Custom error message', {
        extensions: {
          code: 'BAD_USER_INPUT',
          message: 'Something went wrong',
        },
      });
    },
  },
};

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

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

এখানে:

  • GraphQLError-এ কাস্টম extensions যোগ করা হয়েছে, যা ত্রুটির কোড এবং বার্তা সহ আরও বিস্তারিত তথ্য প্রদান করে।

4. Partial Errors Handling

গ্রাফকিউএল ত্রুটি বার্তাগুলি partial errors কে হ্যান্ডল করতে সহায়ক। উদাহরণস্বরূপ, একটি কুয়েরির কিছু অংশ সফল হতে পারে, তবে অন্য অংশে ত্রুটি ঘটতে পারে। গ্রাফকিউএল এই ত্রুটিগুলি errors ফিল্ডে প্রদান করে, এবং ডেটা যদি কিছু অংশে পাওয়া যায়, তবে তা data ফিল্ডে ফেরত দেয়।

{
  "data": {
    "user": {
      "name": "John Doe"
    }
  },
  "errors": [
    {
      "message": "Failed to fetch user email",
      "locations": [{ "line": 2, "column": 5 }],
      "path": ["user", "email"]
    }
  ]
}

এখানে:

  • ইউজারের নাম data ফিল্ডে পাওয়া গেছে, কিন্তু ইমেইল অ্যাক্সেস করতে গিয়ে ত্রুটি ঘটেছে এবং সেই ত্রুটির বিস্তারিত errors ফিল্ডে রয়েছে।

5. Validation Errors

যখন আপনি ইনপুট যাচাই করতে চান (যেমন ইউজার নাম, পাসওয়ার্ড, বা কোনো প্যারামিটার), আপনি GraphQL Scalars অথবা কাস্টম validators ব্যবহার করতে পারেন, যা ত্রুটি তৈরি করবে যদি ইনপুট সঠিক না হয়।

const { GraphQLScalarType, Kind } = require('graphql');

const EmailType = new GraphQLScalarType({
  name: 'Email',
  description: 'A custom scalar type for email',
  serialize(value) {
    if (!/\S+@\S+\.\S+/.test(value)) {
      throw new Error('Invalid email format');
    }
    return value;
  },
});

এখানে:

  • আপনি একটি কাস্টম scalar তৈরি করে ইনপুট যাচাই করতে পারেন, যেমন Email টাইপ, যা সঠিক ফরম্যাটে না থাকলে ত্রুটি সৃষ্টি করবে।

সারাংশ

গ্রাফকিউএল বিল্ট-ইন error handling সিস্টেমের মাধ্যমে ত্রুটির সঠিক ব্যবস্থাপনা এবং কুয়েরি বা মিউটেশনের সঠিক ফলাফল প্রদান নিশ্চিত করে। গ্রাফকিউএল ত্রুটির জন্য কিছু মূল বৈশিষ্ট্য রয়েছে, যেমন error propagation, custom error extensions, partial errors, এবং validation errors। এছাড়াও, আপনি কাস্টম error handling লজিক তৈরি করতে পারেন, যা আপনার অ্যাপ্লিকেশনকে আরও নিরাপদ এবং ব্যবহারকারীদের জন্য আরও সহায়ক করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...