GraphQL Directives

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

274

গ্রাফকিউএল (GraphQL)Directives হল একটি শক্তিশালী বৈশিষ্ট্য যা কুয়েরি বা মিউটেশনকে ডাইনামিকভাবে কনফিগার বা কাস্টমাইজ করার জন্য ব্যবহৃত হয়। এগুলি বিশেষভাবে কুয়েরির সময় শর্তাধীন আচরণ যুক্ত করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, আপনি একটি কুয়েরি থেকে কিছু ফিল্ড মুছে ফেলতে বা কিছু শর্তে ফলাফলকে সংশোধন করতে directives ব্যবহার করতে পারেন।

গ্রাফকিউএল-এ প্রধান দুটি built-in directive রয়েছে:

  1. @include
  2. @skip

এছাড়া, আপনি নিজের কাস্টম ডিরেকটিভও তৈরি করতে পারেন।


@include Directive

@include ডিরেকটিভটি ব্যবহার করা হয় একটি কুয়েরির ফিল্ড কেবল তখনই ইনক্লুড করতে, যখন একটি শর্ত পূর্ণ হয়। এই ডিরেকটিভটি কুয়েরির অংশ হিসেবে ডেটা ফেরত আনতে শর্তযুক্ত (conditional) নির্ধারণ করতে সাহায্য করে।

ব্যবহার:

query getUser($includeEmail: Boolean!) {
  user(id: "1") {
    name
    email @include(if: $includeEmail)
  }
}

এখানে:

  • @include(if: $includeEmail): যদি $includeEmail ভেরিয়েবলটি true হয়, তাহলে email ফিল্ডটি অন্তর্ভুক্ত হবে। অন্যথায়, এটি অন্তর্ভুক্ত হবে না।

Query Example:

query {
  getUser(includeEmail: true) {
    name
    email
  }
}

এখানে email ফিল্ড কেবল তখনই রিটার্ন হবে, যদি includeEmail ভেরিয়েবলটি true হয়।


@skip Directive

@skip ডিরেকটিভটি @include এর বিপরীত কাজ করে। এটি একটি ফিল্ডকে কেবল তখনই স্কিপ করতে ব্যবহৃত হয়, যখন একটি শর্ত পূর্ণ হয়। এটি ফিল্ডটি কুয়েরি থেকে বাদ দেয়।

ব্যবহার:

query getUser($skipEmail: Boolean!) {
  user(id: "1") {
    name
    email @skip(if: $skipEmail)
  }
}

এখানে:

  • @skip(if: $skipEmail): যদি $skipEmail ভেরিয়েবলটি true হয়, তাহলে email ফিল্ডটি স্কিপ হবে।

Query Example:

query {
  getUser(skipEmail: true) {
    name
    email
  }
}

এখানে email ফিল্ড কেবল তখনই স্কিপ হবে, যদি skipEmail ভেরিয়েবলটি true হয়।


কাস্টম Directives

গ্রাফকিউএলে, আপনি কাস্টম ডিরেকটিভ তৈরি করতে পারেন যা আপনার প্রয়োজন অনুসারে কুয়েরি আচরণ নিয়ন্ত্রণ করতে সহায়ক হয়। এটি একটি বিশেষভাবে প্রয়োজনীয় বৈশিষ্ট্য, যখন আপনি সার্ভারের আচরণ কাস্টমাইজ করতে চান।

কাস্টম ডিরেকটিভ তৈরি করা

গ্রাফকিউএল স্কিমাতে একটি কাস্টম ডিরেকটিভ তৈরি করতে হলে, আপনাকে ডিরেকটিভটির প্রকার এবং তার ব্যবহারযোগ্য স্থান (যেমন, ফিল্ড বা আর্গুমেন্ট) নির্ধারণ করতে হবে।

directive @upperCase on FIELD_DEFINITION

type Query {
  hello(name: String!): String @upperCase
}

এখানে, আমরা একটি @upperCase ডিরেকটিভ তৈরি করেছি যা hello ফিল্ডে প্রয়োগ হবে। এটি ফিল্ডের মানকে আপারকেসে রূপান্তর করবে।

Resolver Example:

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

const UpperCaseDirective = new GraphQLDirective({
  name: 'upperCase',
  locations: [DirectiveLocation.FIELD_DEFINITION],
  resolve(next, source, args, context) {
    return next().then(result => result.toUpperCase());
  },
});

const schema = makeExecutableSchema({
  typeDefs: `
    directive @upperCase on FIELD_DEFINITION
    
    type Query {
      hello(name: String!): String @upperCase
    }
  `,
  resolvers: {
    Query: {
      hello: (parent, { name }) => `Hello ${name}`,
    },
  },
  schemaDirectives: {
    upperCase: UpperCaseDirective,
  },
});

