গ্রাফকিউএল (GraphQL) Mutation হল গ্রাফকিউএল-এর একটি গুরুত্বপূর্ণ অংশ যা সার্ভারে ডেটা পরিবর্তন, আপডেট বা নতুন ডেটা তৈরি করার জন্য ব্যবহৃত হয়। যখন আপনি Query ব্যবহার করে ডেটা পড়েন, তখন Mutation ব্যবহার করে ডেটা তৈরি, আপডেট বা ডিলিট করেন। এটি CRUD (Create, Read, Update, Delete) অপারেশন সম্পাদন করতে ব্যবহৃত হয়, তবে সাধারণত গ্রাফকিউএল-এর মধ্যে শুধুমাত্র Create, Update এবং Delete অপারেশনকে Mutation হিসেবে গণ্য করা হয়।
GraphQL Mutation কীভাবে কাজ করে?
GraphQL Mutation কাজ করে কুয়েরি (Query) এর মতোই, কিন্তু মূল পার্থক্য হল এটি সার্ভারের ডেটা পরিবর্তন করার জন্য ব্যবহৃত হয়। Mutation ক্লায়েন্টের পক্ষ থেকে একটি অনুরোধ প্রেরণ করে, যার মাধ্যমে সার্ভার একটি নির্দিষ্ট অ্যাকশন (যেমন ডেটা তৈরি বা পরিবর্তন) সম্পাদন করে এবং এর ফলাফল হিসেবে ডেটার নতুন স্টেট প্রদান করে।
Mutation এর গঠন
একটি গ্রাফকিউএল মিউটেশন সাধারণত দুটি প্রধান অংশে বিভক্ত:
- Mutation Type: এটি সমস্ত মিউটেশনকে প্রতিনিধিত্ব করে।
- Fields/Arguments: এই অংশে আপনি কোন তথ্য পরিবর্তন করতে চান এবং সেই পরিবর্তনটি কীভাবে ঘটবে তা নির্দেশ করেন।
নিচে একটি সাধারণ মিউটেশন উদাহরণ দেওয়া হল:
mutation {
addUser(name: "John Doe", email: "john.doe@example.com") {
id
name
email
}
}
এখানে:
addUserএকটি মিউটেশন ফাংশন যা নতুন ইউজার তৈরি করে।nameএবংemailমিউটেশনের জন্য আর্গুমেন্ট যা নতুন ইউজার তৈরি করার জন্য প্রয়োজন।- ফলস্বরূপ,
id,nameএবংemailফেরত পাঠানো হবে, যা তৈরি হওয়া ইউজারের ডেটা।
Mutation এর উদাহরণ
ধরা যাক, আমরা একটি User ডেটার জন্য মিউটেশন তৈরি করতে চাই, যেখানে আমরা নতুন ইউজার তৈরি করব এবং ইউজারের তথ্য ফেরত পাব।
- Mutation Type - Add User
স্কিমা (Schema) তৈরি করতে হবে যেখানে মিউটেশন ফাংশন থাকবে:
type Mutation {
addUser(name: String!, email: String!): User
}
এখানে:
addUserফাংশনটি একটিnameএবংemailআর্গুমেন্ট গ্রহণ করে।- এই মিউটেশন ইউজারের একটি নতুন অবজেক্ট তৈরি করবে এবং সেই ইউজারের তথ্য ফেরত পাঠাবে।
- Mutation Resolvers
মিউটেশনের কার্যকারিতা কিভাবে হবে তা নির্ধারণ করতে Resolvers ব্যবহার করা হয়। উদাহরণস্বরূপ, আমাদেরaddUserমিউটেশনটি একটি ইউজার তৈরি করবে এবং তার ডেটা ফিরিয়ে দেবে।
const resolvers = {
Mutation: {
addUser: (parent, args) => {
const { name, email } = args;
const newUser = {
id: String(Math.floor(Math.random() * 1000)), // একটি ইউনিক ID জেনারেট
name,
email,
};
// এখানে ডেটাবেসে নতুন ইউজারটি সংরক্ষণ করা হবে
return newUser;
},
},
};
- Mutation Query Example
Mutation চালানোর জন্য নিচের কুয়েরি ব্যবহার করা হবে:
mutation {
addUser(name: "Alice", email: "alice@example.com") {
id
name
email
}
}
ফলস্বরূপ, আপনি একটি ইউজার তৈরি করবেন যার name Alice এবং email alice@example.com এবং সার্ভার তাকে একটি id, name, এবং email ফেরত পাঠাবে।
Mutation এর প্রয়োজনীয়তা
- ডেটা তৈরি (Create Data): আপনি নতুন রেকর্ড বা অবজেক্ট তৈরি করতে পারেন।
- ডেটা আপডেট (Update Data): আপনি পূর্বে থাকা ডেটা পরিবর্তন করতে পারেন, যেমন একটি ইউজারের নাম বা ইমেইল আপডেট করা।
- ডেটা ডিলিট (Delete Data): আপনি ডেটা মুছে ফেলতে পারেন, যেমন একটি ইউজার রেকর্ড মুছে ফেলা।
সারাংশ
GraphQL Mutation ব্যবহার করে আপনি ডেটাতে পরিবর্তন আনতে পারেন, যেমন ডেটা তৈরি, আপডেট বা মুছে ফেলা। এটি Query এর মতই কাজ করে, কিন্তু ডেটা পরিবর্তন করার জন্য এটি ব্যবহৃত হয়। আপনি মিউটেশন ফাংশন তৈরি করে আর্গুমেন্ট পাঠিয়ে এবং সেই অনুযায়ী সার্ভারে ডেটা আপডেট করতে পারেন। Mutation এর মাধ্যমে Create, Update, এবং Delete অপারেশনগুলো পরিচালনা করা যায়।
GraphQL এ Mutation হল একটি বিশেষ ধরনের অপারেশন যা ডেটাকে পরিবর্তন বা আপডেট করতে ব্যবহৃত হয়। এটি Query থেকে আলাদা, কারণ Query কেবল ডেটা পড়তে ব্যবহৃত হয়, তবে Mutation ডেটার পরিবর্তন, সৃষ্টি বা মুছতে সাহায্য করে। একটি Mutation কুয়েরি ক্লায়েন্টকে সার্ভারে ডেটার যেকোনো পরিবর্তন করতে দেয়, যেমন নতুন ডেটা তৈরি করা, পুরানো ডেটা আপডেট করা বা ডেটা মুছে ফেলা।
Mutation এর ব্যবহার
Mutation এর সাহায্যে আপনি ডেটার create, update, বা delete অপারেশন করতে পারেন। যখন ক্লায়েন্ট একটি Mutation কুয়েরি পাঠায়, তখন সার্ভার সেই কুয়েরি অনুযায়ী ডেটা পরিবর্তন করে এবং প্রয়োজনীয় ফলাফল ফেরত দেয়।
Mutation স্কিমা (Schema) উদাহরণ
এখানে একটি Mutation স্কিমা উদাহরণ দেওয়া হলো যা একটি ব্যবহারকারী তৈরি (create) এবং আপডেট (update) করার জন্য ব্যবহৃত হয়:
type Mutation {
createUser(name: String!, email: String!, age: Int!): User
updateUser(id: ID!, name: String, email: String, age: Int): User
}
এখানে:
- createUser: একটি নতুন ইউজার তৈরি করে। এটি একটি
name,email, এবংageইনপুট নেয় এবং একটিUserঅবজেক্ট ফেরত দেয়। - updateUser: একটি বিদ্যমান ইউজার আপডেট করে। এটি
idদিয়ে একটি নির্দিষ্ট ইউজার চিহ্নিত করে এবংname,email, বাageপরিবর্তন করতে পারে। এটি একটিUserঅবজেক্ট ফেরত দেয় যা আপডেটেড ইউজারের তথ্য ধারণ করে।
Mutation কুয়েরি উদাহরণ
Mutation এর সাহায্যে আপনি ডেটা পরিবর্তন করার জন্য কুয়েরি পাঠাতে পারেন। নিচে দুটি উদাহরণ দেওয়া হলো:
১. ইউজার তৈরি (Create User)
mutation {
createUser(name: "John Doe", email: "john.doe@example.com", age: 30) {
id
name
email
}
}
এটি সার্ভারকে বলছে একটি নতুন User তৈরি করতে যেখানে নাম John Doe, ইমেইল john.doe@example.com, এবং বয়স 30। সার্ভার ইউজারের id, name, এবং email ফেরত পাঠাবে।
২. ইউজার আপডেট (Update User)
mutation {
updateUser(id: "12345", name: "Jane Doe", email: "jane.doe@example.com") {
id
name
email
}
}
এটি সার্ভারকে বলছে যে, id 12345 এর ইউজারের name এবং email আপডেট করতে। সার্ভার আপডেট হওয়া ইউজারের id, name, এবং email ফেরত পাঠাবে।
Mutation এর রেজোলভার (Resolver)
প্রতিটি Mutation অপারেশনকে একটি resolver দ্বারা প্রক্রিয়া করা হয়। একটি resolver হল একটি ফাংশন যা সার্ভারে যে পরিবর্তনটি করতে হবে তা নির্ধারণ করে এবং তারপর ফলস্বরূপ ডেটা ক্লায়েন্টকে ফেরত দেয়।
উদাহরণস্বরূপ, একটি createUser Mutation এর জন্য resolver এইভাবে দেখতে পারে:
const resolvers = {
Mutation: {
createUser: (parent, args, context, info) => {
const { name, email, age } = args;
// নতুন ইউজার তৈরি করার লজিক
const newUser = { id: '12345', name, email, age };
return newUser;
},
updateUser: (parent, args, context, info) => {
const { id, name, email, age } = args;
// ইউজার আপডেট করার লজিক
const updatedUser = { id, name: name || "Existing Name", email, age };
return updatedUser;
}
}
};
এখানে:
- createUser resolver একটি নতুন ইউজার তৈরি করে এবং ইউজারের তথ্য (যেমন
id,name,email) ফেরত পাঠায়। - updateUser resolver একটি বিদ্যমান ইউজার আপডেট করে এবং নতুন তথ্য ফেরত পাঠায়।
Mutation এবং Query এর পার্থক্য
| Feature | Query | Mutation |
|---|---|---|
| কার্য | ডেটা পড়া (fetching data) | ডেটা পরিবর্তন করা (modifying data) |
| পুনরাবৃত্তি | একই কুয়েরি বারবার করা যায় | একাধিক mutation একই সময়ে করা যায় |
| ফলাফল | সাধারণত শুধুমাত্র ডেটা ফেরত আসে | ডেটার পরিবর্তন বা নতুন ডেটা তৈরি হয় |
| অপারেশন | read-only (পড়তে পারবে) | write-operation (লিখতে বা পরিবর্তন করতে পারে) |
সারাংশ
Mutation হল GraphQL-এর একটি গুরুত্বপূর্ণ ফিচার যা ডেটা পরিবর্তন, সৃষ্টি বা মুছে ফেলার কাজ করে। এটি Query থেকে আলাদা, কারণ Query শুধুমাত্র ডেটা পড়ার জন্য ব্যবহৃত হয়, কিন্তু Mutation ডেটাকে আপডেট, তৈরি, বা মুছে ফেলার জন্য ব্যবহৃত হয়। Mutation কুয়েরি পাঠানোর মাধ্যমে ক্লায়েন্ট ডেটার পরিবর্তন ঘটাতে পারে এবং সার্ভার সেই পরিবর্তিত ডেটা ফেরত পাঠায়।
গ্রাফকিউএল (GraphQL)-এ Mutation হল একটি বিশেষ ধরনের অপারেশন যা ডেটার পরিবর্তন বা আপডেট করার জন্য ব্যবহৃত হয়। GraphQL-এর মাধ্যমে, কুয়েরির সাহায্যে আমরা ডেটা পড়তে পারলেও, Mutation এর মাধ্যমে ডেটা তৈরি, পরিবর্তন, অথবা মুছে ফেলতে পারি। এটি ক্লায়েন্টকে সার্ভারের ডেটা সম্পাদনা করার ক্ষমতা দেয় এবং এই প্রক্রিয়ায় আমরা ডেটার অবস্থা পরিবর্তন করতে পারি।
Mutation কী?
Mutation হল সেই GraphQL অপারেশন যা সার্ভারের ডেটা পরিবর্তন বা তৈরি করার জন্য ব্যবহৃত হয়। যেমন:
- নতুন ডেটা তৈরি করা (যেমন নতুন ইউজার তৈরি)
- পূর্ববর্তী ডেটা আপডেট করা (যেমন ইউজারের নাম বা ইমেইল পরিবর্তন)
- ডেটা মুছে ফেলা (যেমন একটি পোস্ট বা কমেন্ট মুছে ফেলা)
যেহেতু Mutation এর মাধ্যমে ডেটার পরিবর্তন ঘটানো হয়, এটি সাধারণত ক্লায়েন্ট থেকে একটি ইনপুট গ্রহণ করে এবং সার্ভার সেই অনুযায়ী ডেটা প্রসেস করে।
Mutation এর মাধ্যমে ডেটা পরিবর্তন
GraphQL-এ Mutation এর মাধ্যমে ডেটা পরিবর্তন করতে হলে, Mutation অপারেশনটি স্কিমাতে ডিফাইন করতে হয়। Mutation এর মাধ্যমে আপনি যেসব অপারেশন করতে পারবেন তা ক্লায়েন্টের প্রয়োজন অনুযায়ী নির্ধারণ করা হয়।
Mutation-এর সিনট্যাক্স:
mutation {
createUser(name: "John Doe", email: "john.doe@example.com") {
id
name
email
}
}
এই উদাহরণে, আমরা একটি createUser Mutation ব্যবহার করেছি, যা নতুন একটি ইউজার তৈরি করবে। এই Mutation এর মাধ্যমে:
nameএবংemailইনপুট প্রদান করা হয়েছে- রিটার্ন হিসাবে
id,name, এবংemailফেরত আসবে
Mutation এর উদাহরণ
ধরুন, আমরা একটি ব্লগ সিস্টেমে কাজ করছি, এবং আমরা চাই একটি নতুন পোস্ট তৈরি করতে। তাহলে আমরা একটি Mutation ব্যবহার করতে পারি যা পোস্ট তৈরি করবে এবং তৈরি হওয়া পোস্টের ডেটা রিটার্ন করবে।
Mutation এর উদাহরণ:
mutation {
createPost(title: "GraphQL Mutation Example", content: "This is an example of mutation in GraphQL.") {
id
title
content
}
}
এখানে:
createPostহল Mutation টাইপ যা নতুন পোস্ট তৈরি করবে।- ইনপুট হিসাবে
titleএবংcontentপ্রদান করা হয়েছে। - রিটার্ন ভ্যালু হিসাবে
id,title, এবংcontentফিল্ড ফিরিয়ে আনা হবে।
Mutation Result:
{
"data": {
"createPost": {
"id": "1",
"title": "GraphQL Mutation Example",
"content": "This is an example of mutation in GraphQL."
}
}
}
এখানে, নতুন পোস্ট তৈরি হয়েছে এবং তার সাথে id, title, এবং content ডেটা ফিরে এসেছে।
Mutation এর মাধ্যমে ডেটা আপডেট করা
Mutation ব্যবহার করে আপনি বিদ্যমান ডেটা আপডেটও করতে পারেন। ধরুন, আপনি একটি ইউজারের নাম পরিবর্তন করতে চান। এজন্য আপনি একটি Mutation ব্যবহার করতে পারেন।
Mutation Example:
mutation {
updateUser(id: "1", name: "John Smith") {
id
name
}
}
এখানে:
updateUserহল Mutation টাইপ যা ইউজারের নাম আপডেট করবে।idএবংnameইনপুট হিসাবে প্রদান করা হয়েছে।- রিটার্ন হিসেবে
idএবংnameপ্রদান করা হবে।
Mutation Result:
{
"data": {
"updateUser": {
"id": "1",
"name": "John Smith"
}
}
}
এখানে, ইউজারের নাম সফলভাবে আপডেট হয়েছে।
Mutation এর মাধ্যমে ডেটা মুছে ফেলা
Mutation এর মাধ্যমে আপনি ডেটা মুছেও ফেলতে পারেন। যেমন, আপনি একটি ব্লগ পোস্ট মুছে ফেলতে চান, তাহলে আপনি একটি deletePost Mutation ব্যবহার করতে পারেন।
Mutation Example:
mutation {
deletePost(id: "1") {
id
title
}
}
এখানে:
deletePostহল Mutation টাইপ যা একটি পোস্ট মুছে ফেলবে।idইনপুট হিসেবে প্রদান করা হয়েছে, যা মুছে ফেলা পোস্টের আইডি।- রিটার্ন হিসাবে
idএবংtitleপ্রদান করা হবে, যাতে নিশ্চিত হওয়া যায় যে কোন পোস্টটি মুছে ফেলা হয়েছে।
Mutation Result:
{
"data": {
"deletePost": {
"id": "1",
"title": "GraphQL Mutation Example"
}
}
}
এখানে, পোস্ট সফলভাবে মুছে ফেলা হয়েছে এবং তার id ও title রিটার্ন করা হয়েছে।
সারাংশ
Mutation GraphQL-এর একটি গুরুত্বপূর্ণ অংশ যা ডেটা পরিবর্তন, তৈরি বা মুছে ফেলতে ব্যবহৃত হয়। এটি Query থেকে আলাদা কারণ Query শুধুমাত্র ডেটা পড়তে ব্যবহৃত হয়, কিন্তু Mutation ডেটার অবস্থা পরিবর্তন করে। আপনি Mutation এর মাধ্যমে নতুন ডেটা তৈরি, পুরনো ডেটা আপডেট এবং ডেটা মুছতে পারবেন। এই প্রক্রিয়াটি API এর কার্যকারিতা এবং ডেটার নিয়ন্ত্রণের জন্য অত্যন্ত গুরুত্বপূর্ণ।
গ্রাফকিউএল (GraphQL)-এ Mutation হলো ডেটার পরিবর্তন বা আপডেট করার জন্য ব্যবহৃত একটি কুয়েরি অপারেশন। যেখানে Query শুধুমাত্র ডেটা পড়ার জন্য ব্যবহৃত হয়, সেখানে Mutation ব্যবহার করে নতুন ডেটা তৈরি করা, ডেটা আপডেট করা বা ডেটা মুছে ফেলা যায়। Arguments এবং Input Types Mutation-এ ব্যবহার করা হয় যাতে আপনি সার্ভারে ডেটা প্রেরণ করতে পারেন এবং সেই ডেটাকে প্রক্রিয়া করতে পারেন।
এখানে আমরা দেখব কিভাবে Arguments এবং Input Types ব্যবহার করে Mutation পরিচালনা করা হয়।
Mutation এর মৌলিক ধারণা
GraphQL-এ, Mutation হল একটি বিশেষ ধরনের কুয়েরি যা ডেটার পরিবর্তন বা আপডেট ঘটায়। Mutation সাধারণত ইনপুট আর্গুমেন্ট গ্রহণ করে এবং সেই অনুযায়ী ডেটা তৈরি, আপডেট বা ডিলিট করে।
Mutation Syntax:
mutation {
updateUser(id: "1", name: "New Name") {
id
name
}
}
এখানে updateUser একটি Mutation ফিল্ড এবং এর মধ্যে id এবং name হল ইনপুট আর্গুমেন্টস।
Arguments এবং Input Types ব্যবহার করে Mutation পরিচালনা
Arguments হল কুয়েরির সাথে যুক্ত আর্গুমেন্ট যা ব্যবহারকারী বা ক্লায়েন্ট থেকে ইনপুট হিসেবে আসে। Input Types ব্যবহার করা হয় যখন একাধিক আর্গুমেন্ট একত্রিত করে একটি কাঠামোবদ্ধ ইনপুট তৈরির প্রয়োজন হয়।
১. Mutation-এর জন্য Input Type তৈরি করা
যতদিন না পর্যন্ত ইনপুটের জন্য একাধিক ফিল্ড প্রয়োজন না, ততদিন আপনি সরাসরি আর্গুমেন্ট ব্যবহার করতে পারেন। তবে যখন অনেকগুলি ফিল্ডের মাধ্যমে ইনপুট প্রেরণ করতে হয়, তখন Input Type ব্যবহার করা হয়।
UserInputType নামের একটি Input Type তৈরি করা যাক, যা name, email, এবং age ধারণ করবে:
const { GraphQLInputObjectType, GraphQLString, GraphQLInt } = require('graphql');
// UserInputType তৈরি করা
const UserInputType = new GraphQLInputObjectType({
name: 'UserInput',
fields: () => ({
name: { type: GraphQLString },
email: { type: GraphQLString },
age: { type: GraphQLInt }
})
});
এখানে UserInputType ইনপুট হিসেবে নাম, ইমেইল এবং বয়স গ্রহণ করবে।
২. Mutation তৈরি করা
এবার আমরা একটি Mutation তৈরি করব যা একটি নতুন ইউজার তৈরি করবে। Mutation এ UserInputType ইনপুট টাইপের মাধ্যমে ইউজারের ডেটা গ্রহণ করা হবে।
const { GraphQLObjectType, GraphQLString, GraphQLID } = require('graphql');
const UserType = require('./UserType'); // পূর্বে তৈরি UserType এর কোড
// Mutation টাইপ তৈরি করা
const Mutation = new GraphQLObjectType({
name: 'Mutation',
fields: {
addUser: {
type: UserType, // যে টাইপের ডেটা ফেরত আসবে
args: {
input: { type: UserInputType } // ইনপুট আর্গুমেন্ট (UserInputType)
},
resolve(parent, args) {
// ইনপুট আর্গুমেন্ট থেকে ডেটা গ্রহণ
const { name, email, age } = args.input;
// নতুন ইউজার তৈরি (এটি সাধারণত ডাটাবেস অপারেশন হতে পারে)
const user = {
id: "1", // উদাহরণস্বরূপ id
name,
email,
age
};
// তৈরি করা ইউজারটি ফেরত পাঠানো
return user;
}
}
}
});
এখানে, addUser একটি Mutation ফিল্ড যা UserInputType ইনপুট আর্গুমেন্ট গ্রহণ করে এবং একটি নতুন UserType রিটার্ন করে।
৩. Mutation কিভাবে কুয়েরি করা যায়
এখন, ক্লায়েন্ট থেকে কিভাবে এই Mutation কুয়েরি করা হবে তা দেখুন। এটি সাধারণত একটি POST রিকুয়েস্টের মাধ্যমে সার্ভারে পাঠানো হয়।
Mutation কুয়েরি:
mutation {
addUser(input: { name: "John Doe", email: "john@example.com", age: 25 }) {
id
name
email
age
}
}
এখানে, আমরা addUser Mutation কুয়েরি করছি এবং input আর্গুমেন্টে ইউজারের নাম, ইমেইল এবং বয়স পাঠাচ্ছি।
ফলাফল:
{
"data": {
"addUser": {
"id": "1",
"name": "John Doe",
"email": "john@example.com",
"age": 25
}
}
}
এখানে, id, name, email, এবং age এর মানগুলি সফলভাবে ফিরিয়ে দেওয়া হয়েছে, যা নতুন ইউজার তৈরি করার পরে সার্ভার থেকে প্রাপ্ত ফলাফল।
৪. Mutation-এর জন্য Argument ব্যবহার করা
যখন ইনপুটগুলি খুব সাধারণ বা অল্প ফিল্ডের জন্য হয়, তখন আপনি Argument ব্যবহার করতে পারেন, যেমন:
const { GraphQLObjectType, GraphQLString, GraphQLID } = require('graphql');
// Mutation টাইপ তৈরি করা
const Mutation = new GraphQLObjectType({
name: 'Mutation',
fields: {
updateUser: {
type: UserType, // যে টাইপের ডেটা ফেরত আসবে
args: {
id: { type: GraphQLID }, // ইউজারের id আর্গুমেন্ট
name: { type: GraphQLString },
email: { type: GraphQLString }
},
resolve(parent, args) {
// ইউজারের ডেটা আপডেট করা
const { id, name, email } = args;
// এটি একটি সিম্পল ফিক্সড রেসপন্স
return {
id,
name: name || "Updated Name", // নাম পরিবর্তন করা
email: email || "updated@example.com"
};
}
}
}
});
এখানে, আমরা ইউজারের id, name, এবং email আর্গুমেন্ট গ্রহণ করছি এবং সেই অনুযায়ী ইউজার আপডেট করছি।
Mutation কুয়েরি:
mutation {
updateUser(id: "1", name: "Jane Doe", email: "jane@example.com") {
id
name
email
}
}
ফলাফল:
{
"data": {
"updateUser": {
"id": "1",
"name": "Jane Doe",
"email": "jane@example.com"
}
}
}
এখানে, id, name, এবং email আপডেট করা হয়েছে।
সারাংশ
GraphQL-এ Mutation ব্যবহার করে আপনি ডেটা তৈরি, আপডেট বা মুছে ফেলতে পারেন। Arguments এবং Input Types Mutation পরিচালনার জন্য অত্যন্ত গুরুত্বপূর্ণ টুলস, যেগুলি আপনার API-কে আরও শক্তিশালী এবং নমনীয় করে তোলে। Arguments সাধারণ ইনপুট গ্রহণের জন্য এবং Input Types একাধিক ফিল্ডের ডেটা পাঠানোর জন্য ব্যবহৃত হয়। Mutation কুয়েরি করলে আপনি সার্ভারে ডেটা প্রেরণ করতে এবং সেই অনুযায়ী ফলাফল ফেরত পেতে পারেন।
গ্রাফকিউএল (GraphQL)-এ Multiple Mutations এবং Response Structure দুটি গুরুত্বপূর্ণ ধারণা যা ডেটা পরিবর্তনের কার্যকারিতা এবং ফলাফল প্রক্রিয়াকরণে সহায়ক। Multiple Mutations ব্যবহার করে একাধিক পরিবর্তন একই কুয়েরির মাধ্যমে করা যায় এবং Response Structure নিশ্চিত করে যে, সঠিকভাবে সমস্ত পরিবর্তন বা ডেটার ফলাফল কিভাবে ফিরে আসবে।
Multiple Mutations
গ্রাফকিউএল-এ, একাধিক মিউটেশনকে একটি কুয়েরির মধ্যে একত্রিত করা সম্ভব। এটি বেশ কার্যকরী যখন আপনি একাধিক ডেটা পরিবর্তন করতে চান কিন্তু সেগুলো একে অপরের সাথে সম্পর্কিত নয়। Multiple Mutations একসাথে একটি রিকুয়েস্টে পাঠানো হলে, সার্ভার প্রতিটি মিউটেশন আলাদাভাবে সম্পাদন করে এবং প্রতিটি মিউটেশনের ফলাফল ফেরত পাঠায়।
Multiple Mutations এর উদাহরণ:
ধরা যাক, আপনি একটি ব্যবহারকারী তৈরি করতে চান এবং তার সঙ্গে একটি নতুন পণ্যের তথ্য আপডেট করতে চান। এই দুটি মিউটেশন একসাথে পাঠানোর জন্য আপনি নীচের মতো কুয়েরি করতে পারেন:
mutation {
createUser(name: "John Doe", email: "john@example.com") {
id
name
}
updateProduct(id: "101", price: 199.99) {
id
price
}
}
এখানে:
- createUser: একটি নতুন ব্যবহারকারী তৈরি করছে।
- updateProduct: একটি পণ্যের মূল্য আপডেট করছে।
এ দুটি মিউটেশন একসাথে পাঠানো হয়েছে, এবং প্রতিটি মিউটেশন সফলভাবে সম্পন্ন হলে তার ফলাফল (যেমন id এবং name বা id এবং price) আলাদাভাবে ফিরে আসবে।
Multiple Mutations এর কার্যকারিতা
- একটি রাউন্ড-ট্রিপে একাধিক মিউটেশন: একাধিক মিউটেশন একই সময়ে পাঠানো সম্ভব, ফলে ক্লায়েন্ট এবং সার্ভারের মধ্যে একাধিক যোগাযোগের প্রয়োজন হয় না।
- অধিক কার্যকারিতা: এটি ডেটার পরিবর্তন দ্রুত এবং একসাথে করতে সাহায্য করে, ফলে অ্যাপ্লিকেশন আরও দ্রুত কাজ করে।
Response Structure
GraphQL কুয়েরি বা মিউটেশন করলে, সার্ভার একটি নির্দিষ্ট Response Structure প্রদান করে। এই স্ট্রাকচার ক্লায়েন্টকে কেবল সেই ডেটা প্রদান করে যা তারা চেয়েছে, এবং ডেটার গঠন ক্লায়েন্টের কুয়েরির ওপর ভিত্তি করে নির্ধারিত হয়।
Basic Response Structure:
একটি সাধারণ মিউটেশন বা কুয়েরির উত্তর একটি JSON অবজেক্ট হিসেবে প্রদান করা হয়, যেখানে কুয়েরি বা মিউটেশনের ফলাফল একটি data প্রপার্টির মধ্যে থাকে।
উদাহরণ:
mutation {
createUser(name: "John Doe", email: "john@example.com") {
id
name
}
}
এই মিউটেশনের জন্য সার্ভারের প্রতিক্রিয়া হবে:
{
"data": {
"createUser": {
"id": "1",
"name": "John Doe"
}
}
}
এখানে:
- data: এটি মূল ফলাফল যেটি ক্লায়েন্টের কুয়েরির ভিত্তিতে ফিরে আসে।
- createUser: এটি মিউটেশনের ফলাফল, যেখানে
idএবংnameপ্রদান করা হয়েছে।
Multiple Mutations এর Response Structure:
যখন আপনি একাধিক মিউটেশন পাঠান, প্রতিটি মিউটেশনের জন্য একটি আলাদা ফলাফল ফিরিয়ে আসে। প্রতিটি মিউটেশনের ফলাফল একটি ভিন্ন ফিল্ডে থাকবে, যেমন:
mutation {
createUser(name: "John Doe", email: "john@example.com") {
id
name
}
updateProduct(id: "101", price: 199.99) {
id
price
}
}
এটি এইভাবে একটি প্রতিক্রিয়া প্রদান করবে:
{
"data": {
"createUser": {
"id": "1",
"name": "John Doe"
},
"updateProduct": {
"id": "101",
"price": 199.99
}
}
}
এখানে:
- createUser এবং updateProduct আলাদা আলাদা ফিল্ড হিসেবে ফলাফল পাচ্ছে।
- প্রতিটি মিউটেশন তার নিজস্ব ফলাফল প্রদান করছে, যেমন ইউজারের
idএবংname, এবং পণ্যেরidএবংprice।
Error Handling in Multiple Mutations
গ্রাফকিউএল একাধিক মিউটেশন করার সময় যদি কোনো একটি মিউটেশন ত্রুটি (error) ফেরত দেয়, তবে সার্ভার সাধারণত একটি errors ফিল্ডেও ত্রুটির বিস্তারিত বার্তা ফেরত পাঠাবে। এটি আপনাকে জানিয়ে দেয় কোন মিউটেশনটি ব্যর্থ হয়েছে এবং কেন।
Error Response Example:
{
"data": {
"createUser": {
"id": "1",
"name": "John Doe"
},
"updateProduct": null
},
"errors": [
{
"message": "Product ID not found",
"locations": [
{
"line": 3,
"column": 3
}
],
"path": ["updateProduct"]
}
]
}
এখানে:
- updateProduct এর ফলাফল
nullএসেছে, কারণ তাতে একটি ত্রুটি ঘটেছে (যেমনProduct ID not found)। - errors ফিল্ডে ত্রুটির বিস্তারিত বার্তা দেওয়া হয়েছে, যা ক্লায়েন্টকে সাহায্য করবে ত্রুটি চিহ্নিত করতে।
সারাংশ
Multiple Mutations গ্রাফকিউএলে একাধিক ডেটা পরিবর্তন একসাথে করার সুযোগ দেয়, যা কার্যকারিতা এবং কার্যক্ষমতা বৃদ্ধি করে। একই কুয়েরির মধ্যে একাধিক মিউটেশন পাঠানো এবং তাদের ফলাফল পাওয়া যায়। Response Structure ক্লায়েন্টকে সঠিকভাবে ফলাফল প্রদান করতে সহায়ক, যেখানে প্রতিটি মিউটেশনের ফলাফল একটি পৃথক ফিল্ডে থাকবে এবং ত্রুটির ক্ষেত্রে পৃথকভাবে তার বিশদ বার্তা প্রদান করা হবে।
Read more