গ্রাফকিউএল (GraphQL) হল একটি API query ভাষা যা ক্লায়েন্টদের সার্ভার থেকে ডেটা অনুরোধ করার একটি শক্তিশালী এবং নমনীয় পদ্ধতি প্রদান করে। এটি সাধারণত REST API এর বিকল্প হিসেবে ব্যবহৃত হয়, কারণ এটি ক্লায়েন্টদের ডেটার নির্দিষ্ট অংশ চাওয়ার সুযোগ দেয় এবং সার্ভারকে শুধুমাত্র প্রয়োজনীয় ডেটা ফেরত পাঠানোর জন্য সক্ষম করে।
GraphQL এর বেসিক কনসেপ্ট
স্কিমা (Schema):
GraphQL-এ স্কিমা হল সার্ভারের ডেটার গঠন এবং এর সম্পর্কের সংজ্ঞা। এটি কুয়েরি, মিউটেশন এবং সাবস্ক্রিপশন কীভাবে কাজ করবে তা বর্ণনা করে। স্কিমা একটি কনট্রাক্টের মতো কাজ করে, যা ডেভেলপারদের জন্য নির্ধারণ করে দেয় যে তারা কোন ডেটা অ্যাক্সেস করতে পারবে এবং কীভাবে তা অ্যাক্সেস করা যাবে।
কুয়েরি (Query):
GraphQL কুয়েরি ব্যবহার করে ক্লায়েন্ট সার্ভারের কাছ থেকে ডেটা চেয়ে থাকে। এটি REST API এর মতো HTTP GET অনুরোধের মতো, তবে এখানে ক্লায়েন্টরা কেবল তার প্রয়োজনীয় ফিল্ড বা ডেটা চায়। উদাহরণস্বরূপ, যদি একজন ইউজারের নাম এবং ইমেইল চান, তারা কেবল সেই দুটি ফিল্ডের জন্য কুয়েরি করতে পারে, পুরো ইউজার অবজেক্টের জন্য নয়।
মিউটেশন (Mutation):
GraphQL-এ কেবল ডেটা পড়া নয়, বরং ডেটা তৈরি, আপডেট বা ডিলিট করা যায়। এই কাজগুলো মিউটেশন ব্যবহার করে করা হয়। মিউটেশন মূলত ক্লায়েন্টের পক্ষ থেকে সার্ভারের ডেটার পরিবর্তন করতে ব্যবহৃত হয়। যেমন, নতুন ইউজার তৈরি করা, একটি পোস্ট আপডেট করা ইত্যাদি।
সাবস্ক্রিপশন (Subscription):
সাবস্ক্রিপশন হল গ্রাফকিউএলের একটি বৈশিষ্ট্য যা ক্লায়েন্টকে সার্ভারের রিয়েল-টাইম আপডেট পাওয়ার সুযোগ দেয়। এটি সাধারণত চ্যাট অ্যাপ্লিকেশন বা লাইভ ডেটা ফিডে ব্যবহৃত হয়, যেখানে ক্লায়েন্ট ডেটার পরিবর্তন ঘটলে তা তাত্ক্ষণিকভাবে পেতে সক্ষম হয়।
GraphQL এর কাজের প্রক্রিয়া
কুয়েরি তৈরি:
গ্রাফকিউএল ক্লায়েন্ট একটি কুয়েরি পাঠিয়ে নির্দিষ্ট ডেটার জন্য অনুরোধ করে। উদাহরণস্বরূপ, যদি একটি ব্লগ পোস্টের শিরোনাম এবং বিষয়বস্তু প্রয়োজন হয়, তাহলে কুয়েরিতে শুধু সেই তথ্য চাওয়া হবে।
সার্ভারে কুয়েরি প্রক্রিয়া:
ক্লায়েন্টের কুয়েরি সার্ভারের কাছে পাঠানো হলে, সার্ভার স্কিমা অনুযায়ী কুয়েরিটি প্রক্রিয়া করে এবং প্রয়োজনীয় ডেটা ফেরত পাঠায়।
ফলাফল প্রাপ্তি:
সার্ভার কুয়েরির ফলাফল শুধুমাত্র ক্লায়েন্টের চাওয়া ডেটা ফেরত পাঠায়, অর্থাৎ, কুয়েরি করা ফিল্ডগুলির তথ্য। অতিরিক্ত বা অপ্রয়োজনীয় ডেটা ফেরত আসে না।
GraphQL এর সুবিধা
নমনীয়তা (Flexibility):
GraphQL ক্লায়েন্টকে তাদের প্রয়োজনীয় ডেটার জন্য নির্দিষ্ট প্রশ্ন করতে দেয়, যা REST API তে সম্ভব নয়। ফলে, এটি অনেক বেশি নমনীয় এবং কার্যকরী।
অতিরিক্ত ডেটা লোডিং (Over-fetching) এবং কম ডেটা লোডিং (Under-fetching) রোধ:
GraphQL-এর মাধ্যমে, ক্লায়েন্টরা শুধু তাদের প্রয়োজনীয় ডেটার জন্য কুয়েরি করে, অতিরিক্ত ডেটার লোডিং বা কম ডেটার লোডিং থেকে মুক্তি পায়।
একক এন্ডপয়েন্ট (Single Endpoint):
GraphQL-এ সমস্ত রিসোর্স একক এন্ডপয়েন্টে পাওয়া যায়, যেটি কোডের জটিলতা কমায় এবং ব্যবস্থাপনাকে সহজ করে।
ডেটার সম্পর্ক (Data Relationships):
GraphQL ডেটার হায়ারার্কি বা সম্পর্ক খুব সহজে মডেল করতে পারে, এবং একাধিক ডেটাবেস টেবিলের মধ্যে সম্পর্কিত ডেটা একসাথে ফেরত আসতে পারে।
সারাংশ
GraphQL একটি শক্তিশালী API query ভাষা যা ক্লায়েন্টদের তাদের প্রয়োজনীয় ডেটার জন্য নির্দিষ্ট কুয়েরি করার সুযোগ দেয়। এটি REST API-র তুলনায় অনেক বেশি নমনীয়, কারণ এটি অতিরিক্ত ডেটা ফেরত না পাঠানোর মাধ্যমে কার্যকারিতা বৃদ্ধি করে। GraphQL-এর মূল কনসেপ্টগুলির মধ্যে স্কিমা, কুয়েরি, মিউটেশন এবং সাবস্ক্রিপশন রয়েছে, যা ডেভেলপারদের জন্য ডেটা অ্যাক্সেস এবং পরিবর্তন করার সহজ এবং কার্যকরী পদ্ধতি প্রদান করে।
গ্রাফকিউএল (GraphQL)-এ Schema এবং Type System দুটি অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে। এগুলো GraphQL API এর কাঠামো, ডেটার গঠন এবং ডেটার অ্যাক্সেস নিয়ন্ত্রণ করে। এই দুটি উপাদানকে বুঝে নিলে GraphQL এর কার্যকারিতা এবং ডেটা মডেলিং সম্পর্কে পরিষ্কার ধারণা পাওয়া যায়।
Schema এর ভূমিকা
Schema হল GraphQL API এর একটি গুরুত্বপূর্ণ অংশ, যা API এর স্ট্রাকচার এবং কাঠামো নির্ধারণ করে। এটি গ্রাহকের জন্য ডেটার জন্য কুয়েরি এবং মিউটেশন অপারেশনগুলো কীভাবে কাজ করবে তা বর্ণনা করে। Schema-এ যেসব টাইপ এবং অপারেশন ডিফাইন করা হয়, তা GraphQL সার্ভার এবং ক্লায়েন্টের মধ্যে যোগাযোগের পথ নির্দেশ করে।
Schema এর প্রধান কাজগুলি হলো:
- ডেটার গঠন নির্ধারণ (Defining Data Structure):
Schema-তে ডেটার গঠন নির্ধারণ করা হয়, যেমন কোন ডেটা টাইপগুলো অ্যাভেইলেবল হবে, কোন ফিল্ডগুলির সাথে সম্পর্কিত তথ্য হবে, এবং কি ধরনের অপারেশন করা যাবে। - কুয়েরি এবং মিউটেশন অপারেশন (Query and Mutation Operations):
Schema-তে ডিফাইন করা হয় কোন কুয়েরি এবং মিউটেশন ক্লায়েন্টরা সার্ভারের সাথে করতে পারবে। এর মাধ্যমে, ক্লায়েন্টরা নির্দিষ্ট ডেটা বা ডেটা পরিবর্তন করতে পারে। - টাইপ সিস্টেমের সাথে সম্পর্ক (Integration with Type System):
Schema টাইপ সিস্টেমের ভিত্তিতে কাজ করে। এতে বিভিন্ন ধরনের টাইপ যেমন Object, Scalar, Interface, Union, Enum, এবং Input Type এর ব্যবহার করা হয়, যা ডেটার গঠনকে আরও কার্যকরভাবে ম্যানেজ করতে সহায়ক।
Type System এর ভূমিকা
Type System GraphQL এর একটি অত্যন্ত গুরুত্বপূর্ণ উপাদান, যা ডেটার ধরন এবং তাদের মধ্যে সম্পর্ক নির্ধারণ করে। এটি সার্ভারকে জানিয়ে দেয় যে, কোন ধরনের ডেটা প্রত্যাশিত এবং কিভাবে সেই ডেটা ক্লায়েন্ট থেকে প্রাপ্ত হতে পারে। Type System এর সাহায্যে API এর জন্য সঠিক ডেটা গঠন তৈরি করা যায়।
Type System এর প্রধান উপাদানগুলো:
- Scalar Types:
Scalar types হল মৌলিক ডেটা টাইপ, যেমনInt,Float,String,Boolean, এবংID। এগুলো সাধারণ ডেটার ধরন, যেমন সংখ্যা বা স্ট্রিং, এবং ডেটার সবচেয়ে সাধারণ সিম্পল টাইপ হিসেবে কাজ করে। - Object Types:
Object types হল এমন টাইপ যা একটি বা একাধিক ফিল্ড নিয়ে গঠিত। প্রতিটি ফিল্ডের একটি নাম এবং ডেটা টাইপ থাকে, এবং Object type ডেটার কাঠামো নির্ধারণ করে। উদাহরণস্বরূপ, একটিUserনামক Object type থাকতে পারে, যার মধ্যেname,email, এবংageফিল্ড থাকতে পারে। - Query Type:
Query type হল সেই ধরনের টাইপ যা ক্লায়েন্টদের দ্বারা ডেটা রিট্রিভ করার জন্য ব্যবহৃত হয়। এটি schema-তে ডিফাইন করা হয় এবং এটি ক্লায়েন্টের কুয়েরি অপারেশন পরিচালনা করে। - Mutation Type:
Mutation type হল টাইপ যা ডেটার পরিবর্তন, সৃষ্টি বা মুছে ফেলা সম্পর্কিত অপারেশন পরিচালনা করে। এটি API এর মাধ্যমে ডেটা পরিবর্তন করার পদ্ধতি নির্ধারণ করে। - Input Types:
Input types ব্যবহার করা হয় যখন কোনও মিউটেশন বা কুয়েরিতে ইনপুট ডেটা প্রেরণ করতে হয়। এগুলি ডেটার কাঠামো নির্ধারণ করে এবং কিভাবে ইনপুট আর্গুমেন্টে ডেটা প্রেরণ করা হবে তা বর্ণনা করে। - Enum Types:
Enum types এমন একটি টাইপ যা একটি সীমিত সেটের মান ধারণ করে। উদাহরণস্বরূপ, একটিStatusenum থাকতে পারে যার মান হতে পারেACTIVE,INACTIVE, বাPENDING। - Interfaces এবং Unions:
Interfaces এবং Unions টাইপের মধ্যে সম্পর্ক স্থাপন করে। Interface টাইপগুলি যেসব ফিল্ডগুলি শেয়ার করে সেগুলি নির্ধারণ করে, এবং Union টাইপগুলি বিভিন্ন টাইপের একটি সমষ্টি, যেখান থেকে একটি টাইপ নির্বাচন করা হয়।
Schema এবং Type System এর মধ্যে সম্পর্ক
Schema এবং Type System একে অপরের সাথে নিবিড়ভাবে কাজ করে। Schema হল API এর মূল কাঠামো, যেখানে Type System ডেটার গঠন এবং তার সম্পর্ক নির্ধারণ করে। Schema-তে যে কুয়েরি এবং মিউটেশন অপারেশন ডিফাইন করা হয়, তা Type System এর নির্দিষ্ট টাইপগুলির মাধ্যমে ডেটার কাঠামো এবং গঠন অনুসরণ করে।
এছাড়াও, GraphQL সার্ভারে Schema-র মধ্যে থাকা Types এর উপর ভিত্তি করে কুয়েরি এবং মিউটেশন পরিচালিত হয়, যেখানে ডেটা টাইপের বৈধতা পরীক্ষা করা হয় এবং সঠিক ফলাফল প্রদান করা হয়।
সারাংশ
Schema এবং Type System GraphQL-এর দুটি অপরিহার্য অংশ, যা API-র কাঠামো, ডেটার গঠন এবং ক্লায়েন্ট-সার্ভার যোগাযোগের পদ্ধতি নির্ধারণ করে। Schema API এর অপারেশন এবং টাইপগুলোর কাঠামো বর্ণনা করে, আর Type System ডেটার ধরন এবং সম্পর্কের সঠিক কাঠামো তৈরি করে, যা সার্ভারের সাথে নির্ভুল যোগাযোগ নিশ্চিত করে।
গ্রাফকিউএল (GraphQL) একটি শক্তিশালী API query ভাষা যা ডেটা রিড (Query), ডেটা আপডেট (Mutation), এবং রিয়েল-টাইম ডেটা আপডেট (Subscription) পরিচালনা করতে সহায়ক। এগুলি GraphQL এর মূল কম্পোনেন্ট, যা সার্ভার এবং ক্লায়েন্টের মধ্যে ডেটা আদান-প্রদান প্রক্রিয়া সহজ ও কার্যকর করে তোলে। এখানে এই তিনটি মূল কম্পোনেন্টের পরিচিতি দেওয়া হলো:
Query: ডেটা পড়া (Reading Data)
Query হলো GraphQL-এর মাধ্যমে সার্ভার থেকে ডেটা পড়ার জন্য ব্যবহৃত এক ধরণের কুয়েরি। ক্লায়েন্ট একটি নির্দিষ্ট কুয়েরি পাঠিয়ে সার্ভার থেকে নির্দিষ্ট ডেটা সংগ্রহ করে, যেখানে শুধু প্রয়োজনীয় ডেটা ফেরত আসে, অতিরিক্ত কোনো ডেটা ফেরত আসে না।
বিশেষত্ব:
- সুনির্দিষ্ট ডেটা চাওয়া: ক্লায়েন্ট নির্দিষ্ট ফিল্ড ও সম্পর্কিত ডেটা চাওয়ার মাধ্যমে শুধুমাত্র প্রয়োজনীয় ডেটাই পায়।
- হায়ারার্কিক্যাল ডেটা: Query-এ ডেটার হায়ারার্কি বা সম্পর্ক সহজে বোঝানো যায়, যেমন একাধিক সম্পর্কিত তথ্য একসাথে পাওয়া।
উদাহরণ:
query {
user(id: 1) {
name
email
}
}
এখানে user এর id অনুযায়ী একটি ইউজারের নাম এবং ইমেইল ঠিকানা পাওয়া যাবে।
Mutation: ডেটা পরিবর্তন (Modifying Data)
Mutation GraphQL-এ ডেটা আপডেট বা পরিবর্তন করার জন্য ব্যবহৃত হয়। এটি সার্ভার থেকে ডেটা তৈরি, আপডেট অথবা ডিলিট করতে ব্যবহৃত হয়। একে "Write Operation" বলা হয়। Mutation-এ সাধারণত ডেটা পরিবর্তন করা হয় এবং পরিবর্তন সফল হলে একটি নতুন ডেটা ফেরত আসে।
বিশেষত্ব:
- ডেটা আপডেট বা সৃষ্টি: Mutation-এ ক্লায়েন্ট ডেটা পরিবর্তন করতে পারবে, যেমন নতুন ডেটা তৈরি করা, বিদ্যমান ডেটা আপডেট করা বা ডেটা মুছে ফেলা।
- পার্শ্বপ্রতিক্রিয়া (Side Effects): Mutation এর ফলে সিস্টেমে কোনো পরিবর্তন হয়, যা ডেটার আপডেট বা ডিলিটের মাধ্যমে বাস্তবায়িত হয়।
উদাহরণ:
mutation {
createUser(name: "John Doe", email: "john@example.com") {
id
name
email
}
}
এখানে createUser মিউটেশন দ্বারা একটি নতুন ইউজার তৈরি করা হবে এবং তার id, name, ও email ফেরত আসবে।
Subscription: রিয়েল-টাইম ডেটা (Real-time Data)
Subscription হল একটি ফিচার যা গ্রাফকিউএল ক্লায়েন্টদের রিয়েল-টাইম ডেটা আপডেট পাওয়ার সুবিধা দেয়। এটি সার্ভারের থেকে ডেটার পরিবর্তন বা নতুন ডেটা আসলে ক্লায়েন্টকে অবহিত করার জন্য ব্যবহৃত হয়। সাধারণত এটি ইভেন্ট-ড্রিভেন অ্যাপ্লিকেশন যেমন চ্যাট অ্যাপ্লিকেশন, লাইভ ফিড ইত্যাদিতে ব্যবহৃত হয়।
বিশেষত্ব:
- রিয়েল-টাইম আপডেট: ক্লায়েন্ট সার্ভারের কাছে সাবস্ক্রাইব করে এবং যখন কোনো পরিবর্তন হয়, তখন সার্ভার সেই পরিবর্তন বা নতুন ডেটা ক্লায়েন্টকে পাঠায়।
- অবিরত ডেটা প্রবাহ: সাবস্ক্রিপশন একটি দীর্ঘস্থায়ী কানেকশন ধরে রাখে, যার ফলে সার্ভার থেকে নতুন ডেটা আসতে থাকলে তা ক্লায়েন্ট পেতে থাকে।
উদাহরণ:
subscription {
newUserAdded {
id
name
email
}
}
এখানে newUserAdded সাবস্ক্রিপশনে ক্লায়েন্ট একটি নতুন ইউজার যুক্ত হলে তার তথ্য রিয়েল-টাইমে পাবে।
সারাংশ
GraphQL-এর Query, Mutation, এবং Subscription হলো তিনটি মূল অপারেশন যা ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা আদান-প্রদানকে সহজ, নমনীয় এবং দক্ষ করে তোলে। Query ডেটা পড়তে ব্যবহৃত হয়, Mutation ডেটা আপডেট করতে ব্যবহৃত হয়, এবং Subscription রিয়েল-টাইম ডেটা পরিবর্তনের জন্য ব্যবহৃত হয়। এগুলোর মাধ্যমে ক্লায়েন্টরা প্রয়োজনীয় ডেটা নির্দিষ্টভাবে চেয়ে নিতে পারে, সিস্টেমে পরিবর্তন করতে পারে এবং রিয়েল-টাইম তথ্য পেতে পারে।
GraphQL এর একটি সাধারণ API এমনভাবে কাজ করে যে, ক্লায়েন্টরা নির্দিষ্ট কুয়েরি পাঠিয়ে তাদের প্রয়োজনীয় ডেটা পেতে পারে এবং সার্ভার সেই অনুযায়ী ডেটা প্রদান করে। একটি সাধারণ GraphQL API এর মধ্যে তিনটি মূল অংশ থাকে: স্কিমা (Schema), কুয়েরি (Query), এবং মিউটেশন (Mutation)। এই API ক্লায়েন্টকে নমনীয়তা এবং কার্যকারিতা প্রদান করে, যেখানে শুধু প্রয়োজনীয় ডেটা অনুসন্ধান করা হয়, অতিরিক্ত ডেটা ফেরত আসে না।
একটি সাধারণ GraphQL API কিভাবে কাজ করে?
স্কিমা (Schema):
GraphQL API এর স্কিমা একটি চুক্তি বা নির্দেশিকা হিসেবে কাজ করে, যা ক্লায়েন্টকে জানিয়ে দেয় কোন ডেটা পাওয়া যাবে এবং কিভাবে সেই ডেটাকে অ্যাক্সেস করা যাবে। এটি মূলত টাইপ সিস্টেম (Type System) ব্যবহার করে, যেখানে প্রত্যেকটি ডেটা ফিল্ডের ধরন (type) এবং সম্পর্ক নির্ধারণ করা হয়।
কুয়েরি (Query):
কুয়েরি হল ক্লায়েন্টের পাঠানো অনুরোধ যা নির্দিষ্ট ডেটা নিয়ে কাজ করে। কুয়েরির মাধ্যমে ক্লায়েন্ট সার্ভারকে জানায় যে, তারা কোন ডেটা চাইছে। সাধারণত, কুয়েরি একাধিক ডেটা ফিল্ড এবং তাদের সম্পর্কের মাধ্যমে গঠিত হয়।
মিউটেশন (Mutation):
যখন ক্লায়েন্ট ডেটার কোনো পরিবর্তন করতে চায়, তখন মিউটেশন ব্যবহার করা হয়। এটি ডেটা আপডেট, তৈরি অথবা মুছে ফেলার জন্য ব্যবহৃত হয়। কুয়েরির মাধ্যমে শুধুমাত্র ডেটা পড়া যায়, তবে মিউটেশনের মাধ্যমে ডেটা পরিবর্তন করা যায়।
একটি সাধারণ GraphQL API এর উদাহরণ
ধরা যাক, আমাদের একটি User রিসোর্স রয়েছে, যেখানে name, email, এবং age এর মতো ফিল্ড রয়েছে। নিচে একটি সাধারণ কুয়েরি এবং স্কিমা উদাহরণ দেওয়া হলো:
স্কিমা (Schema):
type Query {
users: [User]
}
type User {
id: ID
name: String
email: String
age: Int
}
কুয়েরি (Query):
query {
users {
name
email
}
}
এই কুয়েরি সার্ভারকে বলছে যে, "আমাকে সব User এর নাম এবং ইমেইল পাঠাও।" এখানে, ক্লায়েন্ট নির্দিষ্টভাবে name এবং email চেয়েছে, তাই সার্ভার অতিরিক্ত ডেটা ফেরত পাঠাবে না (যেমন: age বা id)।
মিউটেশন (Mutation):
mutation {
createUser(name: "John Doe", email: "john.doe@example.com", age: 30) {
id
name
}
}
এই মিউটেশনটি একটি নতুন ইউজার তৈরি করবে এবং সেই ইউজারের id এবং name ফেরত পাঠাবে।
GraphQL এর একটি সাধারণ API এর সুবিধা
নির্দিষ্ট ডেটা চাওয়া:
GraphQL ক্লায়েন্টদের শুধু তাদের প্রয়োজনীয় ডেটা চাওয়ার সুযোগ দেয়। উদাহরণস্বরূপ, যদি ক্লায়েন্ট শুধু ইউজারের নাম এবং ইমেইল চায়, তাহলে শুধু সেই দুটি ফিল্ডই ফিরিয়ে আনা হবে। অতিরিক্ত ডেটার জন্য কোন রাউন্ড-ট্রিপ হবে না, যা কার্যকারিতা বাড়ায়।
একক এন্ডপয়েন্ট:
REST API-তে একাধিক এন্ডপয়েন্ট ব্যবহার করতে হয়, তবে GraphQL এর মধ্যে শুধুমাত্র একটি এন্ডপয়েন্ট থাকে যা সমস্ত ডেটার জন্য প্রশ্ন করা হয়। এটি সার্ভার ব্যবস্থাপনা সহজ করে এবং কোডকে ক্লিন রাখে।
নম্যনীয় স্কিমা:
GraphQL API একটি শক্তিশালী এবং নমনীয় স্কিমা প্রদান করে, যা বিভিন্ন ধরণের ডেটা ফিল্ড এবং তাদের সম্পর্ককে সহজে সংজ্ঞায়িত করতে পারে।
সারাংশ
GraphQL এর একটি সাধারণ API ক্লায়েন্ট এবং সার্ভারের মধ্যে নির্দিষ্ট এবং কার্যকরী ডেটা আদান-প্রদান নিশ্চিত করে। এতে স্কিমা, কুয়েরি, এবং মিউটেশন এর মাধ্যমে ডেটা চাওয়া এবং পরিবর্তন করা হয়। এটি REST API থেকে আরও বেশি নমনীয় এবং কার্যকরী, কারণ এতে ক্লায়েন্টদের শুধুমাত্র প্রয়োজনীয় ডেটা পাঠানোর সুযোগ থাকে এবং একটি একক এন্ডপয়েন্টের মাধ্যমে সমস্ত ডেটা প্রাপ্তি সম্ভব হয়।
গ্রাফকিউএল (GraphQL) এর জন্য প্রথম API এন্ডপয়েন্ট তৈরি করার প্রক্রিয়া সাধারণত কিছু গুরুত্বপূর্ণ ধাপ অনুসরণ করে করা হয়। এখানে আমরা দেখব কীভাবে একটি GraphQL API তৈরি করা যায় এবং প্রথম এন্ডপয়েন্ট তৈরি করা যায়। এটি করার জন্য আপনাকে প্রথমে একটি সার্ভার সেটআপ করতে হবে এবং তারপর GraphQL স্কিমা (Schema) তৈরি করতে হবে।
GraphQL API এন্ডপয়েন্ট তৈরি করার ধাপসমূহ
সার্ভার সেটআপ
গ্রাফকিউএল API সেটআপ করতে হলে প্রথমে একটি সার্ভার তৈরি করতে হবে। এখানে আমরা Node.js এবং Express ফ্রেমওয়ার্ক ব্যবহার করব। এর জন্য Apollo Server নামক একটি জনপ্রিয় লাইব্রেরি ব্যবহার করা হবে।
প্রথমে প্রয়োজনীয় প্যাকেজ ইনস্টল করা:
npm init -y
npm install express apollo-server-express graphql
এখানে আমরা express (একটি ওয়েব ফ্রেমওয়ার্ক), apollo-server-express (GraphQL API সার্ভার তৈরি করার জন্য), এবং graphql (GraphQL লাইব্রেরি) প্যাকেজগুলো ইনস্টল করব।
সার্ভার কনফিগারেশন
এখন আমাদের সার্ভার সেটআপ করতে হবে। নিচে একটি সহজ সার্ভারের উদাহরণ দেওয়া হল:
const express = require('express');
const { ApolloServer, gql } = require('apollo-server-express');
// GraphQL স্কিমা তৈরি করা
const typeDefs = gql`
type Query {
hello: String
}
`;
// Resolver তৈরি করা
const resolvers = {
Query: {
hello: () => 'হ্যালো, গ্রাফকিউএল!',
},
};
// ApolloServer তৈরি করা
const server = new ApolloServer({ typeDefs, resolvers });
const app = express();
// ApolloServer কে Express অ্যাপের সাথে যুক্ত করা
server.applyMiddleware({ app });
// সার্ভার চলানোর জন্য পোর্ট সেট করা
app.listen({ port: 4000 }, () =>
console.log(`সার্ভার চলমান আছে: http://localhost:4000${server.graphqlPath}`)
);
এই কোডের মাধ্যমে আপনি একটি সহজ GraphQL API তৈরি করবেন যা hello নামক একটি প্রশ্ন (Query) গ্রহণ করে এবং এর মাধ্যমে একটি স্ট্রিং হ্যালো, গ্রাফকিউএল! ফেরত পাঠায়।
GraphQL API এর প্রথম এন্ডপয়েন্ট তৈরি
এখন যে স্কিমা এবং রেজলভার তৈরি করেছেন তা কার্যকরী করার জন্য একটি API এন্ডপয়েন্ট তৈরি করতে হবে। সাধারণত, GraphQL API তে একটি single endpoint থাকে, যেমন /graphql। এই এন্ডপয়েন্টে সমস্ত কুয়েরি বা মিউটেশন পাঠানো হয়।
আমরা যেহেতু Apollo Server ব্যবহার করছি, এটি সরাসরি /graphql এন্ডপয়েন্ট দিয়ে কুয়েরি গ্রহণ করে। এই ক্ষেত্রে, server.applyMiddleware() মেথডটি আমাদের এন্ডপয়েন্ট সেট আপ করে দেয়।
GraphQL স্কিমা ও কুয়েরি
GraphQL স্কিমা (Schema):
GraphQL API এর প্রথম অংশ হল স্কিমা তৈরি করা। এটি একটি ডাটা টাইপ ডিফিনিশন যা API এর কুয়েরি বা মিউটেশন কীভাবে কাজ করবে তা নির্ধারণ করে। স্কিমা types (টাইপ), queries (কুয়েরি), এবং mutations (মিউটেশন) সহ সমস্ত কাঠামো বর্ণনা করে।
এখানে একটি সহজ স্কিমা উদাহরণ দেওয়া হয়েছে:
type Query {
hello: String
}
এই স্কিমাতে Query টাইপ রয়েছে এবং তার ভিতরে hello নামে একটি কুয়েরি রয়েছে যেটি একটি স্ট্রিং রিটার্ন করবে।
Resolvers:
Resolvers হল ফাংশন যা কুয়েরি বা মিউটেশন পাঠানোর পর ডেটা ফেরত নিয়ে আসে। আমাদের উদাহরণে hello কুয়েরির জন্য একটি সিম্পল রেজলভার দেওয়া হয়েছে:
const resolvers = {
Query: {
hello: () => 'হ্যালো, গ্রাফকিউএল!',
},
};
এখানে, যখন ক্লায়েন্ট /graphql এন্ডপয়েন্টে hello কুয়েরি পাঠাবে, তখন এটি এই রেজলভার দ্বারা ফেরত আসবে।
সার্ভার চালু করা
একবার কোড লিখে ফেললে, সার্ভার চালু করা খুব সহজ:
node index.js
এটি চালানোর পর, আপনি ব্রাউজারে গিয়ে http://localhost:4000/graphql এ যেতে পারেন এবং সেখানে GraphQL Playground ব্যবহার করে কুয়েরি পাঠাতে পারেন।
উদাহরণস্বরূপ, আপনি নিম্নলিখিত কুয়েরিটি পাঠাতে পারেন:
{
hello
}
এই কুয়েরি সার্ভারের hello রেজলভারকে কল করবে এবং হ্যালো, গ্রাফকিউএল! স্ট্রিংটি ফিরিয়ে দেবে।
সারাংশ
গ্রাফকিউএল (GraphQL) এর জন্য প্রথম API এন্ডপয়েন্ট তৈরি করতে, প্রথমে একটি সার্ভার সেটআপ করতে হবে, এরপর একটি স্কিমা তৈরি করতে হবে যেখানে কুয়েরি এবং রেজলভার উল্লেখ থাকবে। তারপরে সেই স্কিমা ও রেজলভার ব্যবহার করে Apollo Server তৈরি করে একক /graphql এন্ডপয়েন্ট তৈরি করতে হবে। একবার সেটআপ হয়ে গেলে, আপনি ব্রাউজার বা কন্সোলের মাধ্যমে কুয়েরি পাঠিয়ে সিস্টেমে ডেটা পরীক্ষা করতে পারবেন।
Read more