REST এন্ডপয়েন্ট টন অতিরিক্ত ডেটা ফেরত দেয়, কিন্তু ক্লায়েন্টের প্রয়োজন মাত্র কয়েকটি ফিল্ড? GraphQL পদ্ধতি বদলে দেয়: একটি এন্ডপয়েন্ট, ক্লায়েন্ট শুধু যা প্রয়োজন তা চায়। টাইপযুক্ত স্কিমা, রিয়েল-টাইমের জন্য সাবস্ক্রিপশন, ক্যাশিংয়ের জন্য Apollo। কোন overfetching বা underfetching নেই।
GraphQL হল একটি কোয়েরি ভাষা এবং টাইপযুক্ত স্কিমাসহ API-র জন্য রানটাইম। একটি এন্ডপয়েন্ট, ক্লায়েন্ট সিদ্ধান্ত নেয় কোন ফিল্ড এবং রিলেশনশিপ কোয়েরি করতে হবে। কোন overfetching নেই, কোন under-fetching নেই। পড়ার জন্য Queries, লেখার জন্য Mutations, রিয়েল-টাইমের জন্য Subscriptions।
টাইপযুক্ত স্কিমা — Schema Definition Language (SDL)। প্রতিটি টাইপ, ফিল্ড এবং আর্গুমেন্ট কঠোরভাবে টাইপযুক্ত। কম্পাইল টাইমে ত্রুটি, রানটাইমে নয়। GraphQL React ক্লায়েন্ট এবং Next.js-এর সাথে ভালভাবে মিশে
একটি এন্ডপয়েন্ট — ডজনখানেক REST রুটের বদলে /graphql। সব অনুরোধ POST-এর মাধ্যমে, GraphiQL বা Apollo Studio-র মাধ্যমে ব্রাউজার থেকে সরাসরি স্কিমা ইন্ট্রোস্পেকশন
সাবস্ক্রিপশন (রিয়েল-টাইম) — পরিবর্তনের জন্য WebSocket সাবস্ক্রিপশন। চ্যাট, নোটিফিকেশন, অ্যাক্টিভিটি ফিড — সবকিছু একটি একক ব্যবস্থার মাধ্যমে রিয়েল-টাইমে
Apollo / Relay — ক্যাশিং, অপ্টিমিস্টিক আপডেট এবং টাইপ কোড জেনারেশন সহ ক্লায়েন্ট লাইব্রেরি
GraphQL · Schema · Queries · Mutations · Apollo
GraphQL একটি ডিক্লারেটিভ কোয়েরি ভাষা। ক্লায়েন্ট বর্ণনা করে তার কী ডেটা প্রয়োজন এবং ঠিক তা পায়। একটি বাইটও অতিরিক্ত নয়। কঠোর টাইপিং, ইন্ট্রোস্পেকশন, একটি এন্ডপয়েন্ট।
টাইপ, ইন্টারফেস, ইউনিয়ন টাইপ, এনাম। স্কিমা স্তরে কঠোর বৈধতা। যেকোনো কোয়েরি নির্বাহের আগে পরীক্ষা করা হয় — ত্রুটি অসম্ভব।
ক্যাশিং এবং অনুমোদনসহ Apollo Server। InMemoryCache, অপ্টিমিস্টিক আপডেট এবং স্কিমা থেকে টাইপ কোড জেনারেশনসহ Apollo Client।
WebSocket-ভিত্তিক সাবস্ক্রিপশন। চ্যাট, নোটিফিকেশন, অ্যাক্টিভিটি ফিড এবং সহযোগী অ্যাপ্লিকেশনের জন্য তাৎক্ষণিক আপডেট।
GraphQL খেলার নিয়ম বদলে দেয়: এখন ক্লায়েন্ট নির্ধারণ করে কী ডেটা পাবে। ফ্রন্টএন্ড ডেভেলপার একটি কোয়েরি লেখে এবং স্ক্রিনের ঠিক যা প্রয়োজন তা পায়। প্রতিটি ফিল্ডের জন্য ব্যাকএন্ডের সাথে সমন্বয়ের প্রয়োজন নেই।
GraphQL হল একটি কঠোর স্কিমার উপর ভিত্তি করে ক্লায়েন্ট এবং সার্ভারের মধ্যে চুক্তি। আমরা schema-first ডিজাইন করি, স্বয়ংক্রিয়ভাবে টাইপ জেনারেট করি এবং প্রতিটি রিজল্ভার পরীক্ষা করি।
স্কিমা ডিজাইন — Schema-first পদ্ধতি। প্রথমে, টাইপ, কোয়েরি এবং মিউটেশন রুটের SDL বর্ণনা। সার্ভার ডেভেলপমেন্ট শুরুর আগেই ক্লায়েন্ট স্কিমা পেয়ে যায়।
রিজল্ভার এবং DataLoader — DataLoader-এর মাধ্যমে ব্যাচিংসহ দক্ষ রিজল্ভার। N+1 সমস্যা আর্কিটেকচারালি সমাধান হয়, প্যাচওয়ার্ক দিয়ে নয়।
হাইব্রিড REST + GraphQL — আমরা সহজ CRUD অপারেশনের জন্য REST এবং জটিল কোয়েরির জন্য GraphQL একত্রিত করি। একীভূত প্রমাণীকরণ এবং অনুমোদন।
Codegen এবং টাইপিং — GraphQL Codegen স্কিমা থেকে স্বয়ংক্রিয়ভাবে TypeScript টাইপ জেনারেট করে। ক্লায়েন্ট কোড সম্পূর্ণ টাইপযুক্ত, কম্পাইল টাইমে ত্রুটি।
সাবস্ক্রিপশন এবং রিয়েল-টাইম — Apollo বা graphql-ws-এর মাধ্যমে WebSocket সাবস্ক্রিপশন। চ্যাট, নোটিফিকেশন, সহযোগী সম্পাদনা — সবকিছু রিয়েল-টাইমে।
মোবাইল অ্যাপ্লিকেশনের জন্য GraphQL — ক্লায়েন্ট শুধু প্রয়োজনীয় ফিল্ড চায়, কোন overfetching নেই। সীমিত ব্যান্ডউইথের iOS এবং Android-এর জন্য আদর্শ।
স্কিমা বর্ণনা → TypeScript টাইপ, React হুক এবং ডকুমেন্টেশন জেনারেশন। কোন ম্যানুয়াল ডুপ্লিকেশন নেই। স্কিমা পরিবর্তন করলাম — টাইপ স্বয়ংক্রিয়ভাবে আপডেট হয়ে গেল।
GraphQL API অর্ডার করুন — একটি নমনীয়, টাইপযুক্ত এবং উচ্চ-কার্যক্ষম ডেটা স্তর পান যা ফ্রন্টএন্ড ডেভেলপমেন্ট ত্বরান্বিত করে এবং অপ্রয়োজনীয় কোয়েরি দূর করে।
আমরা রিজল্ভার লেখার আগে SDL-এ GraphQL স্কিমা ডিজাইন করি। টাইপ, রিলেশনশিপ, মিউটেশন — ফ্রন্টএন্ড প্রথম দিন থেকেই একটি প্রস্তুত চুক্তি দেখে।
প্রতিটি রিজল্ভারের ইউনিট টেস্ট, স্কিমার ইন্টিগ্রেশন টেস্ট, Apollo Studio-র সাথে অটো-ডিপ্লয়। পরিবর্তন করলেও স্কিমা ক্লায়েন্ট ভাঙে না।
ব্রাউজারে সরাসরি কোয়েরি চালানোর ক্ষমতাসহ ইন্টারঅ্যাকটিভ ডকুমেন্টেশন। রিয়েল-টাইমে WebSocket-এর মাধ্যমে সাবস্ক্রিপশন।
GraphQL হল বিশৃঙ্খলা ছাড়া নমনীয়তা। ক্লায়েন্ট ঠিক তাই পায় যা সে চেয়েছে, এবং সার্ভার টাইপ এবং কাঠামো নিশ্চিত করে। ফ্রন্টএন্ড এবং ব্যাকএন্ড স্বাধীনভাবে বিকশিত হয় কিন্তু সামঞ্জস্যপূর্ণ থাকে — স্কিমা শৃঙ্খলা বজায় রাখে।