এখানে, upperCase ডিরেকটিভটি hello ফিল্ডে ব্যবহৃত হবে, এবং যখন কুয়েরি হবে, তখন এটি ফিল্ডের আউটপুটকে আপারকেসে রূপান্তর করবে।


Directives এর ব্যবহারকারিতা

Directives গ্রাফকিউএল কুয়েরির মধ্যে শর্তযুক্ত লজিক প্রয়োগের জন্য ব্যবহার করা হয়। এর মাধ্যমে আপনি কুয়েরির ফিল্ড বা আর্গুমেন্টগুলির অন্তর্ভুক্তি বা বাদ দেওয়া নিয়ন্ত্রণ করতে পারেন। এটি বিশেষভাবে দরকারী যখন:

  1. শর্তাধীন ফিল্ড রিটার্ন করা: আপনি যখন কিছু শর্তে কেবল কিছু নির্দিষ্ট ডেটা ফিরিয়ে দিতে চান।
  2. ডেটা প্রসেসিং কাস্টমাইজ করা: যেমন কাস্টম ডিরেকটিভ ব্যবহার করে, ডেটার মান রূপান্তর করা (যেমন, ক্যাপিটালাইজ বা ফরম্যাটিং)।
  3. কুয়েরি ইন্টারফেসের অভ্যন্তরে আরও নমনীয়তা: কাস্টম ডিরেকটিভ দিয়ে API-কাস্টমাইজেশন করতে পারেন যা ডেভেলপমেন্টে সময় এবং প্রচেষ্টা সাশ্রয় করে।

সারাংশ

GraphQL Directives হল একটি শক্তিশালী বৈশিষ্ট্য যা ডেটা ফেরত দেওয়ার বা কুয়েরি আচরণে শর্তযুক্ত নিয়ন্ত্রণ যোগ করতে সহায়ক। @include এবং @skip ডিরেকটিভগুলি কুয়েরির ফলাফলকে শর্তাধীনভাবে অন্তর্ভুক্ত বা বাদ দিতে ব্যবহৃত হয়, এবং কাস্টম ডিরেকটিভ আপনার নিজস্ব প্রয়োজন অনুসারে কুয়েরি লজিক কাস্টমাইজ করতে সাহায্য করে। এটি একটি গ্রাফকিউএল API-কে আরও নমনীয় এবং শক্তিশালী করতে সহায়ক।

Content added By

গ্রাফকিউএল (GraphQL) এর Directives হল বিশেষ ধরনের নির্দেশনা যা কুয়েরি বা মিউটেশন এর আচরণ নিয়ন্ত্রণ করতে ব্যবহার করা হয়। এটি ডেভেলপারদের গ্রাফকিউএল কুয়েরির মধ্যে কন্ডিশনাল লজিক যোগ করতে সহায়ক। নির্দেশিকাগুলি কুয়েরি বা মিউটেশনে সরাসরি অন্তর্ভুক্ত করা হয় এবং সাধারণত ডেটা রিটার্ন বা অনুসন্ধানের শর্তাবলী নিয়ন্ত্রণ করার জন্য ব্যবহৃত হয়।

গ্রাফকিউএলে কিছু বিল্ট-ইন নির্দেশিকা রয়েছে যেমন @include এবং @skip, যা কুয়েরির কার্যকারিতা পরিচালনা করতে সাহায্য করে, এবং আপনি চাইলে কাস্টম নির্দেশিকাও তৈরি করতে পারেন।


Directives কী?

Directives হল কুয়েরি বা মিউটেশন-এর মধ্যে নির্দিষ্ট শর্ত বা প্রক্রিয়া নির্ধারণ করতে ব্যবহৃত বিশেষ ট্যাগ। এগুলি কুয়েরি বা মিউটেশন ফিল্ডগুলিতে কন্ডিশনাল অপারেশন বা ফিল্টারিং করার জন্য ব্যবহার করা হয়। উদাহরণস্বরূপ, আপনি একটি কুয়েরি তৈরি করতে পারেন যা একটি নির্দিষ্ট শর্তের ভিত্তিতে কিছু ফিল্ড যোগ বা বাদ দেয়।

গ্রাফকিউএল-এ দুটি বিল্ট-ইন নির্দেশিকা রয়েছে:

  1. @include: একটি ফিল্ড বা অংশ কুয়েরি শুধুমাত্র তখনই অন্তর্ভুক্ত করতে ব্যবহৃত হয় যখন নির্দিষ্ট শর্ত পূর্ণ হয়।
  2. @skip: একটি ফিল্ড বা অংশ কুয়েরি থেকে বাদ দেওয়া হয় যদি নির্দিষ্ট শর্ত পূর্ণ হয়।

