Basic Concept of GraphQL

Nur Amin Sifat
4 min readMay 5, 2024
https://images.app.goo.gl/hiqRMSw49jKq8fu68

গ্রাফকিউয়েল কি, কেন, কিভাবে এবং কোন ধরনের সমস্যার সমাধান করে আজকে সে বিষয়ে জানবো, তা শুরু করা যাক।

গ্রাফকিউয়েল হচ্ছে এপিআই ডেভেলপ করার একটি কুয়েরি ল্যাঙ্গুয়েজ, যেখানে ক্লাইয়েন্ট ডাটার উপর কুয়েরি করতে পারে এবং বিশেষ কিছু প্রসেসের মাধ্যমে ব্যাকেন্ড ডাটা ম্যানিপুলেট করতে পারে।

গ্রাফকিউয়েল রেষ্টের মতো (GET, POST, DELETE,PUT) নিয়ে কাজ করে না, শুধু মাত্র POST পোস্ট রিকুয়েষ্টের মাধ্যমে ডাটা নিয়ে আসা ও সার্ভার সাইডে পরিবর্তন করে থাকে, যদিও উভয়ই http প্রোটকল নিয়ে কাজ করে। একটা মজার ব্যাপার হচ্ছে এটা শুধুমাত্র একটা ইন্ডপয়েন্টের উপর কাজ করে, রেষ্টের মতো একাধিক ইন্ডপয়েন্ট নিয়ে কাজ করে না।

সংক্ষিপ্ত ইতিহাস এবং সমস্যা সমাধান :

২০১২ সালে ফেসবুক সর্বপ্রথম গ্রাফকিউয়েল ডেভেলপ করে এবং তা মোবাইল এপ্লিকেশনে ব্যবহার করে যা ২০১৫ সাল নাগাদ সবার জন্য ওপেন সোর্স করা হয়।

এখন প্রশ্ন আস্তে পারে কেন ফেসবুক রেস্ট এপিআই এর পরিবর্তে গ্রাফকিউয়েল নিয়ে আসলো।

মূল ব্যাপারটা ছিল মোবাইল এপ্লিকেশন নিউজ ফিড নিয়ে, তখন ফেসবুকের ডাটা গুলো আসতো রেষ্ট এপিআই থেকে। রেষ্ট এপিআই থেকে ডাটা নিয়ে আসতে ফেসবুকের কিছু সমস্যার সম্মুখীন হতে হতো। যে সমস্যা গুলো ছিল ঠিক এরকম:

১. ডাটা ওভার-ফেচিং: রেষ্ট এপিআইয়ে কোন একটা নির্দিষ্ট ভিউয়ের জন্য প্রায়ই প্রয়োজনের তুলনায় বেশি ডাটা নিয়ে আসত। ফলে ডাটার সাইজ বড় হয়ে যেত এবং প্রয়োজনের চেয়ে বেশি ব্যান্ডউইথ লাগতো, যার জন্য মোবাইল এপ্লিকেশনের পারফর্মেন্স ধীর গতির হতো।

২. ডাটা আন্ডারফেচিং: এমনো কিছু পরিস্থিতি ছিল সেখানে একটা মোবাইল ভিউতে যতো গুলো ডাটার দরকার ছিল তা আসে নি, সেজন্য একের অধিক API কল করা লাগতো। একের অধিক এপিআই কল করার কারণে ব্যাকেণ্ডে রিকুয়েষ্ট বেশি হয়ে যেতো, ফলে এপ্লিকেশনের পারফর্মেন্স ধীর গতির হতো, যেটাকে আন্ডার ফেচিং বলে।

আরো বেশ কিছু ব্যাপার ছিলো তবে মূলত উপর দুটো বিষয় বেশি গুরুত্বপূর্ণ ছিলো সমাধান করা।

এই সমস্ত চ্যালেঞ্জ গুলোর সমাধানের জন্য গ্রাফকিউয়েল ডেভেলপ করার চিন্তা ভাবনা করা হয়। কেননা এটা ক্লায়েন্ট কে ঠিক যতটুকু ডাটা দরকার ঠিক ততটুকু ডাটা দিতে সক্ষম। ক্লায়েন্ট সাইড থেকে কুয়েরিতে কেমন ডাটা দরকার তা বলে দিতে সক্ষম, আর API সেসব ডাটা দিতে বাধ্য। কোনরুপ কম বা বেশি দিবে না। যার ফলশ্রুতিতে ফেসবুকের মোবাইল এপ্লিকেশনের পারফর্মেন্স গতিশীল হয়েছে, সাথে ব্যান্ডউইথ ব্যবহার কমেছে এবং ক্লায়েন্ট সার্ভার ইন্টারেকশন দ্রুতগতির হয়েছে।

নিচে গ্রাফকিউয়েল এর কিছু গুরুত্বপূর্ণ বৈশিষ্ঠ নিয়ে আলোচনা করা হলো:

১. কুয়েরি ল্যাংগুয়েজ: গ্রাফকিউয়েল রিকুয়ারিমেন্ট অনুযায়ী ক্লাইন্ট সাইডে কেমন ডাটা দেওয়া হবে সেটা বর্ণনা করা যায়। ক্লাইন্ট স্পেসিফিক ভাবে বলে দিতে পারবে তার কেমন ডাটা লাগবে, এটা হতে পারে নেস্টেড ফিল্ড বা যেকোন ধরণের রিলেশন অথবা একটা সিঙ্গেল কুয়েরি। আর এই কুয়েরি গুলো ওভার ফেচিং এবং আন্ডার ফেচিং সমস্যা সমাধান করে, যেটা ইতোমধ্যে আলোচনা করেছি।

