GraphQL হল একটি শক্তিশালী কুয়েরি ভাষা যা API এর জন্য ডেটা প্রদান এবং গ্রহণ করতে ব্যবহৃত হয়। এটি ডেটা ফেচিংয়ের জন্য একটি নতুন, আরও কার্যকরী এবং নমনীয় পদ্ধতি প্রদান করে যেখানে ব্যবহারকারী নির্দিষ্ট ডেটা নির্বাচন করতে পারে। GraphQL এবং JSON একে অপরের সাথে খুব ভালোভাবে কাজ করে, কারণ GraphQL API এর মাধ্যমে JSON ফরম্যাটে ডেটা প্রেরণ করে এবং গ্রহণ করে।
GraphQL API একটি কুয়েরি ভাষা এবং রানটাইম পরিবেশ যা ব্যবহারকারীদের তাদের প্রয়োজনীয় ডেটার কাঠামো এবং আকার নির্ধারণ করতে দেয়। এর মূল সুবিধা হল ব্যবহারকারীরা প্রয়োজনীয় ডেটা (যেমন, শুধুমাত্র নির্দিষ্ট ফিল্ডস) চয়ন করতে পারে, যেটি সাধারণ REST API তে সম্ভব নয়।
GraphQL API তে, ক্লায়েন্টরা একটি query অথবা mutation পাঠায় এবং সার্ভার সেই অনুযায়ী JSON ফরম্যাটে ডেটা রিটার্ন করে।
GraphQL API এবং JSON এর মধ্যে ইন্টিগ্রেশন খুবই সরল, কারণ GraphQL সার্ভার সাধারণত JSON ফরম্যাটে রেসপন্স প্রদান করে এবং ক্লায়েন্টরা কুয়েরি (query) পাঠায় যা JSON আউটপুট রিটার্ন করে।
ধরা যাক, একটি গ্রাফকিউএল সার্ভার ব্যবহারকারী সম্পর্কিত তথ্য (যেমন নাম, বয়স এবং শহর) প্রদান করবে। নিচে একটি GraphQL কুয়েরি উদাহরণ দেওয়া হলো:
GraphQL Query Example:
{
user(id: 1) {
name
age
city
}
}
ব্যাখ্যা:
user
হল একটি GraphQL ফিল্ড, যা id
এর মাধ্যমে একটি ব্যবহারকারীর তথ্য নিয়ে আসে।উপরের কুয়েরির রেসপন্সটি JSON ফরম্যাটে হবে। উদাহরণ:
{
"data": {
"user": {
"name": "John Doe",
"age": 30,
"city": "New York"
}
}
}
এখানে, সার্ভার JSON ফরম্যাটে ডেটা প্রদান করেছে, যেখানে data
হল মূল অবজেক্ট এবং user
অবজেক্টের ভেতরে নির্দিষ্ট ডেটা (যেমন নাম, বয়স, শহর) রয়েছে।
GraphQL API থেকে ডেটা ফেচ করার জন্য সাধারণত HTTP POST বা GET পদ্ধতি ব্যবহার করা হয়। এখানে POST পদ্ধতিটি সাধারণত ব্যবহৃত হয়, যেখানে কুয়েরি JSON বডির মাধ্যমে পাঠানো হয়।
একটি HTTP POST রিকোয়েস্টে JSON বডি হিসেবে GraphQL কুয়েরি পাঠানো হয়।
POST Request Example:
POST /graphql HTTP/1.1
Host: example.com
Content-Type: application/json
Authorization: Bearer YOUR_AUTH_TOKEN
{
"query": "{ user(id: 1) { name age city } }"
}
ব্যাখ্যা:
query
: এটি একটি GraphQL query string যা সার্ভারকে জানান দিচ্ছে কী ধরনের ডেটা প্রয়োজন।Authorization
: যদি API নিরাপদ হয়, তাহলে API এর সাথে Bearer token পাঠানো হবে।GraphQL Mutation ডেটা পরিবর্তন করার জন্য ব্যবহৃত হয়, যেমন নতুন ব্যবহারকারী তৈরি করা, বা কোন তথ্য আপডেট করা।
Mutation Example:
mutation {
createUser(name: "Jane Doe", age: 28, city: "Los Angeles") {
id
name
}
}
এই কুয়েরি সার্ভারকে একটি নতুন ব্যবহারকারী তৈরি করতে বলবে এবং সেই ব্যবহারকারীর id
ও name
ফেরত পাঠাবে।
এখানে Node.js ব্যবহার করে GraphQL API সেটআপ এবং JSON ডেটা ফেচ করার একটি উদাহরণ দেওয়া হলো।
প্রথমে, আমরা Apollo Server এবং GraphQL ইনস্টল করব:
npm install apollo-server graphql
const { ApolloServer, gql } = require('apollo-server');
// GraphQL Schema Definition
const typeDefs = gql`
type User {
id: ID
name: String
age: Int
city: String
}
type Query {
user(id: ID!): User
}
`;
// Resolvers for fetching data
const resolvers = {
Query: {
user: (parent, args) => {
return {
id: args.id,
name: "John Doe",
age: 30,
city: "New York"
};
}
}
};
// Apollo Server Setup
const server = new ApolloServer({
typeDefs,
resolvers
});
server.listen().then(({ url }) => {
console.log(`Server ready at ${url}`);
});
এখন, আপনি Node.js বা অন্য যেকোনো ক্লায়েন্ট ব্যবহার করে GraphQL API থেকে JSON ডেটা ফেচ করতে পারেন:
const fetch = require('node-fetch');
const url = 'http://localhost:4000/graphql';
const query = `
query {
user(id: 1) {
name
age
city
}
}
`;
fetch(url, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ query })
})
.then(res => res.json())
.then(data => console.log(data));
Output:
{
"data": {
"user": {
"name": "John Doe",
"age": 30,
"city": "New York"
}
}
}
JSON এবং GraphQL Integration একটি শক্তিশালী কৌশল যা ওয়েব অ্যাপ্লিকেশন বা API ডেভেলপমেন্টে ডেটা প্রেরণ ও গ্রহণের পদ্ধতিকে আরও নমনীয় এবং কার্যকরী করে তোলে। JSON ফরম্যাটে ডেটা রিটার্ন এবং ক্লায়েন্টের পক্ষ থেকে কুয়েরি পাঠানোর মাধ্যমে ডেটা অপ্টিমাইজ করা যায়। JSON এবং GraphQL এর সমন্বয়ে ডেটা ফেচিং এবং ম্যানিপুলেশন খুবই সুবিধাজনক এবং পারফরম্যান্সভিত্তিক হয়।
GraphQL একটি শক্তিশালী কুয়েরি ভাষা যা API এর মাধ্যমে ডেটা রিকোয়েস্ট এবং ম্যানিপুলেশনকে আরও ফ্লেক্সিবল এবং কার্যকরী করে তোলে। এটি মূলত ফেসবুক দ্বারা তৈরি করা হয়েছে এবং এখন এটি অনেক ওয়েব অ্যাপ্লিকেশন এবং সার্ভিসে ব্যবহৃত হয়। GraphQL এর মাধ্যমে আপনি একক রিকোয়েস্টে বিভিন্ন ধরনের ডেটা ফেচ করতে পারেন এবং ক্লায়েন্ট সাইডে ডেটার প্রয়োজনীয় অংশগুলোই রিকোয়েস্ট করতে পারেন।
যেহেতু JSON একটি স্ট্যান্ডার্ড ডেটা ফরম্যাট, GraphQL API এর রেসপন্স এবং রিকোয়েস্টে JSON ব্যবহার করা হয়। GraphQL এ JSON ফরম্যাটের মাধ্যমে ডেটা পাঠানো এবং গ্রহণ করা হয়।
GraphQL ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা আদান-প্রদান করতে JSON ফরম্যাট ব্যবহার করে। GraphQL সাধারণত দুইটি প্রধান জায়গায় JSON ব্যবহার করে:
GraphQL রিকোয়েস্ট সাধারণত একটি JSON অবজেক্ট হিসেবে তৈরি হয়, যেখানে কুয়েরি বা মিউটেশন থাকে এবং এর সাথে কিছু অতিরিক্ত তথ্য থাকতে পারে যেমন ভেরিয়েবল, অপারেশন নাম ইত্যাদি।
ধরা যাক, আমরা একটি গ্রাহকের তথ্য ফেচ করতে চাই যেটি id
, name
এবং email
রিটার্ন করবে। ক্লায়েন্ট একটি JSON অবজেক্ট হিসেবে এটি রিকোয়েস্ট করবে।
GraphQL Query Request (JSON ফরম্যাটে):
{
"query": "query { user(id: 1) { id, name, email } }"
}
ব্যাখ্যা:
"query"
: এখানে গ্রাহকের তথ্য ফেচ করার জন্য কুয়েরি পাঠানো হয়েছে।{ user(id: 1) { id, name, email } }
: এটি হল কুয়েরি যা সার্ভারকে বলে যে, id = 1
এর গ্রাহকের id
, name
এবং email
ফিল্ডগুলো ফেরত দিতে।GraphQL সার্ভার রিকোয়েস্টের উত্তরে JSON ফরম্যাটে ডেটা প্রদান করে। রেসপন্সটি সাধারণত একটি JSON অবজেক্ট থাকে, যেখানে data নামক একটি ফিল্ড থাকে এবং এর মধ্যে রিকোয়েস্ট করা ডেটা থাকে।
যদি সার্ভার গ্রাহকের তথ্য সফলভাবে রিটার্ন করে, তাহলে এটি একটি JSON রেসপন্স হিসেবে পাঠাবে:
GraphQL Response (JSON ফরম্যাটে):
{
"data": {
"user": {
"id": "1",
"name": "John Doe",
"email": "john.doe@example.com"
}
}
}
ব্যাখ্যা:
"data"
: এটি মূল JSON অবজেক্টের মধ্যে থাকা একটি ফিল্ড, যা সার্ভারের রিটার্ন ডেটা ধারণ করে।"user"
: এটি গ্রাহক সম্পর্কিত তথ্য ধারণ করে, যেখানে id
, name
, এবং email
ফিল্ড রয়েছে।GraphQL তে মিউটেশন (Mutation) একটি গুরুত্বপূর্ণ অপারেশন যা ডেটা পরিবর্তন করতে ব্যবহৃত হয় (যেমন ডেটা আপডেট, ইনসার্ট বা ডিলিট)। মিউটেশন রিকোয়েস্টও JSON ফরম্যাটে তৈরি হয় এবং এর রেসপন্সও JSON ফরম্যাটে থাকে।
ধরা যাক, আমরা একটি নতুন ইউজার তৈরি করতে চাই।
GraphQL Mutation Request (JSON ফরম্যাটে):
{
"query": "mutation { createUser(name: \"Jane Doe\", email: \"jane.doe@example.com\") { id, name, email } }"
}
ব্যাখ্যা:
"mutation"
: এটি মিউটেশন অপারেশন শুরু করে, যেখানে createUser
মিউটেশন দিয়ে নতুন ইউজার তৈরি করা হচ্ছে।GraphQL Mutation Response (JSON ফরম্যাটে):
{
"data": {
"createUser": {
"id": "2",
"name": "Jane Doe",
"email": "jane.doe@example.com"
}
}
}
ব্যাখ্যা:
"data"
: এখানে সার্ভারটি সফলভাবে ডেটা রিটার্ন করেছে, যেখানে নতুন ইউজারের id
, name
, এবং email
রয়েছে।GraphQL কুয়েরিতে ভেরিয়েবল ব্যবহার করা যায়, যা JSON ফরম্যাটে পাঠানো হয়। ভেরিয়েবল ব্যবহারের মাধ্যমে কুয়েরি আরও ডাইনামিক এবং পুনঃব্যবহারযোগ্য হতে পারে।
ধরা যাক, আমরা ভেরিয়েবল ব্যবহার করে একটি কুয়েরি তৈরি করতে চাই যা ইউজারের id
দিয়ে তাদের তথ্য ফেচ করবে।
GraphQL Query with Variables Request (JSON ফরম্যাটে):
{
"query": "query getUser($id: ID!) { user(id: $id) { id, name, email } }",
"variables": {
"id": "1"
}
}
ব্যাখ্যা:
"query"
: এখানে কুয়েরি স্ট্রিং রয়েছে, যেখানে $id
একটি ভেরিয়েবল হিসেবে ব্যবহৃত হচ্ছে।"variables"
: এটি একটি JSON অবজেক্ট যা ভেরিয়েবলগুলো ধারণ করে। এখানে $id
এর মান "1"
দেওয়া হয়েছে।GraphQL তে যখন কোনো ত্রুটি ঘটে, তখন তা JSON রেসপন্সের মধ্যে একটি "errors"
ফিল্ডের মাধ্যমে প্রদান করা হয়। ত্রুটি সম্পর্কিত বিস্তারিত তথ্য এই ফিল্ডে থাকে।
GraphQL Error Response (JSON ফরম্যাটে):
{
"errors": [
{
"message": "User not found",
"locations": [{"line": 2, "column": 3}],
"path": ["user"],
"extensions": {
"code": "NOT_FOUND"
}
}
]
}
ব্যাখ্যা:
"errors"
: এটি একটি অ্যারে যা সমস্ত ত্রুটি সম্পর্কিত তথ্য ধারণ করে।"message"
: ত্রুটির বর্ণনা।"path"
: ত্রুটিটি কোন কুয়েরি পাথে ঘটেছে তা দেখায়।GraphQL ব্যবহার করে আপনি JSON ফরম্যাটের মাধ্যমে ডেটা কুয়েরি করতে, ম্যানিপুলেট করতে এবং রিসিভ করতে পারেন, যার ফলে একাধিক রিকোয়েস্টের পরিবর্তে একটি রিকোয়েস্টে প্রয়োজনীয় সমস্ত ডেটা সহজেই একত্রিত করা সম্ভব।
GraphQL এর মাধ্যমে JSON ডেটা ব্যবহার করা সহজ এবং ফ্লেক্সিবল। এটি request এবং response উভয় ক্ষেত্রেই JSON ফরম্যাট ব্যবহার করে। GraphQL ব্যবহারকারীদের নির্দিষ্ট ডেটা ফেচ করার ক্ষমতা প্রদান করে এবং JSON ফরম্যাটের মাধ্যমে সেই ডেটা নিরাপদ এবং কার্যকরভাবে পরিচালনা করা হয়। GraphQL এর সাহায্যে বিভিন্ন কুয়েরি এবং মিউটেশন JSON ফরম্যাটে তৈরি করা হয় এবং রেসপন্স JSON আকারে ফেরত আসে। JSON এর মাধ্যমে ডেটা এক্সচেঞ্জ করা সহজ ও কার্যকরী, যা API উন্নয়নে গুরুত্বপূর্ণ ভূমিকা পালন করে।
GraphQL একটি শক্তিশালী এবং নমনীয় API কুয়েরি ভাষা, যা মূলত Facebook দ্বারা তৈরি করা হয়েছে এবং এটি ক্লায়েন্টদের ডেটা চাহিদার ভিত্তিতে ডেটা নিয়ে আসতে সক্ষম করে। GraphQL JSON ডেটা ফরম্যাটে কুয়েরি এবং রেসপন্স প্রদান করে, যা ওয়েব অ্যাপ্লিকেশনগুলির জন্য দ্রুত এবং কার্যকরী ডেটা আদান-প্রদান নিশ্চিত করে।
GraphQL ক্লায়েন্ট (যেমন: React, Apollo Client, অথবা Postman) একটি Query পাঠায় যা ডেটা সংগ্রহ করতে সাহায্য করে। একটি GraphQL কুয়েরি সঠিকভাবে JSON ফরম্যাটে ডেটার কাঠামো নির্ধারণ করে এবং সার্ভারে রিকোয়েস্ট পাঠায়।
GraphQL কুয়েরি সিনট্যাক্স হল:
এখানে একটি সাধারণ GraphQL কুয়েরি দেওয়া হলো যা একটি ব্যবহারকারীর তথ্য সংগ্রহ করার জন্য JSON ফরম্যাটে ডেটা চায়:
{
user(id: "1") {
name
age
email
}
}
এই কুয়েরিটি user নামের একটি ফিল্ড চাচ্ছে যেখানে id
হচ্ছে 1
। ফিল্ডগুলো হল: name
, age
, এবং email
।
GraphQL সার্ভার কুয়েরির ভিত্তিতে একটি JSON রেসপন্স পাঠায়। রেসপন্সে অবশ্যই data ফিল্ড থাকতে হবে, যার মধ্যে ডেটার কাঠামো থাকে। যদি কোনো ত্রুটি ঘটে, তখন errors ফিল্ডটি যোগ করা হয়।
{
"data": {
"user": {
"name": "John Doe",
"age": 30,
"email": "johndoe@example.com"
}
}
}
এখানে, সার্ভারটি user
নামের একটি অবজেক্ট ফিরিয়ে দিয়েছে, যার মধ্যে name
, age
, এবং email
ফিল্ড রয়েছে।
GraphQL কুয়েরির সাথে Variables ব্যবহার করা অনেক সুবিধাজনক। এতে কুয়েরি কোডটিকে পুনঃব্যবহারযোগ্য এবং পরিষ্কার করা যায়, কারণ কুয়েরির প্যারামিটারগুলো আলাদাভাবে JSON এর মাধ্যমে সরবরাহ করা হয়।
Query:
query GetUser($id: ID!) {
user(id: $id) {
name
age
email
}
}
এখানে, $id
একটি ভ্যারিয়েবল, এবং কুয়েরি এটির মান পাবার জন্য একটি আর্গুমেন্ট গ্রহণ করছে।
Variables:
{
"id": "1"
}
এখানে, JSON ভ্যারিয়েবল id
এর মান 1
হিসাবে সরবরাহ করা হয়েছে। এখন ক্লায়েন্টে কুয়েরি পাঠানোর সময় এই ভ্যারিয়েবল ব্যবহার করা হবে।
Query Request (with Variables):
{
"query": "query GetUser($id: ID!) { user(id: $id) { name age email } }",
"variables": {
"id": "1"
}
}
Response:
{
"data": {
"user": {
"name": "John Doe",
"age": 30,
"email": "johndoe@example.com"
}
}
}
GraphQL শুধু ডেটা পড়তে (Query) নয়, ডেটা আপডেট, যোগ বা মুছতেও Mutation ব্যবহার করে। JSON ফরম্যাটে Mutation এবং Response একই রকমের হয়।
mutation {
updateUser(id: "1", input: { name: "Jane Doe", age: 32 }) {
name
age
}
}
এখানে, updateUser একটি Mutation যা id
এবং input
আর্গুমেন্ট গ্রহণ করে, যেখানে নতুন name এবং age প্যারামিটার রয়েছে।
{
"data": {
"updateUser": {
"name": "Jane Doe",
"age": 32
}
}
}
GraphQL রেসপন্সে ত্রুটির (Error) জন্য errors ফিল্ড থাকে। এই ফিল্ডে ত্রুটির বিস্তারিত তথ্য পাওয়া যায়।
{
"errors": [
{
"message": "User not found",
"locations": [{"line": 2, "column": 3}],
"path": ["user"],
"extensions": {
"code": "USER_NOT_FOUND"
}
}
],
"data": null
}
এখানে, একটি ত্রুটি ঘটেছে যেটি বলে যে "User not found" এবং data ফিল্ডটি null
ফিরিয়ে দিয়েছে।
GraphQL এর মাধ্যমে JSON ডেটার জন্য কুয়েরি এবং রেসপন্স ব্যবস্থাপনা খুবই নমনীয় এবং শক্তিশালী। Query এর মাধ্যমে ডেটা নির্দিষ্টভাবে রিকোয়েস্ট করা যায়, এবং JSON ফরম্যাটে Response প্রদান করা হয়, যা ক্লায়েন্টের জন্য সহজে হ্যান্ডেলযোগ্য। Variables ব্যবহারের মাধ্যমে কুয়েরি আরও পুনঃব্যবহারযোগ্য হয়, এবং Mutation এর মাধ্যমে ডেটা পরিবর্তন বা আপডেট করা যায়। তাছাড়া, GraphQL রেসপন্সের সাথে error handling এর মাধ্যমে সমস্যাগুলি সঠিকভাবে পরিচালনা করা যায়।
JSON এর মাধ্যমে GraphQL কুয়েরি এবং রেসপন্স ব্যবস্থাপনা ডেটা আদান-প্রদানকে আরও কার্যকরী এবং নিরাপদ করে তোলে।
JSON (JavaScript Object Notation) এবং GraphQL দুটি অত্যন্ত জনপ্রিয় প্রযুক্তি যা ডেটা এক্সচেঞ্জ এবং API ডেভেলপমেন্টে ব্যাপকভাবে ব্যবহৃত হয়। যদিও এগুলি বিভিন্ন উদ্দেশ্যে ব্যবহৃত হয়, তবুও তাদের মধ্যে একটি গভীর সম্পর্ক রয়েছে, বিশেষ করে ডেটা রিটার্ন এবং ডেটা ট্রান্সফার কৌশলের মধ্যে।
JSON (JavaScript Object Notation) একটি লাইটওয়েট ডেটা বিনিময় ফরম্যাট যা প্রধানত ওয়েব অ্যাপ্লিকেশন এবং API-তে ব্যবহৃত হয়। এটি একটি পাঠযোগ্য টেক্সট ফরম্যাট যা ডেটা স্ট্রাকচারগুলি কিপল-পেয়ার (key-value pair) অথবা অ্যারে (array) আকারে প্রতিনিধিত্ব করে। JSON সহজে পাঠযোগ্য এবং প্রোগ্রামিং ভাষার মধ্যে পার্স করা সহজ।
GraphQL হল একটি API কুয়েরি ভাষা যা ক্লায়েন্টদের কাছে নির্দিষ্ট ডেটা অনুসন্ধান এবং গ্রহণ করার সুবিধা প্রদান করে। GraphQL ডেভেলপারদের ক্লায়েন্ট-সাইড অ্যাপ্লিকেশনের জন্য প্রয়োজনীয় ডেটা আনতে সক্ষম করে এবং এটি সাধারণত JSON ফরম্যাটে ডেটা রিটার্ন করে।
1. JSON আউটপুট ফরম্যাট:
উদাহরণ: GraphQL কুয়েরি:
{
user(id: "1") {
name
email
}
}
এটি একটি কুয়েরি, যা user
নামে একটি অবজেক্টের name
এবং email
প্রপার্টি চায়।
GraphQL রেসপন্স (JSON ফরম্যাট):
{
"data": {
"user": {
"name": "John Doe",
"email": "john.doe@example.com"
}
}
}
এখানে, GraphQL সার্ভার কুয়েরির উত্তর হিসেবে JSON ডেটা রিটার্ন করছে।
2. ডেটা ফিল্ড নির্দিষ্টকরণ:
উদাহরণ:
একটি REST API রেসপন্স যেখানে পুরো অবজেক্ট (JSON) ফেরত দেওয়া হচ্ছে:
{
"user": {
"name": "John Doe",
"email": "john.doe@example.com",
"address": "123 Street, City",
"phone": "123-456-7890"
}
}
এই ক্ষেত্রে, ক্লায়েন্ট হয়তো শুধু name
এবং email
চায়, কিন্তু পুরো অবজেক্ট ফেরত আসছে। যেখানে GraphQL ক্লায়েন্টকে name এবং email ছাড়া কিছুই ফেরত দিতে বাধ্য করবে।
GraphQL Query:
{
user(id: "1") {
name
email
}
}
GraphQL Response (JSON):
{
"data": {
"user": {
"name": "John Doe",
"email": "john.doe@example.com"
}
}
}
এখানে, name এবং email ছাড়া অন্য কোন অতিরিক্ত ডেটা ফেরত দেওয়া হয়নি।
3. নির্দিষ্ট ডেটা পুনরুদ্ধারের সুবিধা:
উদাহরণ:
GraphQL কুয়েরি:
{
posts {
title
content
}
}
GraphQL রেসপন্স (JSON):
{
"data": {
"posts": [
{
"title": "Post 1",
"content": "This is the first post."
},
{
"title": "Post 2",
"content": "This is the second post."
}
]
}
}
এখানে, GraphQL কুয়েরি posts
এর title
এবং content
ফিল্ড চাচ্ছে, এবং সার্ভার শুধুমাত্র সেই ফিল্ডগুলো JSON ফরম্যাটে রিটার্ন করছে।
উদাহরণ (GraphQL Subscription):
subscription {
messageAdded {
content
author
}
}
GraphQL রেসপন্স (JSON):
{
"data": {
"messageAdded": {
"content": "New message added!",
"author": "John"
}
}
}
এখানে, ক্লায়েন্ট messageAdded সাবস্ক্রাইব করছে এবং নতুন মেসেজ আসলে তা JSON ফরম্যাটে রিটার্ন করা হচ্ছে।
JSON এবং GraphQL একে অপরের সাথে গভীরভাবে সম্পর্কিত। GraphQL একটি API কুয়েরি ভাষা যা JSON ডেটাকে রিটার্ন করার জন্য ব্যবহৃত হয়। JSON, ডেটার স্ট্রাকচার, প্রপার্টি এবং ভ্যালু সংরক্ষণ করে, এবং GraphQL ক্লায়েন্টের চাহিদা অনুযায়ী নির্দিষ্ট ডেটা ফেরত দেয়, যা JSON ফরম্যাটে থাকে। এটি ডেটার সার্বিক আউটপুট এবং কুয়েরি ফিল্টারিংয়ের মধ্যে একটি গুরুত্বপূর্ণ সেতু তৈরি করে, যা JSON ডেটার ব্যবহারকে আরও উন্নত এবং নির্দিষ্ট করে তোলে।
GraphQL হল একটি শক্তিশালী এবং নমনীয় ডেটা কুয়েরি ভাষা যা ক্লায়েন্টদের নির্দিষ্ট ডেটা চাহিদা পূরণের জন্য সরাসরি সার্ভার থেকে ডেটা অনুরোধ করার সুবিধা প্রদান করে। এটি REST API এর তুলনায় আরও দক্ষ এবং কার্যকরী, কারণ এটি ক্লায়েন্টকে নির্দিষ্ট ডেটা ফিল্টার করতে এবং কেবলমাত্র প্রয়োজনীয় ডেটা পাঠানোর জন্য সক্ষম করে। GraphQL সাধারণত JSON ডেটার মাধ্যমে ডেটা পাঠায় এবং গ্রহণ করে।
Scenario: আমরা একটি ওয়েব অ্যাপ্লিকেশন তৈরি করবো যেখানে GraphQL ব্যবহার করে সার্ভার থেকে JSON ফরম্যাটে ডেটা ফেচ করা হবে। এখানে, ক্লায়েন্ট একটি কুয়েরি পাঠাবে যা সার্ভার থেকে নির্দিষ্ট ডেটা চায়, এবং সার্ভার সেই ডেটা JSON ফরম্যাটে ক্লায়েন্টকে পাঠাবে।
ধরা যাক, আমাদের একটি GraphQL API সার্ভার রয়েছে, যেখানে একটি User অবজেক্ট রয়েছে, যার মধ্যে name, age, email, এবং address রয়েছে। আমরা ক্লায়েন্টে শুধু name এবং email ডেটা চেয়ে অনুরোধ করবো।
আমরা এখানে Node.js ব্যবহার করে একটি GraphQL API সার্ভার তৈরি করবো, এবং সেটি ক্লায়েন্ট থেকে আসা কুয়েরির ভিত্তিতে JSON ডেটা রিটার্ন করবে।
প্রথমে Node.js প্রজেক্ট তৈরি করুন:
mkdir graphql-json-example
cd graphql-json-example
npm init -y
npm install express express-graphql graphql
const express = require('express');
const { graphqlHTTP } = require('express-graphql');
const { GraphQLObjectType, GraphQLSchema, GraphQLString, GraphQLInt } = require('graphql');
const app = express();
// Define User Type
const UserType = new GraphQLObjectType({
name: 'User',
fields: {
name: { type: GraphQLString },
age: { type: GraphQLInt },
email: { type: GraphQLString },
address: { type: GraphQLString }
}
});
// Root Query
const RootQuery = new GraphQLObjectType({
name: 'RootQueryType',
fields: {
user: {
type: UserType,
args: { id: { type: GraphQLString } },
resolve(parent, args) {
// Sample data (you can replace this with actual DB call)
const users = [
{ id: '1', name: 'John Doe', age: 30, email: 'johndoe@example.com', address: '123 Main St' },
{ id: '2', name: 'Jane Smith', age: 25, email: 'janesmith@example.com', address: '456 Elm St' }
];
return users.find(user => user.id === args.id);
}
}
}
});
// Mutation (optional, for creating/updating data)
const Mutation = new GraphQLObjectType({
name: 'Mutation',
fields: {
// Add mutation fields here if needed
}
});
// Schema
const schema = new GraphQLSchema({
query: RootQuery,
mutation: Mutation
});
// Set up GraphQL endpoint
app.use('/graphql', graphqlHTTP({
schema,
graphiql: true // Set to true to access GraphiQL interface in browser
}));
app.listen(4000, () => {
console.log('Server running on http://localhost:4000/graphql');
});
এখানে, GraphQL Schema তৈরি করা হয়েছে যেখানে User নামক একটি টাইপ ডিফাইন করা হয়েছে এবং একটি রুট কুয়েরি user
ডিফাইন করা হয়েছে যা ইউজারের আইডি অনুসারে ইউজারের ডেটা ফেরত দেয়।
এখন, আমরা ক্লায়েন্ট সাইডে GraphQL Query পাঠাবো। ক্লায়েন্টের কুয়েরি হবে এমনভাবে যাতে শুধুমাত্র name এবং email ফিল্ডস রিটার্ন করা হয়।
GraphQL ক্লায়েন্টের মাধ্যমে আমরা নিম্নলিখিত কুয়েরি পাঠাবো:
{
user(id: "1") {
name
email
}
}
এখানে, id: "1"
দিয়ে আমরা ইউজারের আইডি চাচ্ছি এবং name
, email
কেবল চাচ্ছি।
আপনি fetch API ব্যবহার করে এই কুয়েরি পাঠাতে পারেন:
const query = `
{
user(id: "1") {
name
email
}
}
`;
fetch('http://localhost:4000/graphql', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ query })
})
.then(response => response.json())
.then(data => console.log('Data received:', data))
.catch(error => console.error('Error:', error));
এখানে, আমরা GraphQL Query পোস্ট করে JSON ফরম্যাটে ডেটা রিটার্ন করছি। সার্ভার কুয়েরি অনুসারে শুধুমাত্র name এবং email পাঠাবে।
যখন সার্ভার এই কুয়েরি গ্রহণ করবে এবং সফলভাবে রেসপন্স করবে, তখন এটি নিম্নলিখিত JSON ফরম্যাটে ডেটা ফিরিয়ে দেবে:
{
"data": {
"user": {
"name": "John Doe",
"email": "johndoe@example.com"
}
}
}
এখানে, GraphQL Response JSON ফরম্যাটে এসেছে, যেটি name এবং email ফিল্ডগুলির মান ধারণ করছে।
যদি কোনো ত্রুটি ঘটে, যেমন যদি ইউজার আইডি না থাকে, তাহলে আপনি নিম্নলিখিত JSON ত্রুটি মেসেজ পেতে পারেন:
{
"errors": [
{
"message": "User not found"
}
]
}
এটি নির্দেশ করে যে, কুয়েরির মাধ্যমে ইউজারের ডেটা পাওয়া যায়নি।
এই উদাহরণে, GraphQL এর মাধ্যমে JSON ডেটা ফেচ করার প্রক্রিয়া দেখানো হয়েছে। সার্ভার থেকে নির্দিষ্ট ডেটা অনুরোধের জন্য GraphQL Query পাঠানো হয়েছে এবং তার পর সার্ভার সেই কুয়েরি প্রক্রিয়া করে JSON ফরম্যাটে রেসপন্স পাঠিয়েছে। এটি ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা ট্রান্সফারকে আরো কার্যকরী এবং নমনীয় করে তোলে। GraphQL এর সাহায্যে আপনি সার্ভার থেকে নির্দিষ্ট ডেটা চেয়ে দ্রুত ফলাফল পেতে পারেন, যা REST API তে সম্ভব হয় না।
Read more