এছাড়া, আপনি কাস্টম নির্দেশিকাও তৈরি করতে পারেন যা আপনার কুয়েরির আরও নির্দিষ্ট আচরণ কাস্টমাইজ করতে সাহায্য করে।


বিল্ট-ইন Directives

@include Directive

@include নির্দেশিকা কুয়েরিতে ফিল্ড অন্তর্ভুক্ত করার জন্য শর্ত প্রদান করে। এটি কুয়েরি এডিট করার জন্য উপকারী যখন আপনি কেবল নির্দিষ্ট শর্তে কিছু তথ্য রিটার্ন করতে চান।

উদাহরণ:

query getUserInfo($includeEmail: Boolean!) {
  user(id: 1) {
    name
    email @include(if: $includeEmail)
  }
}

এখানে:

  • email ফিল্ডটি কেবল তখনই রিটার্ন হবে যখন if: $includeEmail শর্ত সত্য হবে।
  • আপনি যখন কুয়েরি করবেন, তখন includeEmail ভেরিয়েবলটি সত্য বা মিথ্যা সেট করতে হবে।

Query Example:

{
  "includeEmail": true
}

এটি email ফিল্ডটি রিটার্ন করবে।

@skip Directive

@skip নির্দেশিকা ফিল্ড বা অংশ কুয়েরি থেকে বাদ দিতে ব্যবহৃত হয় যদি শর্ত পূর্ণ হয়। এটি সাধারণত ব্যবহৃত হয় যখন আপনি কিছু ডেটা শর্তসাপেক্ষে না আনতে চান।

উদাহরণ:

query getUserInfo($skipEmail: Boolean!) {
  user(id: 1) {
    name
    email @skip(if: $skipEmail)
  }
}

এখানে:

  • email ফিল্ডটি কেবল তখনই রিটার্ন হবে না যদি skipEmail ভেরিয়েবলটি সত্য হয়।

Query Example:

{
  "skipEmail": true
}

এটি email ফিল্ডটি বাদ দেবে।


কাস্টম Directives

গ্রাফকিউএল-এ কাস্টম নির্দেশিকা তৈরি করা সম্ভব যা বিশেষ ব্যবহারিক শর্ত অনুযায়ী কুয়েরির আচরণ নিয়ন্ত্রণ করতে সহায়ক। কাস্টম নির্দেশিকা ব্যবহার করতে, আপনাকে প্রথমে গ্রাফকিউএল স্কিমায় নির্দেশিকার সংজ্ঞা তৈরি করতে হবে এবং তারপরে সেই নির্দেশিকাটি কুয়েরিতে ব্যবহার করতে হবে।

কাস্টম Directives তৈরি করা:

directive @deprecated(reason: String = "No longer supported") on FIELD_DEFINITION | ENUM_VALUE

এখানে:

  • @deprecated হল একটি কাস্টম নির্দেশিকা যা একটি ফিল্ড বা মানকে deprecated বা ব্যবহৃত না হওয়া অবস্থায় চিহ্নিত করে।

Directives কেন প্রয়োজন?

  1. কন্ডিশনাল লজিক প্রয়োগ (Conditional Logic): Directives ব্যবহার করে আপনি কুয়েরি বা মিউটেশনে কন্ডিশনাল লজিক প্রয়োগ করতে পারেন। উদাহরণস্বরূপ, আপনি কুয়েরি লেখার সময় সিদ্ধান্ত নিতে পারেন কোন তথ্য ফেরত দিবেন বা বাদ দেবেন।
  2. ডেটার নির্বাচন নিয়ন্ত্রণ (Control Data Selection): কিছু ক্ষেত্র কেবল তখনই কুয়েরি থেকে ফেরত আসবে যখন নির্দিষ্ট শর্ত পূর্ণ হয়। যেমন, ব্যবহারকারীর ইমেইল ঠিকানা কেবল তখনই ফেরত আসবে যখন ইউজার সেটি দেখতে চাইবে।
  3. ডেভেলপমেন্টের নমনীয়তা (Flexibility in Development): Directives ডেভেলপারদের জন্য কুয়েরিতে আরও নমনীয়তা প্রদান করে। আপনি যদি জানেন যে কোনও ফিল্ড বা ডেটা নির্দিষ্ট শর্তের অধীনে প্রয়োজন, তবে আপনি তা কুয়েরিতে অন্তর্ভুক্ত বা বাদ দিতে পারেন।
  4. ডেটা ম্যানেজমেন্ট সহজ করা (Ease in Data Management): যখন আপনি অনেক ধরনের ডেটা এবং শর্ত নিয়ে কাজ করছেন, তখন directives দ্বারা ডেটা ম্যানেজমেন্ট সহজ হয়। এটি কোডকে পরিষ্কার এবং কমপ্যাক্ট রাখে।

