GraphQL Directives হল একটি শক্তিশালী ফিচার যা queries, mutations, বা subscriptions-এ ডাইনামিক আচরণ যোগ করতে ব্যবহৃত হয়। গ্রাফকিউএল নির্দেশিকা (directives) ব্যবহার করে আপনি কুয়েরি বা মিউটেশন কার্যকারিতা পরিবর্তন করতে পারেন, যা ডেটা ফিল্টারিং, শর্তযুক্ত অনুসন্ধান বা ফলাফল পরিবর্তন করার ক্ষেত্রে সহায়ক হতে পারে। ডিরেকটিভগুলির মাধ্যমে কুয়েরির আচরণ পরিবর্তন করা সম্ভব, যেমন কুয়েরি ফলাফল অন্তর্ভুক্ত বা বাদ দেওয়া, বা ডেটা শর্তানুযায়ী ফেরত আনা।
গ্রাফকিউএল ডিরেকটিভ কি?
Directives হল special "hints" যা গ্রাফকিউএল কুয়েরি, মিউটেশন, বা সাবস্ক্রিপশন এর আচরণ নিয়ন্ত্রণ করতে ব্যবহৃত হয়। এগুলি প্রায়শই শর্তানুযায়ী কুয়েরি ফলাফল পরিবর্তন করতে ব্যবহার হয়, যেমন ডেটা ফিল্টার করা, শর্তাধীন ফিল্ড নির্বাচন করা, বা অন্য কাস্টম প্রক্রিয়া।
গ্রাফকিউএল-এ দুটি প্রাথমিক ডিরেকটিভ রয়েছে:
- @include: এটি ফিল্ডের অন্তর্ভুক্তি শর্তাধীন করে। যদি কন্ডিশন
trueহয়, তবে এটি কুয়েরিতে অন্তর্ভুক্ত হয়। - @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হল একটি শর্ত যা কুয়েরি পাঠানোর সময় অ্যাপ্লিকেশন বা ক্লায়েন্ট থেকে পাঠানো হবে।- যদি
showEmailtrueহয়, তবে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একটি শর্ত যা কুয়েরি পাঠানোর সময় নির্ধারণ করা হবে।- যদি
showAgetrueহয়, তবে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 ডিরেকটিভগুলি শর্ত অনুযায়ী ফিল্ড অন্তর্ভুক্ত বা বাদ দিতে সহায়ক, যখন কাস্টম ডিরেকটিভগুলি অ্যাপ্লিকেশনের নির্দিষ্ট প্রয়োজন অনুযায়ী আচরণ কাস্টমাইজ করতে পারে। ডিরেকটিভ ব্যবহারে ডেটা কুয়েরি আরও কার্যকর এবং ব্যাবহারযোগ্য হয়ে ওঠে, যা সিস্টেমের কর্মক্ষমতা এবং উন্নত ব্যবহারকারীর অভিজ্ঞতা নিশ্চিত করে।
Read more