২. সিঙ্গেল ইন্ডপয়েন্ট: এটা প্রচলিত রেস্ট এপিআই এর বিপরীত, কেননা এটা বিভিন্ন ডাটার জন্য বিভিন্ন ইন্ডপয়েন্ট এক্সপোজ করে না, বরং সিঙ্গেল ইন্ডপয়েন্ট ব্যবহার করে কুয়েরির মাধ্যমে সব ডাটা নিয়ে আসতে পারে। যার ফলে এপ্লিকেশনে অবান্তর রিকুয়েষ্টের সংখ্যা কমতে থাকে এবং এপ্লিকেশন পারফর্মেন্স বাডতে থাকে।

৩. স্ট্রং টাইপিং: গ্রাফকিউয়েলর স্কিমা মূলত ডিফাইন করে কি ধরণের ডাটা আমি পেতে পারি, যেগুলোর টাইপিং খুবই স্ট্রংলি মেইনটেইন করা হয়। এটা ক্লাইন্ট এর দিকে একটা ভেলিডেশন বা ডকুমেন্টেশনের মত কাজ করতে পারে।

৪. রিয়েল টাইম আপডেট: গ্রাফকিউয়েল সাবক্রিপশনের মাধুমে রিয়েল টাইম আপডেট করতে পারে। সাবক্রিপশন মূলত কোনরকম ডাটা পোলিং ছাড়া চেঞ্জকৃত ডাটা ক্লাইন্টের কাছে দিতে পারে যখনই সার্ভার সাইডে কোন ধরণের ইভেন্ট ট্রিগার হয়।

৫. স্কিম সুইচিং এবং ফেডারেশন: গ্রাফকিউয়েলর মাধ্যমে একাধিক স্কিমকে মার্জ করে সিঙ্গেল কুয়েরিতে কনভার্ট করা সম্ভব।

৬. ক্লায়েন্ট ড্রাইভেন ডেভেলপমেন্ট: গ্রাফকিউয়েল ক্লায়েন্টকে ডাটা ফেচিং প্রসেস করার এমন কিছু সুযোগ সুবিধা দেয যা কিনা ডেভেলপমেন্ট প্রসেসকে বাড়িয়ে দেয়। উদাহরণস্বপ উপরে বলেছি কুয়েরি ক্লাইন্ট থেকে ডিফাইন করা যায়।

গ্রাফকিউয়েল কি সব ধরণের এপ্লিকেশনের জন্য ভালো?

খুব ছোট সাদামাটা এপ্লিকেশনের জন্য গ্রাফকিউয়েল ভালো অপশন না।

ইতোমধ্যে রেস্ট এপিআই আছে, যেটা ক্লায়েন্টকে তাদের প্রত্যাশা অনুযায়ী আউপুট দিচ্ছে এক্ষেত্রে গ্রাফকিউয়েল ভালো সুট করলেও ব্যক্তিগত ভাবে মতামত সেটা ভেঙে নতুন ভাবে এটা ডেভেলপ করা উচিত হবে না। কেননা পারফর্মেন্স বিবেচনাতে যদি আমরা সঠিক ভাবে ইমপ্লিমেন্ট করতে না পারে এক্ষেত্রে উল্টো ওভারহেড হতে পারে।

রেস্ট এপিআই এর ক্যাশিং ম্যাকানিজম প্রতিষ্ঠিত, প্রত্যেকটা ইন্ডপয়েন্ট ইউনিক থাকার কারণে এবং ডাটার ধরণ একই থাকার করণে ক্যাশিং করা সহজ হয়। কিন্তু গ্রাফকিউলের ক্ষেত্রে ব্যাপারটা আলাদা, শুধু মাত্র একটা ইন্ডপয়েন্ট থাকার কারণে এবং ক্লাইন্টের কুয়েরি ভিন্নতার কারণে ক্যাশিং করাটা কিছুটা কঠিন, এক্ষেত্রে কুয়েরি ও ডাটার ধরণের উপর নির্ভর করে ক্যাশিং করা হয়, তবে কিছুটা জটিল।

তাছাড়া গ্রাফকিউয়েলের প্রাথমিক সেটাপ রেষ্ট আপিআইয়ের মতো এতো সহজ নয়, তাই এটাকে বিগিনার ফ্রেন্ডলি বলা চলে না। সেজন্য ম্যাক্সিমাম নতুনরা এপিআই ব্যাপারটা বুঝার জন্য রেষ্ট আপিআই দিয়ে শুরু করে যেটা ভালো।

সর্বোশেষ একটা প্রশ্ন গ্রাফকিউয়েল কি রে্ষ্টের বিকল্প হতে পারে? আমার উত্তর হবে হ্যা অথবা না। দুটোর যার যার ভালো ও খারাপ দিক আছে।

তাছাড়া সব ধরনের আর্কিটেকচারে কিছু ভালো মন্দ ব্যাপার থাকে। সফটওয়্যার ইঞ্জিনিয়ারিং হচ্ছে একটা ডাইনামিক প্রসেস। বিজনেসের কোন রিকুয়েরিমেন্টের নতুন সংযোজন বা পরিবর্তনের জন্য যেকোন আর্কিটেকচার ব্যবহার করা লাগতে পারে। মোট-কথা: পরিস্থিতি বুঝে সমস্যা সমাধানের নামই হচ্ছে ইঞ্জিনিয়ারিং।

Basic Implementation of Django GraphQL Crud:
https://github.com/GenesisBlock3301/django_grapql.git

--

--

Nur Amin Sifat

I'm a Associate Software Engineer at Brain Station 23 and Data Security learner as well.