সারাংশ

Directives হল গ্রাফকিউএলে বিশেষ নির্দেশনা যা কুয়েরির আচরণ নিয়ন্ত্রণ করতে সহায়ক। @include এবং @skip হল দুটি বিল্ট-ইন নির্দেশিকা যা শর্ত অনুযায়ী ডেটা অন্তর্ভুক্ত বা বাদ দিতে সাহায্য করে। আপনি কাস্টম নির্দেশিকাও তৈরি করতে পারেন আপনার নির্দিষ্ট প্রয়োজনের জন্য। Directives গ্রাফকিউএলে কন্ডিশনাল লজিক প্রয়োগ, ডেটার নির্বাচন নিয়ন্ত্রণ এবং ডেভেলপমেন্টের নমনীয়তা বাড়ানোর জন্য অত্যন্ত গুরুত্বপূর্ণ।

Content added By

গ্রাফকিউএল (GraphQL)-এ Built-in Directives দুটি খুবই গুরুত্বপূর্ণ ফিচার, যা ক্লায়েন্টকে কুয়েরি থেকে ডেটা অন্তর্ভুক্ত বা বাদ দেওয়ার সুযোগ দেয়। এই দুটি ডিরেকটিভ হলো @include এবং @skip। এগুলি কুয়েরির সময় নির্দিষ্ট শর্তের উপর ভিত্তি করে কিভাবে ডেটা ফিল্টার করা হবে তা নিয়ন্ত্রণ করতে সাহায্য করে।


@include Directive

@include ডিরেকটিভটি গ্রাফকিউএল কুয়েরিতে ব্যবহার করা হয় যাতে কেবল তখনই একটি ফিল্ডকে অন্তর্ভুক্ত (include) করা হয় যখন নির্দিষ্ট একটি শর্ত পূর্ণ হয়। এটি সাধারণত একটি বুলিয়ান (Boolean) শর্তের সাথে ব্যবহার করা হয়, এবং সেই শর্তের ভিত্তিতে একটি ফিল্ডের উপস্থিতি নির্ধারণ করা হয়।

ব্যবহার:

query GetUserDetails($includeEmail: Boolean!) {
  user(id: "1") {
    name
    email @include(if: $includeEmail)
  }
}

এখানে:

  • $includeEmail একটি ভেরিয়েবল যা ডায়নামিকভাবে কুয়েরি চলাকালীন নির্ধারণ করা হয়।
  • @include(if: $includeEmail) ডিরেকটিভটি শুধুমাত্র তখনই email ফিল্ডটি অন্তর্ভুক্ত করবে যখন $includeEmail ভেরিয়েবলটি true হবে।

কুয়েরি:

query {
  user(id: "1") {
    name
    email @include(if: true)
  }
}

এখানে:

  • email ফিল্ডটি include হবে যদি শর্ত true হয়।
  • যদি @include(if: false) হয়, তবে email ফিল্ডটি অন্তর্ভুক্ত হবে না।

@skip Directive

@skip ডিরেকটিভটি @include এর বিপরীত। এটি ব্যবহার করা হয় যাতে কোনো ফিল্ড তখনই বাতিল (skip) করা হয় যখন নির্দিষ্ট শর্ত পূর্ণ হয়। এটি একটি বুলিয়ান শর্তের উপর ভিত্তি করে কাজ করে, এবং সেই শর্তের ভিত্তিতে ফিল্ডটি কুয়েরি থেকে বাদ দেওয়া হয়।

ব্যবহার:

query GetUserDetails($skipEmail: Boolean!) {
  user(id: "1") {
    name
    email @skip(if: $skipEmail)
  }
}

এখানে:

  • $skipEmail একটি ভেরিয়েবল যা কুয়েরি চলাকালীন নির্ধারণ করা হয়।
  • @skip(if: $skipEmail) ডিরেকটিভটি email ফিল্ডটিকে তখনই বাদ দেবে যখন $skipEmail ভেরিয়েবলটি true হবে।

কুয়েরি:

query {
  user(id: "1") {
    name
    email @skip(if: true)
  }
}

এখানে:

  • email ফিল্ডটি skip হবে যদি শর্ত true হয়।
  • যদি @skip(if: false) হয়, তবে email ফিল্ডটি অন্তর্ভুক্ত হবে।

@include এবং @skip এর মধ্যে পার্থক্য

  • @include ডিরেকটিভটি একটি ফিল্ডকে কেবল তখনই অন্তর্ভুক্ত করতে দেয় যখন একটি শর্ত true থাকে।
  • @skip ডিরেকটিভটি একটি ফিল্ডকে কেবল তখনই বাদ দিতে দেয় যখন একটি শর্ত true থাকে।

