গ্রাফকিউএল (GraphQL) এ Custom Directives তৈরি এবং ব্যবহার করা একটি শক্তিশালী ফিচার, যা স্কিমার মধ্যে নির্দিষ্ট লজিক প্রয়োগ করতে সাহায্য করে। গ্রাফকিউএলে Directives সাধারণত কুয়েরি বা মিউটেশনের ফলাফল পরিবর্তন করতে ব্যবহৃত হয়, যেমন কুয়েরি রেজলভারের মধ্যে কন্ডিশনাল লজিক যোগ করা বা ডেটার আউটপুট ফরম্যাট পরিবর্তন করা। গ্রাফকিউএলে দুটি বিল্ট-ইন ডিরেকটিভ রয়েছে: @include এবং @skip, তবে আপনি নিজের প্রয়োজন অনুযায়ী Custom Directives তৈরি করে ব্যবহার করতে পারেন।
Custom Directives কী?
Custom Directives হলো গ্রাফকিউএল স্কিমায় কাস্টম লজিক যুক্ত করার একটি উপায়। আপনি যখন গ্রাফকিউএল স্কিমায় কাস্টম ডিরেকটিভ তৈরি করেন, তখন আপনি কুয়েরির বা মিউটেশনের রেজলভারে অতিরিক্ত লজিক প্রয়োগ করতে পারবেন। এটি সাধারণত @directiveName ফরম্যাটে ব্যবহৃত হয়।
Custom Directives তৈরি এবং ব্যবহারের নিয়ম
গ্রাফকিউএলে কাস্টম ডিরেকটিভ তৈরি করার জন্য আপনাকে তিনটি প্রধান স্টেপ অনুসরণ করতে হবে:
- ডিরেকটিভের ঘোষণা (Defining the Directive)
- ডিরেকটিভ ব্যবহার করা (Using the Directive)
- ডিরেকটিভ রেজলভারের মধ্যে প্রক্রিয়াকরণ (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 গ্রাফকিউএল-এ শক্তিশালী একটি ফিচার যা ডেটা প্রক্রিয়া, কুয়েরি ফিল্টারিং, প্রমাণীকরণ, এবং অন্যান্য কাস্টম লজিক প্রয়োগ করতে ব্যবহৃত হয়। আপনি কাস্টম ডিরেকটিভ তৈরি করে গ্রাফকিউএল স্কিমাতে যেকোনো ফিল্ডের আচরণ পরিবর্তন করতে পারেন। কাস্টম ডিরেকটিভ তৈরি করার জন্য প্রথমে ডিরেকটিভের ঘোষণা করতে হয়, তারপর কুয়েরিতে এটি ব্যবহার করতে হয় এবং অবশেষে রেজলভারে ডিরেকটিভের লজিক প্রক্রিয়া করতে হয়।
Read more