KoaJS একটি শক্তিশালী ওয়েব ফ্রেমওয়ার্ক যা Node.js পরিবেশে ব্যবহার করা হয়। যখন আপনি একটি GraphQL API তৈরি করতে চান, তখন Schema তৈরি করা এবং Resolver কনফিগার করা অত্যন্ত গুরুত্বপূর্ণ। GraphQL API-তে Schema ডেটার গঠন এবং কাঠামো নির্ধারণ করে এবং Resolvers ডেটার জন্য কার্যকর লজিক বাস্তবায়ন করে।
এই টিউটোরিয়ালে আমরা দেখব কিভাবে KoaJS-এ GraphQL Schema তৈরি করা যায় এবং কিভাবে Resolvers কনফিগার করা হয়।
১. KoaJS-এ GraphQL Schema তৈরি করা
GraphQL Schema একটি কাঠামো যা API-এর ডেটার গঠন নির্ধারণ করে। এটি ডেটার প্রকার এবং সম্পর্কের বিবরণ প্রদান করে। একটি GraphQL স্কিমা দুইটি প্রধান অংশে বিভক্ত:
- Types: যেগুলি ডেটার ধরণ বা গঠন নির্ধারণ করে (যেমন
User,Post, ইত্যাদি)। - Queries: API-তে ডেটা আনার জন্য ব্যবহার করা হয়।
- Mutations: API-তে ডেটা পরিবর্তন করার জন্য ব্যবহার করা হয়।
১.১. GraphQL এবং Apollo Server ইনস্টল করা
GraphQL API তৈরি করতে Apollo Server এবং GraphQL প্যাকেজ ব্যবহার করা হয়। প্রথমে, আপনাকে এই প্যাকেজগুলো ইনস্টল করতে হবে:
npm install koa graphql apollo-server-koa
১.২. KoaJS-এ GraphQL Schema তৈরি করা
এখন, আমরা একটি GraphQL স্কিমা তৈরি করব, যেখানে Query এবং Mutation থাকবে।
const Koa = require('koa');
const Router = require('koa-router');
const { ApolloServer, gql } = require('apollo-server-koa');
const app = new Koa();
const router = new Router();
// GraphQL Schema তৈরি করা
const typeDefs = gql`
type User {
id: ID!
username: String!
email: String!
}
type Query {
getUser(id: ID!): User
getUsers: [User]
}
type Mutation {
addUser(username: String!, email: String!): User
}
`;
// Resolver তৈরি করা
const resolvers = {
Query: {
getUser: async (_, { id }) => {
// উদাহরণস্বরূপ, ফিক্সড ইউজার ডেটা
const users = [
{ id: 1, username: 'john_doe', email: 'john@example.com' },
{ id: 2, username: 'jane_doe', email: 'jane@example.com' },
];
return users.find(user => user.id === parseInt(id));
},
getUsers: () => {
// সমস্ত ইউজার ডেটা ফেরত পাঠানো
return [
{ id: 1, username: 'john_doe', email: 'john@example.com' },
{ id: 2, username: 'jane_doe', email: 'jane@example.com' },
];
},
},
Mutation: {
addUser: async (_, { username, email }) => {
// নতুন ইউজার তৈরি (ফিক্সড ডেটা)
const newUser = { id: 3, username, email };
return newUser;
},
},
};
// Apollo Server কনফিগারেশন
const server = new ApolloServer({
typeDefs,
resolvers,
});
server.applyMiddleware({ app }); // KoaJS অ্যাপে Apollo Server যুক্ত করা
// রাউট মাউন্ট করা
app.use(router.routes()).use(router.allowedMethods());
// অ্যাপ চালু করা
app.listen(3000, () => {
console.log('Server running on http://localhost:3000/graphql');
});
এখানে:
- GraphQL Schema: আমরা
typeDefsএUser,QueryএবংMutationটাইপগুলো তৈরি করেছি।User: একটি ইউজার অবজেক্টের ডেটা গঠন নির্ধারণ করে।Query:getUserএবংgetUsersফাংশন ডেটা রিটার্ন করে।Mutation:addUserফাংশন নতুন ইউজার তৈরি করে।
- Resolvers:
QueryএবংMutationএর কার্যক্রম বাস্তবায়ন করা হয়েছে। উদাহরণস্বরূপ,getUserফাংশন একটি নির্দিষ্টidএর ইউজার ফেরত পাঠায় এবংaddUserনতুন ইউজার তৈরি করে।
GraphQL Endpoint: আপনি http://localhost:3000/graphql এ GraphQL Playground বা অন্য কোনো ক্লায়েন্ট ব্যবহার করে এই API-কে ইন্টারঅ্যাক্ট করতে পারবেন।
২. Resolvers কনফিগার করা
Resolvers হলো GraphQL স্কিমায় ডেটার জন্য কার্যকর লজিক যা বাস্তবায়ন করে। Resolvers এর মধ্যে আমরা ডেটার কুয়েরি, ইনসার্ট, আপডেট বা ডিলিট অপারেশন লিখি। এগুলি ডাটাবেস বা অন্যান্য API-এর সাথে সংযুক্ত হতে পারে।
২.১. Resolvers উদাহরণ
একটি getUser কুয়েরি resolver এবং addUser মিউটেশন resolver উদাহরণ:
const resolvers = {
Query: {
getUser: async (_, { id }) => {
// ডাটাবেস বা ফিক্সড ডেটা থেকে ইউজার খুঁজে বের করা
const users = [
{ id: 1, username: 'john_doe', email: 'john@example.com' },
{ id: 2, username: 'jane_doe', email: 'jane@example.com' },
];
return users.find(user => user.id === parseInt(id)); // id এর ভিত্তিতে ইউজার খোঁজা
},
getUsers: () => {
// সমস্ত ইউজার ফিরিয়ে দেওয়া
return [
{ id: 1, username: 'john_doe', email: 'john@example.com' },
{ id: 2, username: 'jane_doe', email: 'jane@example.com' },
];
},
},
Mutation: {
addUser: async (_, { username, email }) => {
// নতুন ইউজার তৈরি
const newUser = { id: 3, username, email };
// ফিক্সড ডেটা হিসাবে নতুন ইউজার রিটার্ন
return newUser;
},
},
};
এখানে:
getUser: একটি ইউজার নির্দিষ্টidদ্বারা খুঁজে বের করে।getUsers: সমস্ত ইউজারকে রিটার্ন করে।addUser: একটি নতুন ইউজার তৈরি করে এবং সেগুলিকে রিটার্ন করে।
আপনি এখানে ডাটাবেস বা অন্য API ব্যবহার করতে পারেন, যেমন MongoDB বা PostgreSQL, যেখান থেকে ইউজারদের ডেটা পাওয়ার জন্য একটি কুয়েরি লেখা যাবে।
৩. GraphQL Query এবং Mutation উদাহরণ
৩.১. Query Example
query {
getUser(id: 1) {
username
email
}
}
এই কুয়েরি id: 1 দিয়ে ইউজারকে খুঁজে বের করবে এবং username এবং email ফিরিয়ে দিবে।
৩.২. Mutation Example
mutation {
addUser(username: "new_user", email: "newuser@example.com") {
id
username
email
}
}
এই মিউটেশনটি একটি নতুন ইউজার তৈরি করবে এবং তার id, username এবং email ফেরত দিবে।
সারাংশ
KoaJS-এ GraphQL Schema এবং Resolver কনফিগারেশন খুবই সহজ। Apollo Server ব্যবহার করে GraphQL API তৈরি করা সম্ভব এবং Joi বা অন্যান্য প্যাকেজ ব্যবহার করে ইনপুট ভ্যালিডেশন করা যায়। Resolvers API-তে কুয়েরি বা মিউটেশন হ্যান্ডল করার জন্য ব্যবহৃত হয়। এই টিউটোরিয়ালের মাধ্যমে আপনি KoaJS-এ একটি সিম্পল GraphQL API তৈরি করতে পারবেন, যেখানে Schema এবং Resolvers কনফিগার করা হয়েছে।
Read more