এগুলো একসাথে ব্যবহার করার মাধ্যমে, আপনি একই কুয়েরিতে যেকোনো ডেটাকে শর্ত অনুযায়ী অন্তর্ভুক্ত বা বাদ দিতে পারেন।


উদাহরণ:

ধরা যাক, আপনি একটি User কুয়েরি তৈরি করতে চান যা নাম এবং ইমেইল অন্তর্ভুক্ত করবে, তবে আপনি একটি শর্ত দেবেন যে যদি ক্লায়েন্ট ফোন নম্বর চায়, তবে ফোন নম্বর অন্তর্ভুক্ত হবে, আর অন্যথায় বাদ যাবে।

query GetUserDetails($includePhone: Boolean!) {
  user(id: "1") {
    name
    email
    phone @include(if: $includePhone)
  }
}

এখানে:

  • phone ফিল্ডটি তখনই অন্তর্ভুক্ত হবে যখন $includePhone ভেরিয়েবলটি true হবে, আর বাদ যাবে যখন তা false হবে।

কুয়েরি (True):

query {
  user(id: "1") {
    name
    email
    phone @include(if: true)
  }
}

এখানে ফোন নম্বর অন্তর্ভুক্ত হবে।

কুয়েরি (False):

query {
  user(id: "1") {
    name
    email
    phone @include(if: false)
  }
}

এখানে ফোন নম্বর বাদ যাবে এবং শুধুমাত্র নাম এবং ইমেইল ফিরে আসবে।


সারাংশ

গ্রাফকিউএল-এর @include এবং @skip ডিরেকটিভ দুটি খুবই শক্তিশালী টুল যা ডেটা কুয়েরির ফ্লেক্সিবিলিটি এবং পারফরম্যান্স উন্নত করতে সাহায্য করে। এই ডিরেকটিভগুলির মাধ্যমে আপনি ডেটাকে শর্তাধীনভাবে অন্তর্ভুক্ত বা বাদ দিতে পারেন, যা অ্যাপ্লিকেশনের কার্যকারিতা এবং ইউজার এক্সপেরিয়েন্সে উল্লেখযোগ্য উন্নতি করতে সহায়ক।

Content added By

গ্রাফকিউএল (GraphQL)Custom Directives তৈরি এবং ব্যবহার করা একটি শক্তিশালী ফিচার, যা স্কিমার মধ্যে নির্দিষ্ট লজিক প্রয়োগ করতে সাহায্য করে। গ্রাফকিউএলে Directives সাধারণত কুয়েরি বা মিউটেশনের ফলাফল পরিবর্তন করতে ব্যবহৃত হয়, যেমন কুয়েরি রেজলভারের মধ্যে কন্ডিশনাল লজিক যোগ করা বা ডেটার আউটপুট ফরম্যাট পরিবর্তন করা। গ্রাফকিউএলে দুটি বিল্ট-ইন ডিরেকটিভ রয়েছে: @include এবং @skip, তবে আপনি নিজের প্রয়োজন অনুযায়ী Custom Directives তৈরি করে ব্যবহার করতে পারেন।


Custom Directives কী?

Custom Directives হলো গ্রাফকিউএল স্কিমায় কাস্টম লজিক যুক্ত করার একটি উপায়। আপনি যখন গ্রাফকিউএল স্কিমায় কাস্টম ডিরেকটিভ তৈরি করেন, তখন আপনি কুয়েরির বা মিউটেশনের রেজলভারে অতিরিক্ত লজিক প্রয়োগ করতে পারবেন। এটি সাধারণত @directiveName ফরম্যাটে ব্যবহৃত হয়।

Custom Directives তৈরি এবং ব্যবহারের নিয়ম

গ্রাফকিউএলে কাস্টম ডিরেকটিভ তৈরি করার জন্য আপনাকে তিনটি প্রধান স্টেপ অনুসরণ করতে হবে:

  1. ডিরেকটিভের ঘোষণা (Defining the Directive)
  2. ডিরেকটিভ ব্যবহার করা (Using the Directive)
  3. ডিরেকটিভ রেজলভারের মধ্যে প্রক্রিয়াকরণ (Processing the Directive in Resolvers)

১. ডিরেকটিভের ঘোষণা (Defining the Directive)

প্রথমে, আপনাকে গ্রাফকিউএল স্কিমায় আপনার কাস্টম ডিরেকটিভ ঘোষণা করতে হবে। ডিরেকটিভ ঘোষণা করার জন্য directive @directiveName ব্যবহার করা হয়। এটি সাধারণত স্কিমা ডিফিনিশনে @ চিহ্নের সাথে ব্যবহৃত হয়।

Example:

