গ্রাফকিউএল হলো একটি ডেটা কোয়েরি ভাষা এবং সার্ভার-সাইড রানটাইম যা ক্লায়েন্টদের কাছে API-এর মাধ্যমে ডেটা চাওয়ার একটি আরও নমনীয় এবং কার্যকর উপায় প্রদান করে। এটি Facebook দ্বারা তৈরি এবং ২০১৫ সালে ওপেন-সোর্স করা হয়। GraphQL মূলত REST API এর একটি বিকল্প হিসেবে কাজ করে, যা ডেভেলপারদের শুধুমাত্র প্রয়োজনীয় ডেটা চাইতে এবং পেতে সহায়তা করে, কোন অতিরিক্ত বা অপ্রয়োজনীয় ডেটা ছাড়াই।
GraphQL হলো একটি ডেটা-কুয়েরি ভাষা (Query Language) যা API থেকে ডেটা আনার জন্য ব্যবহৃত হয়। এটি Facebook-এ তৈরি করা হয়েছিল এবং এখন এটি ওপেন সোর্স। GraphQL-এর মাধ্যমে ডেভেলপাররা ঠিক সেই ডেটা পেতে পারেন যা তাদের প্রয়োজন, অর্থাৎ এটি over-fetching (প্রয়োজনের বেশি ডেটা আনা) এবং under-fetching (প্রয়োজনের কম ডেটা আনা) সমস্যা সমাধান করে। GraphQL মূলত REST API-এর বিকল্প হিসেবে ব্যবহৃত হয়।
GraphQL তৈরি করা হয় ২০১২ সালে Facebook-এর অভ্যন্তরীণ প্রোজেক্ট হিসেবে। এর প্রধান লক্ষ্য ছিল বড় এবং জটিল ডেটা স্ট্রাকচার সমর্থন করা এবং ডেভেলপারদের জন্য ডেটা কুয়েরি করা সহজ করা। ২০১৫ সালে Facebook এটি ওপেন সোর্স করে এবং এরপর থেকে এটি অনেক জনপ্রিয় হয়ে ওঠে।
GraphQL এর প্রধান উপাদানগুলো হলো: Schemas, Types, Queries, Mutations, এবং Subscriptions।
১. Schemas
Schema হলো GraphQL এর কাঠামো, যা API-এর সমস্ত টাইপ এবং সম্পর্কগুলি নির্ধারণ করে। GraphQL API এর একটি Schema এর মাধ্যমে নির্ধারণ করা হয় কোন ধরনের ডেটা উপলব্ধ এবং তা কীভাবে কুয়েরি করা যাবে।
২. Types
GraphQL এ Types ব্যবহার করে ডেটার ধরন নির্ধারণ করা হয়। একটি Schema এর মধ্যে বিভিন্ন ধরনের টাইপ থাকতে পারে, যেমন:
Int, Float, String, Boolean, এবং ID।৩. Queries
GraphQL এ Query ব্যবহার করে ডেটা আনা হয়। Query নির্দিষ্ট করে দেয় ঠিক কোন ফিল্ডগুলো থেকে ডেটা আনা হবে।
৪. Mutations
Mutation ব্যবহার করে GraphQL-এ ডেটা পরিবর্তন করা যায়, যেমন নতুন ডেটা যোগ করা, ডেটা আপডেট করা, বা ডেটা মুছে ফেলা।
৫. Subscriptions
Subscription ব্যবহার করে রিয়েল-টাইম ডেটা পরিবর্তনগুলো দেখা যায়। যখন সার্ভারে কোনো পরিবর্তন ঘটে, Subscription এর মাধ্যমে ক্লায়েন্ট তৎক্ষণাৎ সেই পরিবর্তন দেখতে পারে।
GraphQL Node.js-এ ব্যবহারের জন্য Express.js বা Apollo Server এর মতো বিভিন্ন সার্ভার লাইব্রেরি রয়েছে। নিচে Apollo Server দিয়ে GraphQL API তৈরি করার ধাপ দেওয়া হলো:
ধাপ ১: একটি Node.js প্রোজেক্ট তৈরি করা
mkdir graphql-server
cd graphql-server
npm init -y
ধাপ ২: Apollo Server এবং GraphQL ইনস্টল করা
npm install apollo-server graphql
ধাপ ৩: একটি সিম্পল GraphQL সার্ভার তৈরি করা
const { ApolloServer, gql } = require('apollo-server');
// Schema ডিফাইন করা
const typeDefs = gql`
type Query {
hello: String
}
`;
// Resolvers ডিফাইন করা
const resolvers = {
Query: {
hello: () => 'Hello, GraphQL!',
},
};
// সার্ভার তৈরি করা
const server = new ApolloServer({ typeDefs, resolvers });
server.listen().then(({ url }) => {
console.log(`🚀 Server ready at ${url}`);
});
ধাপ ৪: সার্ভার চালানো
bash
Copy code
node index.js
এই কোডটি চালানোর পরে ব্রাউজারে http://localhost:4000/ এ গেলে GraphQL এর Playground এ ঢুকে কুয়েরি চালানো যাবে।
Query উদাহরণ
GraphQL এ একটি সাধারণ কুয়েরি এরকম হতে পারে:
{
user(id: 1) {
name
email
}
}
এই কুয়েরি ব্যবহার করে user নামে একটি অবজেক্ট থেকে name এবং email ফিল্ড আনা হয়।
Mutation উদাহরণ
GraphQL এ Mutation এর মাধ্যমে ডেটা আপডেট বা তৈরি করা হয়:
mutation {
createUser(name: "John", email: "john@example.com") {
id
name
email
}
}
এই Mutation নতুন একটি ইউজার তৈরি করবে এবং সেই ইউজারের id, name, এবং email ফেরত দেবে।
১. একটি সিম্পল Schema তৈরি করা
const typeDefs = gql`
type Query {
message: String
}
`;
const resolvers = {
Query: {
message: () => 'This is a GraphQL API!',
},
};
২. ডাইনামিক কুয়েরি করা
const typeDefs = gql`
type Query {
user(id: Int!): User
}
type User {
id: Int
name: String
email: String
}
`;
const resolvers = {
Query: {
user: (_, { id }) => {
const users = [
{ id: 1, name: 'John Doe', email: 'john@example.com' },
{ id: 2, name: 'Jane Doe', email: 'jane@example.com' },
];
return users.find(user => user.id === id);
},
},
};
৩. Mutation তৈরি করা
const typeDefs = gql`
type Mutation {
createUser(name: String!, email: String!): User
}
type User {
id: Int
name: String
email: String
}
`;
let users = [];
const resolvers = {
Mutation: {
createUser: (_, { name, email }) => {
const newUser = { id: users.length + 1, name, email };
users.push(newUser);
return newUser;
},
},
};
| বিষয় | GraphQL | REST API |
|---|---|---|
| ডেটা কুয়েরি | ক্লায়েন্ট নির্ধারিত | সার্ভার নির্ধারিত |
| এন্ডপয়েন্ট | একটি এন্ডপয়েন্ট | প্রতিটি রিসোর্সের জন্য আলাদা এন্ডপয়েন্ট |
| Over-fetching | নেই | আছে |
| Under-fetching | নেই | আছে |
| রিয়েল-টাইম ডেটা | Subscription দিয়ে সম্ভব | নেই |
GraphQL হলো একটি আধুনিক API কুয়েরি ভাষা, যা ডেভেলপারদের API থেকে প্রয়োজনীয় ডেটা সুনির্দিষ্টভাবে আনার সুবিধা দেয়। এর শক্তিশালী টাইপ সিস্টেম এবং ক্লায়েন্ট-কন্ট্রোলড কুয়েরি এটিকে REST API-এর চেয়ে আরও কার্যকর করে তুলেছে। যদিও এটি শেখার জন্য কিছুটা সময় লাগতে পারে, তবে এর সুবিধা এবং গুণাবলী বড় এবং জটিল অ্যাপ্লিকেশন তৈরি করতে GraphQL কে একটি আদর্শ সমাধান হিসেবে গড়ে তুলেছে।
গ্রাফকিউএল হলো একটি ডেটা কোয়েরি ভাষা এবং সার্ভার-সাইড রানটাইম যা ক্লায়েন্টদের কাছে API-এর মাধ্যমে ডেটা চাওয়ার একটি আরও নমনীয় এবং কার্যকর উপায় প্রদান করে। এটি Facebook দ্বারা তৈরি এবং ২০১৫ সালে ওপেন-সোর্স করা হয়। GraphQL মূলত REST API এর একটি বিকল্প হিসেবে কাজ করে, যা ডেভেলপারদের শুধুমাত্র প্রয়োজনীয় ডেটা চাইতে এবং পেতে সহায়তা করে, কোন অতিরিক্ত বা অপ্রয়োজনীয় ডেটা ছাড়াই।
GraphQL হলো একটি ডেটা-কুয়েরি ভাষা (Query Language) যা API থেকে ডেটা আনার জন্য ব্যবহৃত হয়। এটি Facebook-এ তৈরি করা হয়েছিল এবং এখন এটি ওপেন সোর্স। GraphQL-এর মাধ্যমে ডেভেলপাররা ঠিক সেই ডেটা পেতে পারেন যা তাদের প্রয়োজন, অর্থাৎ এটি over-fetching (প্রয়োজনের বেশি ডেটা আনা) এবং under-fetching (প্রয়োজনের কম ডেটা আনা) সমস্যা সমাধান করে। GraphQL মূলত REST API-এর বিকল্প হিসেবে ব্যবহৃত হয়।
GraphQL তৈরি করা হয় ২০১২ সালে Facebook-এর অভ্যন্তরীণ প্রোজেক্ট হিসেবে। এর প্রধান লক্ষ্য ছিল বড় এবং জটিল ডেটা স্ট্রাকচার সমর্থন করা এবং ডেভেলপারদের জন্য ডেটা কুয়েরি করা সহজ করা। ২০১৫ সালে Facebook এটি ওপেন সোর্স করে এবং এরপর থেকে এটি অনেক জনপ্রিয় হয়ে ওঠে।
GraphQL এর প্রধান উপাদানগুলো হলো: Schemas, Types, Queries, Mutations, এবং Subscriptions।
১. Schemas
Schema হলো GraphQL এর কাঠামো, যা API-এর সমস্ত টাইপ এবং সম্পর্কগুলি নির্ধারণ করে। GraphQL API এর একটি Schema এর মাধ্যমে নির্ধারণ করা হয় কোন ধরনের ডেটা উপলব্ধ এবং তা কীভাবে কুয়েরি করা যাবে।
২. Types
GraphQL এ Types ব্যবহার করে ডেটার ধরন নির্ধারণ করা হয়। একটি Schema এর মধ্যে বিভিন্ন ধরনের টাইপ থাকতে পারে, যেমন:
Int, Float, String, Boolean, এবং ID।৩. Queries
GraphQL এ Query ব্যবহার করে ডেটা আনা হয়। Query নির্দিষ্ট করে দেয় ঠিক কোন ফিল্ডগুলো থেকে ডেটা আনা হবে।
৪. Mutations
Mutation ব্যবহার করে GraphQL-এ ডেটা পরিবর্তন করা যায়, যেমন নতুন ডেটা যোগ করা, ডেটা আপডেট করা, বা ডেটা মুছে ফেলা।
৫. Subscriptions
Subscription ব্যবহার করে রিয়েল-টাইম ডেটা পরিবর্তনগুলো দেখা যায়। যখন সার্ভারে কোনো পরিবর্তন ঘটে, Subscription এর মাধ্যমে ক্লায়েন্ট তৎক্ষণাৎ সেই পরিবর্তন দেখতে পারে।
GraphQL Node.js-এ ব্যবহারের জন্য Express.js বা Apollo Server এর মতো বিভিন্ন সার্ভার লাইব্রেরি রয়েছে। নিচে Apollo Server দিয়ে GraphQL API তৈরি করার ধাপ দেওয়া হলো:
ধাপ ১: একটি Node.js প্রোজেক্ট তৈরি করা
mkdir graphql-server
cd graphql-server
npm init -y
ধাপ ২: Apollo Server এবং GraphQL ইনস্টল করা
npm install apollo-server graphql
ধাপ ৩: একটি সিম্পল GraphQL সার্ভার তৈরি করা
const { ApolloServer, gql } = require('apollo-server');
// Schema ডিফাইন করা
const typeDefs = gql`
type Query {
hello: String
}
`;
// Resolvers ডিফাইন করা
const resolvers = {
Query: {
hello: () => 'Hello, GraphQL!',
},
};
// সার্ভার তৈরি করা
const server = new ApolloServer({ typeDefs, resolvers });
server.listen().then(({ url }) => {
console.log(`🚀 Server ready at ${url}`);
});
ধাপ ৪: সার্ভার চালানো
bash
Copy code
node index.js
এই কোডটি চালানোর পরে ব্রাউজারে http://localhost:4000/ এ গেলে GraphQL এর Playground এ ঢুকে কুয়েরি চালানো যাবে।
Query উদাহরণ
GraphQL এ একটি সাধারণ কুয়েরি এরকম হতে পারে:
{
user(id: 1) {
name
email
}
}
এই কুয়েরি ব্যবহার করে user নামে একটি অবজেক্ট থেকে name এবং email ফিল্ড আনা হয়।
Mutation উদাহরণ
GraphQL এ Mutation এর মাধ্যমে ডেটা আপডেট বা তৈরি করা হয়:
mutation {
createUser(name: "John", email: "john@example.com") {
id
name
email
}
}
এই Mutation নতুন একটি ইউজার তৈরি করবে এবং সেই ইউজারের id, name, এবং email ফেরত দেবে।
১. একটি সিম্পল Schema তৈরি করা
const typeDefs = gql`
type Query {
message: String
}
`;
const resolvers = {
Query: {
message: () => 'This is a GraphQL API!',
},
};
২. ডাইনামিক কুয়েরি করা
const typeDefs = gql`
type Query {
user(id: Int!): User
}
type User {
id: Int
name: String
email: String
}
`;
const resolvers = {
Query: {
user: (_, { id }) => {
const users = [
{ id: 1, name: 'John Doe', email: 'john@example.com' },
{ id: 2, name: 'Jane Doe', email: 'jane@example.com' },
];
return users.find(user => user.id === id);
},
},
};
৩. Mutation তৈরি করা
const typeDefs = gql`
type Mutation {
createUser(name: String!, email: String!): User
}
type User {
id: Int
name: String
email: String
}
`;
let users = [];
const resolvers = {
Mutation: {
createUser: (_, { name, email }) => {
const newUser = { id: users.length + 1, name, email };
users.push(newUser);
return newUser;
},
},
};
| বিষয় | GraphQL | REST API |
|---|---|---|
| ডেটা কুয়েরি | ক্লায়েন্ট নির্ধারিত | সার্ভার নির্ধারিত |
| এন্ডপয়েন্ট | একটি এন্ডপয়েন্ট | প্রতিটি রিসোর্সের জন্য আলাদা এন্ডপয়েন্ট |
| Over-fetching | নেই | আছে |
| Under-fetching | নেই | আছে |
| রিয়েল-টাইম ডেটা | Subscription দিয়ে সম্ভব | নেই |
GraphQL হলো একটি আধুনিক API কুয়েরি ভাষা, যা ডেভেলপারদের API থেকে প্রয়োজনীয় ডেটা সুনির্দিষ্টভাবে আনার সুবিধা দেয়। এর শক্তিশালী টাইপ সিস্টেম এবং ক্লায়েন্ট-কন্ট্রোলড কুয়েরি এটিকে REST API-এর চেয়ে আরও কার্যকর করে তুলেছে। যদিও এটি শেখার জন্য কিছুটা সময় লাগতে পারে, তবে এর সুবিধা এবং গুণাবলী বড় এবং জটিল অ্যাপ্লিকেশন তৈরি করতে GraphQL কে একটি আদর্শ সমাধান হিসেবে গড়ে তুলেছে।
আপনি আমাকে যেকোনো প্রশ্ন করতে পারেন, যেমনঃ
Are you sure to start over?