JSON (JavaScript Object Notation) এবং GraphQL দুটি অত্যন্ত জনপ্রিয় প্রযুক্তি যা ডেটা এক্সচেঞ্জ এবং API ডেভেলপমেন্টে ব্যাপকভাবে ব্যবহৃত হয়। যদিও এগুলি বিভিন্ন উদ্দেশ্যে ব্যবহৃত হয়, তবুও তাদের মধ্যে একটি গভীর সম্পর্ক রয়েছে, বিশেষ করে ডেটা রিটার্ন এবং ডেটা ট্রান্সফার কৌশলের মধ্যে।
JSON কী?
JSON (JavaScript Object Notation) একটি লাইটওয়েট ডেটা বিনিময় ফরম্যাট যা প্রধানত ওয়েব অ্যাপ্লিকেশন এবং API-তে ব্যবহৃত হয়। এটি একটি পাঠযোগ্য টেক্সট ফরম্যাট যা ডেটা স্ট্রাকচারগুলি কিপল-পেয়ার (key-value pair) অথবা অ্যারে (array) আকারে প্রতিনিধিত্ব করে। JSON সহজে পাঠযোগ্য এবং প্রোগ্রামিং ভাষার মধ্যে পার্স করা সহজ।
GraphQL কী?
GraphQL হল একটি API কুয়েরি ভাষা যা ক্লায়েন্টদের কাছে নির্দিষ্ট ডেটা অনুসন্ধান এবং গ্রহণ করার সুবিধা প্রদান করে। GraphQL ডেভেলপারদের ক্লায়েন্ট-সাইড অ্যাপ্লিকেশনের জন্য প্রয়োজনীয় ডেটা আনতে সক্ষম করে এবং এটি সাধারণত JSON ফরম্যাটে ডেটা রিটার্ন করে।
JSON এবং GraphQL এর মধ্যে সম্পর্ক
1. JSON আউটপুট ফরম্যাট:
- GraphQL ক্লায়েন্টের কুয়েরি অনুযায়ী সার্ভার থেকে ডেটা রিটার্ন করার জন্য ব্যবহৃত হয়। GraphQL কুয়েরি ছিনিয়ে আনার পর, সার্ভার সেই ডেটাকে JSON ফরম্যাটে ক্লায়েন্টে পাঠায়।
- JSON এবং GraphQL এর সম্পর্ক মূলত ডেটা রিটার্ন ফরম্যাটে। যখন আপনি GraphQL কুয়েরি করেন, সার্ভার থেকে যে রেসপন্স আসে তা সাধারণত 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. ডেটা ফিল্ড নির্দিষ্টকরণ:
- GraphQL এর মূল সুবিধা হলো এটি ক্লায়েন্টকে নির্দিষ্টভাবে জানাতে সাহায্য করে কোন ফিল্ড বা প্রপার্টি তারা চায়। একে precise data fetching বলা হয়।
- সাধারণ REST API-তে সার্ভার সবসময় পূর্বনির্ধারিত ডেটা পাঠায়, কিন্তু GraphQL আপনাকে কেবল প্রয়োজনীয় ডেটা ফেরত দেয়, যা ক্লায়েন্টের জন্য JSON ফরম্যাটে সুনির্দিষ্টভাবে প্রাপ্ত হয়।
উদাহরণ:
একটি 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. নির্দিষ্ট ডেটা পুনরুদ্ধারের সুবিধা:
- JSON ফরম্যাট একটি সাধারণ ডেটা স্টোরেজ ফরম্যাট হিসেবে কাজ করে, যা কোনো ডেটার কাঠামো এবং তার প্রপার্টি সংরক্ষণ করে।
- GraphQL এমন একটি কুয়েরি ভাষা যা নির্দিষ্ট ডেটা পুনরুদ্ধারের সুবিধা দেয়, এবং রেসপন্স হিসেবে JSON ডেটা প্রদান করে।
উদাহরণ:
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 ফরম্যাটে রিটার্ন করছে।
4. Real-time Updates (Subscriptions)
- GraphQL Subscriptions এমন একটি ফিচার যা ক্লায়েন্টকে রিয়েল-টাইম ডেটা আপডেটের জন্য সাবস্ক্রাইব করতে দেয়। যখন নতুন ডেটা বা পরিবর্তন আসে, তখন এটি ক্লায়েন্টে JSON ডেটা হিসেবে চলে আসে।
- 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 ডেটার ব্যবহারকে আরও উন্নত এবং নির্দিষ্ট করে তোলে।
Read more