ধরা যাক, আমরা একটি কাস্টম ডিরেকটিভ তৈরি করতে চাই, যেটি ডেটার ফিল্টারিং করবে। আমরা @upperCase ডিরেকটিভ তৈরি করব, যা টেক্সট ফিল্ডের মানকে বড় অক্ষরে পরিণত করবে।

Schema Definition (Directive Declaration):

directive @upperCase on FIELD_DEFINITION

এখানে:

  • @upperCase হলো কাস্টম ডিরেকটিভের নাম।
  • on FIELD_DEFINITION নির্দেশ করে যে এই ডিরেকটিভটি শুধুমাত্র ফিল্ড-এর উপর প্রযোজ্য হবে (অর্থাৎ, একটি ফিল্ডের আউটপুটে পরিবর্তন করবে)।

২. ডিরেকটিভ ব্যবহার করা (Using the Directive)

ডিরেকটিভটি ব্যবহারের জন্য, আপনি কুয়েরির মধ্যে এটি প্রয়োগ করবেন। গ্রাফকিউএল কুয়েরিতে ডিরেকটিভ ব্যবহার করার জন্য @ চিহ্নের পর ডিরেকটিভের নাম দেওয়া হয়।

Example:

ধরা যাক, আপনার একটি Post টাইপের title ফিল্ড রয়েছে এবং আপনি @upperCase ডিরেকটিভ ব্যবহার করে শিরোনামটিকে বড় অক্ষরে পরিবর্তন করতে চান।

Query Example (Using the Directive):

query {
  post {
    title @upperCase
  }
}

এখানে, title ফিল্ডের উপর @upperCase ডিরেকটিভ প্রয়োগ করা হয়েছে, যার ফলে শিরোনামটি বড় অক্ষরে কনভার্ট হবে।


৩. ডিরেকটিভ রেজলভারের মধ্যে প্রক্রিয়াকরণ (Processing the Directive in Resolvers)

ডিরেকটিভের ব্যবহার শুরু করার পর, আপনাকে রেজলভার তৈরি করতে হবে যা ডিরেকটিভের লজিক প্রক্রিয়া করবে। এখানে, @upperCase ডিরেকটিভের জন্য একটি কাস্টম রেজলভার তৈরি করতে হবে যাতে ফিল্ডের মান বড় অক্ষরে পরিবর্তিত হয়।

Example:

Directive Resolver (Processing Logic):

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

const typeDefs = gql`
  directive @upperCase on FIELD_DEFINITION

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

  type Query {
    post: Post
  }
`;

class UpperCaseDirective extends SchemaDirectiveVisitor {
  visitFieldDefinition(field) {
    const { resolve = defaultFieldResolver } = field;

    // নতুন রেজলভার তৈরি করা যা বড় অক্ষরে রিটার্ন করবে
    field.resolve = async function (...args) {
      const result = await resolve.apply(this, args);
      if (typeof result === 'string') {
        return result.toUpperCase(); // বড় অক্ষরে কনভার্ট করা
      }
      return result;
    };
  }
}

const resolvers = {
  Query: {
    post: () => ({
      id: '1',
      title: 'GraphQL Custom Directives'
    }),
  },
};

const server = new ApolloServer({
  typeDefs,
  resolvers,
  schemaDirectives: {
    upperCase: UpperCaseDirective,  // @upperCase ডিরেকটিভ প্রক্রিয়া করা
  },
});

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

এখানে:

  • UpperCaseDirective ক্লাসটি SchemaDirectiveVisitor থেকে এক্সটেন্ড করা হয়েছে, এবং visitFieldDefinition মেথডের মধ্যে আমরা একটি কাস্টম রেজলভার তৈরি করেছি যা ফিল্ডের মানকে বড় অক্ষরে পরিবর্তন করবে।
  • resolve.apply(this, args) ব্যবহার করে আসল রেজলভারটি কল করা হয় এবং তারপর আমরা ফলাফলটিকে toUpperCase() মেথডের মাধ্যমে বড় অক্ষরে কনভার্ট করি।

৪. কাস্টম ডিরেকটিভের আরো ব্যবহার

এটি শুধু একটি উদাহরণ, তবে কাস্টম ডিরেকটিভগুলি অন্যান্য কাজের জন্যও ব্যবহার করা যেতে পারে, যেমন:

  • Authorization: কাস্টম ডিরেকটিভ ব্যবহার করে কোন ফিল্ড বা কুয়েরি শুধুমাত্র নির্দিষ্ট ব্যবহারকারীর জন্য অনুমোদিত করা।
  • Caching: ডিরেকটিভ ব্যবহার করে কোনো ফিল্ডের জন্য ক্যাশিং প্রক্রিয়া বাস্তবায়ন করা।

