GraphQL কি?
GraphQL হল API-এর জন্য একটি ক্যোয়ারী ভাষা এবং আপনার ডেটার বিরুদ্ধে সেই প্রশ্নগুলি চালানোর জন্য একটি রানটাইম। এটি 2012 সালে Facebook দ্বারা বিকাশ করা হয়েছিল এবং 2015 সালে সর্বজনীনভাবে প্রকাশিত হয়েছিল।
মূল বৈশিষ্ট্য
দ্রষ্টব্য:
REST এর বিপরীতে, GraphQL ক্লায়েন্টদের তাদের ঠিক কোন ডেটার প্রয়োজন তা নির্দিষ্ট করার অনুমতি দেয়, অতিরিক্ত-নিষ্কাশন এবং ডেটার কম নিষ্কাশন হ্রাস করে।
Node.js-এ GraphQL দিয়ে শুরু করা
পূর্বশর্ত
- Node.js (v14 )
- JavaScript এবং Node.js এর প্রাথমিক জ্ঞান
- npm বা সুতা প্যাকেজ ম্যানেজার
ধাপ 1: একটি নতুন প্রকল্প সেট আপ করুন
একটি নতুন ফোল্ডার তৈরি করুন এবং Node.js প্রকল্প শুরু করুন:
mkdir graphql-server
cd graphql-server
npm init -y
ধাপ 2: প্রয়োজনীয় প্যাকেজ ইনস্টল করুন
প্রয়োজনীয় নির্ভরতা ইনস্টল করুন:
npm install express express-graphql graphql
এটি প্রতিষ্ঠা করে:
- express: Node.js
- express-graphql:একটি GraphQL HTTP সার্ভার তৈরি করতে মিডলওয়্যার
- graphql:GraphQL এর জাভাস্ক্রিপ্ট রেফারেন্স বাস্তবায়ন
ধাপ 3: একটি মৌলিক গ্রাফকিউএল সার্ভার তৈরি করুন
3.1 আপনার ডেটা মডেল সংজ্ঞায়িত করুন
একটি নতুন ফাইল server.js তৈরি করুন এবং GraphQL এর স্কিমা ডেফিনিশন ল্যাঙ্গুয়েজ (SDL) ব্যবহার করে আপনার ডেটা মডেল সংজ্ঞায়িত করা শুরু করুন:
const express = require('express'); const { graphqlHTTP } = প্রয়োজন('express-graphql'); const { buildSchema } = require('graphql'); // নমুনা তথ্য const বই = [ { আইডি: '1', শিরোনাম: 'দ্য গ্রেট গ্যাটসবি', লেখক: 'এফ। স্কট ফিটজেরাল্ড', বছর: 1925, ধারা: 'উপন্যাস' }, { আইডি: '2', শিরোনাম: 'টু কিল এ মকিংবার্ড', লেখক: 'হার্পার লি', বছর: 1960, ধরণ: 'দক্ষিণ গথিক' } ];
3.2 একটি GraphQL স্কিমা সংজ্ঞায়িত করুন
আপনার server.js ফাইলে প্রকল্প সংজ্ঞা যোগ করুন:
// GraphQL স্কিমা ভাষা ব্যবহার করে স্কিমা সংজ্ঞায়িত করুন const schema = buildSchema(` # একটি বইয়ের শিরোনাম, লেখক এবং প্রকাশনা বছর রয়েছে টাইপ বই { আইডি: আইডি! শিরোনাম: স্ট্রিং! লেখক: স্ট্রিং! বছর: Int ধরণ: স্ট্রিং } # "কোয়েরি" প্রকারটি সমস্ত গ্রাফকিউএল প্রশ্নের উত্স টাইপ কোয়েরি { # সব বই পান বই: [বই!]! # আইডি দ্বারা একটি নির্দিষ্ট বই পান বই (আইডি: আইডি!): বই # শিরোনাম বা লেখক দ্বারা বই অনুসন্ধান করুন searchBooks(query: String!): [Book!]! } `);
3.3 সমাধানকারীদের বাস্তবায়ন করুন
প্রকৃত তথ্য পেতে সমাধানকারী ফাংশন যোগ করুন:
// স্কিমা ক্ষেত্রগুলির জন্য সমাধানকারীদের সংজ্ঞায়িত করুন const root = { // সব বই পেতে সমাধানকারী বই: () => বই, // আইডি দ্বারা একটি একক বই পেতে সমাধানকারী বই: ({ id }) => books.find(book => book.id === id), // বই অনুসন্ধানের জন্য সমাধানকারী অনুসন্ধান বই: ({ প্রশ্ন }) => { const searchTerm = query.toLowerCase(); বই ফেরত. ফিল্টার( বই => book.title.toLowerCase().includes(searchTerm) || book.author.toLowerCase().includes(searchTerm) ); } };
3.4 এক্সপ্রেস সার্ভার সেট আপ করুন
সার্ভার সেটআপ সম্পূর্ণ করুন:
// একটি এক্সপ্রেস অ্যাপ্লিকেশন তৈরি করুন const app = express(); // GraphQL টার্মিনাল সেট আপ করুন app.use('/graphql', graphqlHTTP({ স্কিমা: স্কিমা, rootValue: root, // পরীক্ষার জন্য GraphiQL ইন্টারফেস সক্ষম করুন গ্রাফিকাল: সত্য, })); // সার্ভার শুরু করুন const PORT = 4000; app.listen(PORT, () => { console.log(`সার্ভার http://localhost:${PORT}/graphql` এ চলছে); });
ধাপ 4: আপনার GraphQL সার্ভার চালান এবং পরীক্ষা করুন
4.1 সার্ভার শুরু করুন
Node.js :
node server.js
আপনি বার্তা দেখতে হবে:Server running at http://localhost:4000/graphql
4.2 গ্রাফিকিউএল দিয়ে পরীক্ষা করুন
আপনার ব্রাউজার খুলুন এবং GraphiQL ইন্টারফেস অ্যাক্সেস করতে http://localhost:4000/graphql এ যান।
উদাহরণ প্রশ্ন: সব বই পান
{
books {
id
title
author
year
}
}
উদাহরণ প্রশ্ন: একটি একক বই পান
{
book(id: "1") {
title
author
genre
}
}
উদাহরণ ক্যোয়ারী: বই অনুসন্ধান করুন
{
searchBooks(query: "Gatsby") {
title
author
year
}
}
গ্রাফকিউএল স্কিম এবং প্রকার
GraphQL স্কিমাগুলি আপনার API এর গঠন এবং অনুরোধ করা যেতে পারে এমন ডেটার প্রকারগুলিকে সংজ্ঞায়িত করে৷
টাইপ সিস্টেম
GraphQL আপনার ডেটার বিন্যাস সংজ্ঞায়িত করতে একটি টাইপ সিস্টেম ব্যবহার করে। এখানে মৌলিক স্কেলিং ধরনের আছে:
| টাইপ | ব্যাখ্যা | উদাহরণ |
|---|---|---|
| Int | একটি স্বাক্ষরিত 32-বিট পূর্ণসংখ্যা | 42 |
| Float | একটি স্বাক্ষরিত দ্বিগুণ-নির্ভুল ফ্লোটিং-পয়েন্ট মান | 3.14 |
| String | UTF-8 অক্ষর স্ট্রিং | "Hello, GraphQL!" |
| Boolean | সত্য বা মিথ্যা | true, false |
| ID | অনন্য শনাক্তকারী, একটি স্ট্রিং হিসাবে ক্রমিক | "5f8a8d8e8f8c8d8b8a8e8f8c" |