GraphQL Query এবং Schema Validation

GraphQL Testing এবং Debugging - গ্রাফকিউএল (GraphQL) - Web Development

247

গ্রাফকিউএল (GraphQL) একটি শক্তিশালী API ভাষা যা ডেটা ক্লায়েন্ট থেকে সার্ভারে পৌঁছানোর জন্য একটি সুনির্দিষ্ট এবং কাঠামোগত পদ্ধতি প্রদান করে। তবে, গ্রাফকিউএল কুয়েরি বা স্কিমা সঠিকভাবে কাজ করার জন্য কিছু validation প্রয়োজন, যা ডেটার সঠিকতা এবং সার্ভারের নিরাপত্তা নিশ্চিত করে। এই প্রবন্ধে আমরা গ্রাফকিউএল কুয়েরি এবং স্কিমার জন্য validation সম্পর্কিত ধারণা এবং টেকনিক্যাল পদ্ধতিগুলি আলোচনা করব।


GraphQL Query Validation

GraphQL Query Validation হল সেই প্রক্রিয়া, যার মাধ্যমে নিশ্চিত করা হয় যে ক্লায়েন্টের পাঠানো কুয়েরি সঠিকভাবে তৈরি হয়েছে এবং এটি গ্রাফকিউএল স্কিমার সাথে মেলে। সাধারণত, গ্রাফকিউএল সার্ভার নিজেই কুয়েরির syntax এবং structure যাচাই করে, তবে কিছু অতিরিক্ত কাস্টম ভ্যালিডেশন প্রয়োগ করা যেতে পারে যাতে ডেটার সঠিকতা নিশ্চিত করা যায়।

1. Built-in Query Validation

গ্রাফকিউএল সার্ভারের মধ্যে কিছু বিল্ট-ইন কুয়েরি ভ্যালিডেশন সুবিধা রয়েছে:

  • Syntax Validation: গ্রাফকিউএল সার্ভার কুয়েরি সিনট্যাক্স যাচাই করে। যদি কুয়েরি ভুল সিনট্যাক্সে থাকে, তবে এটি একটি ত্রুটি (error) প্রদান করবে।
  • Schema Validation: গ্রাফকিউএল স্কিমার বিরুদ্ধে কুয়েরি যাচাই করা হয়। সার্ভারটি শুধুমাত্র স্কিমায় সংজ্ঞায়িত ফিল্ড এবং টাইপগুলির সাথে মিল রেখে কুয়েরি পরিচালনা করতে সক্ষম হয়।

2. Custom Query Validation

কিছু সময়ে, গ্রাফকিউএল কুয়েরির জন্য অতিরিক্ত কাস্টম ভ্যালিডেশন প্রয়োজন হতে পারে। যেমন:

  • Permission Checks: ইউজার যদি কোনো রিসোর্স অ্যাক্সেস করতে চায়, তবে তার অনুমতি চেক করতে হবে।
  • Complex Query Detection: কিছু কুয়েরি অত্যন্ত জটিল হতে পারে, যা সার্ভারের ওপর অতিরিক্ত চাপ ফেলতে পারে। অতএব, এ ধরনের কুয়েরি প্রতিরোধ করার জন্য একটি কাস্টম ভ্যালিডেশন বাস্তবায়ন করা যেতে পারে।

3. Example: Validating Query Parameters

ধরা যাক, একটি কুয়েরি একটি User ডেটা ফেরত আনে, এবং এটি শুধুমাত্র userId অনুসারে ডেটা অ্যাক্সেস করতে পারে। এর জন্য একটি কাস্টম ভ্যালিডেশন ব্যবহার করা যেতে পারে:

const { GraphQLObjectType, GraphQLSchema, GraphQLString, GraphQLInt } = require('graphql');
const { AuthenticationError } = require('apollo-server');

const UserType = new GraphQLObjectType({
  name: 'User',
  fields: {
    id: { type: GraphQLInt },
    name: { type: GraphQLString },
  },
});

const RootQuery = new GraphQLObjectType({
  name: 'RootQueryType',
  fields: {
    user: {
      type: UserType,
      args: { id: { type: GraphQLInt } },
      resolve(parent, args) {
        if (!args.id) {
          throw new AuthenticationError('User ID is required');
        }
        // Fetch user data based on id
        return { id: args.id, name: 'John Doe' };
      },
    },
  },
});

const Mutation = new GraphQLObjectType({
  name: 'Mutation',
  fields: {
    updateUser: {
      type: UserType,
      args: {
        id: { type: GraphQLInt },
        name: { type: GraphQLString },
      },
      resolve(parent, args) {
        if (!args.name) {
          throw new Error('Name is required');
        }
        // Update user data
        return { id: args.id, name: args.name };
      },
    },
  },
});

const schema = new GraphQLSchema({
  query: RootQuery,
  mutation: Mutation,
});

module.exports = schema;

এখানে:

  • User Validation: user কুয়েরি চলানোর সময়, যদি userId না দেওয়া হয়, তবে একটি ত্রুটি সৃষ্ট হবে এবং গ্রাফকিউএল সার্ভার ইউজারকে সেই তথ্য দেবেনা।

GraphQL Schema Validation

GraphQL Schema Validation হল সেই প্রক্রিয়া, যেখানে সার্ভারের স্কিমা সঠিকভাবে সংজ্ঞায়িত হয়েছে কিনা তা নিশ্চিত করা হয়। স্কিমার মধ্যে ডেটার ধরণ, সম্পর্ক এবং কোয়েরি/মিউটেশন ফিল্ড সঠিকভাবে যুক্ত হয়েছে কিনা তা যাচাই করা হয়।