উদাহরণস্বরূপ, আপনি @auth ডিরেকটিভ তৈরি করতে পারেন যা কোন ফিল্ড বা কুয়েরি নির্দিষ্ট অনুমতির ভিত্তিতে অ্যাক্সেসযোগ্য করবে।


সারাংশ

Custom Directives গ্রাফকিউএল-এ শক্তিশালী একটি ফিচার যা ডেটা প্রক্রিয়া, কুয়েরি ফিল্টারিং, প্রমাণীকরণ, এবং অন্যান্য কাস্টম লজিক প্রয়োগ করতে ব্যবহৃত হয়। আপনি কাস্টম ডিরেকটিভ তৈরি করে গ্রাফকিউএল স্কিমাতে যেকোনো ফিল্ডের আচরণ পরিবর্তন করতে পারেন। কাস্টম ডিরেকটিভ তৈরি করার জন্য প্রথমে ডিরেকটিভের ঘোষণা করতে হয়, তারপর কুয়েরিতে এটি ব্যবহার করতে হয় এবং অবশেষে রেজলভারে ডিরেকটিভের লজিক প্রক্রিয়া করতে হয়।

Content added By

GraphQL Directives হল একটি শক্তিশালী ফিচার যা queries, mutations, বা subscriptions-এ ডাইনামিক আচরণ যোগ করতে ব্যবহৃত হয়। গ্রাফকিউএল নির্দেশিকা (directives) ব্যবহার করে আপনি কুয়েরি বা মিউটেশন কার্যকারিতা পরিবর্তন করতে পারেন, যা ডেটা ফিল্টারিং, শর্তযুক্ত অনুসন্ধান বা ফলাফল পরিবর্তন করার ক্ষেত্রে সহায়ক হতে পারে। ডিরেকটিভগুলির মাধ্যমে কুয়েরির আচরণ পরিবর্তন করা সম্ভব, যেমন কুয়েরি ফলাফল অন্তর্ভুক্ত বা বাদ দেওয়া, বা ডেটা শর্তানুযায়ী ফেরত আনা।


গ্রাফকিউএল ডিরেকটিভ কি?

Directives হল special "hints" যা গ্রাফকিউএল কুয়েরি, মিউটেশন, বা সাবস্ক্রিপশন এর আচরণ নিয়ন্ত্রণ করতে ব্যবহৃত হয়। এগুলি প্রায়শই শর্তানুযায়ী কুয়েরি ফলাফল পরিবর্তন করতে ব্যবহার হয়, যেমন ডেটা ফিল্টার করা, শর্তাধীন ফিল্ড নির্বাচন করা, বা অন্য কাস্টম প্রক্রিয়া।

গ্রাফকিউএল-এ দুটি প্রাথমিক ডিরেকটিভ রয়েছে:

  1. @include: এটি ফিল্ডের অন্তর্ভুক্তি শর্তাধীন করে। যদি কন্ডিশন true হয়, তবে এটি কুয়েরিতে অন্তর্ভুক্ত হয়।
  2. @skip: এটি ফিল্ডের বাদ দেওয়া শর্তাধীন করে। যদি কন্ডিশন true হয়, তবে এটি কুয়েরি থেকে বাদ পড়ে।

এছাড়া, আপনি কাস্টম ডিরেকটিভও তৈরি করতে পারেন, যা আপনার অ্যাপ্লিকেশনের নির্দিষ্ট প্রয়োজনীয়তা অনুসারে কাজ করে।


@include Directive

@include ডিরেকটিভ ব্যবহার করে, আপনি কুয়েরি ফিল্ডের অন্তর্ভুক্তি শর্তাধীন করতে পারেন। এটি কেবল তখনই কার্যকর হয় যখন কন্ডিশন true হয়।

@include Directive উদাহরণ:

ধরা যাক, আপনার একটি User টেবিল রয়েছে এবং আপনি নির্দিষ্ট শর্তে ইউজারের নাম এবং ইমেইল ঠিকানা দেখতে চান।

Schema Example:

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

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

এখন, আপনি যদি কুয়েরি করতে চান যেখানে name এবং email শর্তাধীনভাবে অন্তর্ভুক্ত হবে, তাহলে আপনি @include ডিরেকটিভ ব্যবহার করতে পারেন।

query getUser($id: ID!, $showEmail: Boolean!) {
  getUser(id: $id) {
    name
    email @include(if: $showEmail)
    age
  }
}

এখানে:

  • showEmail হল একটি শর্ত যা কুয়েরি পাঠানোর সময় অ্যাপ্লিকেশন বা ক্লায়েন্ট থেকে পাঠানো হবে।
  • যদি showEmail true হয়, তবে email ফিল্ডটি কুয়েরিতে অন্তর্ভুক্ত হবে, অন্যথায় বাদ দেওয়া হবে।

Query Example (Client-Side):

{
  "id": "1",
  "showEmail": true
}

এটি কুয়েরি থেকে ইউজারের ইমেইল ঠিকানা এবং নাম এনে দেবে।


@skip Directive

@skip ডিরেকটিভ ব্যবহার করে, আপনি একটি ফিল্ডকে কুয়েরি থেকে বাদ দিতে পারেন, যদি কোনও শর্ত সত্য (true) হয়। এর মানে হল যে আপনি ফিল্ডটি কেবল তখনই দেখতে পাবেন না যখন শর্ত সত্য হবে।

@skip Directive উদাহরণ:

ধরা যাক, আপনি একটি ইউজারের age ফিল্ড কেবল তখনই দেখতে চান যখন ইউজারের বয়স ১৮ বছরের বেশি।

query getUser($id: ID!, $showAge: Boolean!) {
  getUser(id: $id) {
    name
    email
    age @skip(if: $showAge)
  }
}

এখানে:

  • showAge একটি শর্ত যা কুয়েরি পাঠানোর সময় নির্ধারণ করা হবে।
  • যদি showAge true হয়, তবে age ফিল্ডটি কুয়েরি থেকে বাদ পড়বে।

Query Example (Client-Side):

{
  "id": "1",
  "showAge": true
}

এটি ইউজারের বয়স কেবল তখনই প্রদর্শন করবে না যখন showAge true হবে।


কাস্টম ডিরেকটিভ তৈরি করা

গ্রাফকিউএল আপনাকে কাস্টম ডিরেকটিভ তৈরি করার সুযোগ দেয় যা আপনার অ্যাপ্লিকেশনের নির্দিষ্ট প্রয়োজন অনুসারে কাজ করবে। কাস্টম ডিরেকটিভগুলি সাধারণত শর্ত অনুসারে ডেটার উপস্থাপন বা পদ্ধতি পরিবর্তন করতে ব্যবহৃত হয়।

কাস্টম ডিরেকটিভের উদাহরণ:

ধরা যাক, আপনি এমন একটি ডিরেকটিভ তৈরি করতে চান যা ডেটাকে একটি নির্দিষ্ট ফরম্যাটে প্রক্রিয়া করবে।

Schema Example:

directive @uppercase on FIELD_DEFINITION

type Query {
  getMessage: String @uppercase
}

এখানে, @uppercase একটি কাস্টম ডিরেকটিভ, যা কোনো ফিল্ডের মানকে বড় হাতের অক্ষরে পরিবর্তন করবে। এই ডিরেকটিভটি আপনার কোডে ব্যবহৃত হবে, যেখানে ফিল্ডের মান অ্যাপ্লিকেশন লজিক অনুযায়ী রূপান্তর করা হবে।

Resolver Example:

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

// কাস্টম ডিরেকটিভের জন্য রেজোলভার
const upperCaseDirective = (next, source, args, context) => {
  return next().then(result => result.toUpperCase());
};

const typeDefs = gql`
  directive @uppercase on FIELD_DEFINITION

  type Query {
    getMessage: String @uppercase
  }
`;

const resolvers = {
  Query: {
    getMessage: () => "hello world"
  },
  directives: {
    uppercase: upperCaseDirective
  }
};

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

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

এখানে:

  • কাস্টম ডিরেকটিভ @uppercase তৈরি করা হয়েছে যা রেজলভার ফাংশনে একটি toUpperCase() ফাংশন হিসেবে প্রয়োগ হয়েছে।
  • ইউজার "hello world" পাঠাবে, এবং ডিরেকটিভ দ্বারা সেটি পরিবর্তন হয়ে "HELLO WORLD" হয়ে যাবে।

সারাংশ

Directives গ্রাফকিউএল কুয়েরিতে শক্তিশালী এবং নমনীয় নিয়ন্ত্রণ প্রদান করে, যার মাধ্যমে আপনি কুয়েরি বা মিউটেশনের আচরণ শর্তাধীনভাবে পরিবর্তন করতে পারেন। @include এবং @skip ডিরেকটিভগুলি শর্ত অনুযায়ী ফিল্ড অন্তর্ভুক্ত বা বাদ দিতে সহায়ক, যখন কাস্টম ডিরেকটিভগুলি অ্যাপ্লিকেশনের নির্দিষ্ট প্রয়োজন অনুযায়ী আচরণ কাস্টমাইজ করতে পারে। ডিরেকটিভ ব্যবহারে ডেটা কুয়েরি আরও কার্যকর এবং ব্যাবহারযোগ্য হয়ে ওঠে, যা সিস্টেমের কর্মক্ষমতা এবং উন্নত ব্যবহারকারীর অভিজ্ঞতা নিশ্চিত করে।

Content added By
Promotion

Are you sure to start over?

Loading...