1. Built-in Schema Validation

গ্রাফকিউএল স্কিমা সঠিকভাবে লিখিত কিনা তা যাচাই করার জন্য গ্রাফকিউএল নিজে কিছু বিল্ট-ইন ভ্যালিডেশন প্রদান করে। যেমন:

  • Type Validation: গ্রাফকিউএল স্কিমায় প্রতিটি ফিল্ডের জন্য ডেটা টাইপ নির্ধারণ করা হয় (যেমন, String, Int, Float, Boolean), যা কুয়েরি চলানোর সময় যাচাই করা হয়।
  • Required Fields: গ্রাফকিউএল স্কিমাতে কিছু ফিল্ড non-nullable (অর্থাৎ, অবশ্যই মান থাকতে হবে) হিসেবে সংজ্ঞায়িত করা যায়। এই ধরনের ফিল্ডের জন্য কুয়েরি পাঠানোর সময় যদি মান না দেওয়া হয়, তবে গ্রাফকিউএল একটি ত্রুটি ফেরত দেবে।

2. Custom Schema Validation

কাস্টম স্কিমা ভ্যালিডেশন এমন কিছু কাস্টম চেক হতে পারে যা স্কিমার মধ্যে যুক্ত করার মাধ্যমে আপনি যাচাই করতে পারেন, যেমন:

  • Custom Directives: গ্রাফকিউএল স্কিমাতে custom directives ব্যবহার করে ভ্যালিডেশন যোগ করা যেতে পারে।
  • Validation on Mutation: মিউটেশনগুলিতে কাস্টম ভ্যালিডেশন চেক যোগ করা যেতে পারে, যেমন কিছু ফিল্ডের মান নির্দিষ্ট রেঞ্জের মধ্যে থাকতে হবে।

3. Example: Schema Validation Using Custom Directives

ধরা যাক, একটি কাস্টম ডিরেকটিভ তৈরি করা হচ্ছে, যা ইউজারের নামের জন্য নির্দিষ্ট দৈর্ঘ্য যাচাই করবে:

const { GraphQLDirective, GraphQLString } = require('graphql');

// Create a custom directive for validating user name length
const validateNameLengthDirective = new GraphQLDirective({
  name: 'validateNameLength',
  locations: ['FIELD_DEFINITION'],
  args: {
    minLength: { type: GraphQLInt },
  },
});

const UserType = new GraphQLObjectType({
  name: 'User',
  fields: {
    name: {
      type: GraphQLString,
      directives: [
        {
          name: 'validateNameLength',
          args: { minLength: 3 },
        },
      ],
      resolve(parent, args, context, info) {
        if (parent.name.length < 3) {
          throw new Error('Name must be at least 3 characters');
        }
        return parent.name;
      },
    },
  },
});

const schema = new GraphQLSchema({
  query: RootQuery,
  mutation: Mutation,
  directives: [validateNameLengthDirective],
});

এখানে:

  • validateNameLength একটি কাস্টম ডিরেকটিভ যা ইউজারের নামের দৈর্ঘ্য চেক করে। যদি নাম ৩ অক্ষরের কম হয়, তবে ত্রুটি দেখানো হবে।

Best Practices for GraphQL Query and Schema Validation

  1. Input Validation: কুয়েরি বা মিউটেশনের ইনপুট যাচাই করা নিশ্চিত করে যে, সার্ভারের ওপর অতিরিক্ত চাপ পড়বে না। ক্লায়েন্টের সঠিক ডেটা পাঠানো প্রয়োজন।
  2. Error Handling: কুয়েরি বা মিউটেশন চলাকালীন ত্রুটি সঠিকভাবে হ্যান্ডেল করা গুরুত্বপূর্ণ। যেকোনো ভুল বা অস্বীকৃত ইনপুটের জন্য উপযুক্ত ত্রুটি বার্তা প্রদান করুন।
  3. Complex Query Limiting: অত্যন্ত জটিল বা nested কুয়েরি সার্ভারের পারফরম্যান্স কমিয়ে দিতে পারে, সুতরাং এই ধরনের কুয়েরি সীমাবদ্ধ করা উচিত।
  4. Rate Limiting and Throttling: অনেক কুয়েরি একযোগে পাঠানোর ফলে সার্ভারে চাপ পড়তে পারে। Rate limiting এবং throttling পদ্ধতি ব্যবহার করে এমন কুয়েরি প্রতিরোধ করা উচিত।

সারাংশ

GraphQL Query এবং Schema Validation গ্রাফকিউএল অ্যাপ্লিকেশনের গুরুত্বপূর্ণ অংশ যা ডেটা সঠিকভাবে এবং নিরাপদভাবে সঞ্চালিত হওয়া নিশ্চিত করে। কুয়েরি ভ্যালিডেশন ক্লায়েন্টের পাঠানো ডেটা যাচাই করে, এবং স্কিমা ভ্যালিডেশন সার্ভারের ডেটা ধরণ এবং ফিল্ড সঠিকভাবে সংজ্ঞায়িত করেছে কিনা তা যাচাই করে। অতিরিক্ত কাস্টম ভ্যালিডেশন পদ্ধতি গ্রাফকিউএল অ্যাপ্লিকেশনকে আরও নিরাপদ এবং দক্ষ করে তোলে।

Content added By
Promotion

Are you sure to start over?

Loading...