GraphQL — API کے لیے استفسار کی زبان اور ان استفساروں کو انجام دینے کا ماحول ہے، جسے Facebook نے 2012 میں تیار کیا اور 2015 میں کھولا گیا۔ REST کے برعکس، جہاں سرور جواب کی ساخت کا تعین کرتا ہے، GraphQL کلائنٹ کو یہ بتانے دیتا ہے کہ اسے کون سا ڈیٹا درکار ہے، overfetching اور underfetching کے مسائل کو مکمل طور پر ختم کرتا ہے۔ State of JavaScript Survey (2025) کے مطابق، 35% جواب دہندگان GraphQL استعمال کرتے ہیں، اور بڑی کمپنیوں میں GitHub، Shopify، Airbnb اور The New York Times نے اسے اپنایا ہے۔ GraphQL تین قسم کی کارروائیوں کو سپورٹ کرتا ہے: query (پڑھنا)، mutation (لکھنا) اور subscription (WebSocket کے ذریعے real-time اپ ڈیٹس)۔
اہم نکات
GraphQL — API کے لیے ایک تصریح اور رن ٹائم ماحول ہے جو کلائنٹ کو موصول ہونے والے ڈیٹا پر مکمل کنٹرول دیتا ہے۔ Facebook کے انجینئرز کی طرف سے News Feed موبائل ایپلیکیشن کے مسائل حل کرنے کے لیے تیار کیا گیا، یہ تصریح 2015 میں کھلے معیار کے طور پر شائع کی گئی۔ 2018 سے GraphQL GraphQL Foundation کے زیر انتظام ہے جو Linux Foundation اور Apollo، AWS، GitHub، SAP جیسی کمپنیوں کی حمایت سے چلایا جاتا ہے۔
REST کے برعکس، جہاں ہر endpoint ڈیٹا کا ایک مقررہ ڈھانچہ لوٹاتا ہے، GraphQL ایک واحد endpoint استعمال کرتا ہے جو استفسار کی سٹرنگ قبول کرتا ہے۔ کلائنٹ استفسار میں بیان کرتا ہے کہ اسے کون سے فیلڈز چاہییں، اور سرور صرف وہی لوٹاتا ہے۔ مثال کے طور پر، استفسار { user(id: "1") { name email } } صرف صارف کا name اور email لوٹائے گا، بغیر address، phone یا createdAt جیسے اضافی فیلڈز کے جو REST میں حاصل کرنے پڑتے۔
GraphQL کسی خاص ڈیٹابیس یا زبان سے منسلک نہیں ہے۔ تصریح صرف استفسار اور جواب کا فارمیٹ متعین کرتی ہے۔ Node.js (graphql-js, Apollo Server)، Kotlin (graphql-kotlin, Netflix DGS Framework)، Python (Graphene, Strawberry)، Ruby (graphql-ruby) اور دیگر زبانوں میں سرور کے نفاذ موجود ہیں۔ کلائنٹ لائبریریاں تمام بڑے پلیٹ فارمز کے لیے دستیاب ہیں، بشمول iOS، Android اور ویب کے لیے Apollo Client۔
GraphQL کا فن تعمیر تین اہم اجزاء پر مشتمل ہے: اسکیما (Schema)، ریزالورز (Resolvers) اور ایگزیکیوشن انجن (GraphQL Engine)۔ اسکیما متعین کرتا ہے کہ ڈیٹا کی کون سی اقسام دستیاب ہیں، کون سے استفسار کیے جا سکتے ہیں اور وہ کون سے دلائل قبول کرتے ہیں۔ ریزالورز سرور پر موجود فنکشنز ہیں جو اسکیما کے ہر فیلڈ کے لیے ڈیٹا لوٹاتے ہیں۔ ایگزیکیوشن انجن آنے والے استفسار کو وصول کرتا ہے، اسے اسکیما کے مطابق درست کرتا ہے، متعلقہ ریزالورز کو کال کرتا ہے اور جواب جمع کرتا ہے۔
استفسار کی پروسیسنگ کا عمل اس طرح ہے:
GraphQL فن تعمیر کا اہم فائدہ — فیلڈ کی سطح پر ریزولوشن ہے۔ REST میں ڈیولپر یا تو وسائل کے تمام فیلڈز حاصل کرتا ہے (ممکنہ طور پر اضافی) یا ?fields=name,email جیسی توسیعات استعمال کرتا ہے۔ GraphQL میں یہ فلٹریشن زبان میں شامل ہے: ہر استفسار واضح طور پر بتاتا ہے کہ کون سے فیلڈز درکار ہیں، اور سرور صرف وہی لوٹاتا ہے۔ یہ خاص طور پر موبائل ایپلیکیشنز کے لیے اہم ہے، جہاں ڈیٹا کا حجم براہ راست لوڈنگ کی رفتار اور ٹریفک کے استعمال پر اثر انداز ہوتا ہے۔
GraphQL تین اقسام کی کارروائیوں کی وضاحت کرتا ہے، جن میں سے ہر ایک تعامل کے مخصوص منظر نامے سے مطابقت رکھتی ہے۔ Query — ڈیٹا پڑھنے کے لیے، REST میں GET کے مشابہ۔ Mutation — ڈیٹا میں تبدیلی کے لیے (تخلیق، تازہ کاری، حذف)، REST میں POST/PUT/DELETE کے مشابہ۔ Subscription — WebSocket کے ذریعے real-time اپ ڈیٹس کے لیے، جس کا کلاسک REST میں براہ راست متبادل نہیں ہے (WebSocket یا Server-Sent Events جیسے اضافی حل درکار ہیں)۔
استفسار کا بنیادی نحو بدیہی طور پر سمجھ میں آتا ہے:
// Simple query with argument
query {
user(id: "42") {
name
email
avatarUrl
}
}
// Mutation returning changed data
mutation {
updateProfile(name: "John") {
id
name
updatedAt
}
}
// Subscription — listens to real-time updates
subscription {
newMessage(chatId: "chat_1") {
id
text
sender { name }
}
}
Query متوازی طور پر انجام دیا جاتا ہے — ایک سطح کے تمام فیلڈز بیک وقت لوڈ ہوتے ہیں۔ یہ متعدد round-trips کے بغیر ایک استفسار میں متعلقہ ڈیٹا (صارف اور اس کی پوسٹس) لوڈ کرنے کی اجازت دیتا ہے۔ Mutation ترتیب وار انجام دیا جاتا ہے — ایک استفسار میں موجود mutational اعلان کی ترتیب میں ایک کے بعد ایک انجام پاتی ہیں۔ Subscription WebSocket کے ذریعے مستقل کنکشن قائم کرتا ہے، جس کے ذریعے سرور واقعہ پیش آنے پر ڈیٹا بھیجتا ہے۔
کارروائیاں متغیرات (استفسار سے ڈیٹا الگ کرنے کے لیے)، ہدایات (@include, @skip) (فیلڈز کو مشروط طور پر شامل کرنے کے لیے) اور fragments (فیلڈز کے سیٹ کو دوبارہ استعمال کرنے کے لیے) قبول کر سکتی ہیں۔ یہ صلاحیتیں GraphQL استفساروں کو لچکدار اور دوبارہ قابل استعمال بناتی ہیں، جو خاص طور پر بڑے منصوبوں میں اہم ہے جن میں متعدد اسکرینز اور اجزاء ہوتے ہیں۔
GraphQL کی بنیاد ٹائپ سسٹم ہے جو API کے تمام ممکنہ ڈیٹا اور کارروائیوں کو بیان کرتا ہے۔ اسکیما (Schema) ان اقسام کی وضاحت ہے جو سرور لوٹا سکتا ہے اور ان استفساروں کی جو قبول کرتا ہے۔ اسکیما Schema Definition Language (SDL) میں لکھا جاتا ہے اور کلائنٹ اور سرور کے درمیان معاہدے کا کام کرتا ہے۔ کلائنٹ introspection کے ذریعے اسکیما حاصل کر سکتا ہے — ایک خاص __schema استفسار جو API کی مکمل وضاحت لوٹاتا ہے۔
بلاگ کے لیے اسکیما کی مثال:
// SDL — Schema Definition Language
type User {
id: ID!
name: String!
email: String
posts: [Post!]!
}
type Post {
id: ID!
title: String!
content: String
author: User!
}
type Query {
user(id: ID!): User
posts(page: Int): [Post!]!
}
فجائیہ نشان (!) non-null فیلڈ کو ظاہر کرتا ہے — یہ جواب میں یقینی طور پر موجود ہوگا۔ مربع بریکٹ [ ] فہرست کو ظاہر کرتے ہیں۔ GraphQL scalar اقسام (Int, Float, String, Boolean, ID)، آبجیکٹ اقسام، enum، union، interface اور input-اقسام (mutational کے دلائل کے لیے) کو سپورٹ کرتا ہے۔ سخت ٹائپنگ API کو خود دستاویزی بناتی ہے اور کلائنٹ ٹولز کو کوڈ جنریٹ کرنے کی اجازت دیتی ہے: TypeScript اقسام، Kotlin ڈیٹا کلاسز، Swift ڈھانچے۔
Introspection — GraphQL کی منفرد صلاحیت ہے جو REST میں موجود نہیں ہے۔ کلائنٹ اسکیما کو ایک استفسار بھیج سکتا ہے اور تمام اقسام، فیلڈز، دلائل اور ہدایات کی مکمل وضاحت حاصل کر سکتا ہے۔ یہ GraphiQL اور Apollo Studio جیسے ٹولز کی بنیاد ہے جو خود بخود ڈویلپرز کے لیے دستاویزات اور آٹوکمپلیشن تیار کرتے ہیں۔ Introspection خودکار ٹیسٹ لکھنے کی بھی اجازت دیتا ہے جو متوقع ڈھانچے کے ساتھ اسکیما کی مطابقت کی جانچ کرتے ہیں۔
GraphQL اور REST کے درمیان انتخاب API کو ڈیزائن کرتے وقت اہم فن تعمیراتی سوالات میں سے ایک ہے۔ دونوں طریقوں کی اپنی خوبیاں اور کمزوریاں ہیں، اور انتخاب منصوبے کی مخصوص ضروریات پر منحصر ہے۔ REST سادگی اور عالمگیریت میں بہتر ہے، GraphQL — استفساروں کی لچک اور کارکردگی میں۔ آئیے موازنہ جدول دیکھتے ہیں۔
| معیار | REST | GraphQL |
|---|---|---|
| جواب کی ساخت | مقررہ، سرور کی طرف سے | لچکدار، کلائنٹ کی طرف سے |
| Overfetching | اکثر — سرور تمام فیلڈز لوٹاتا ہے | نہیں — کلائنٹ صرف ضروری فیلڈز طلب کرتا ہے |
| استفساروں کی تعداد | متعدد round-trips | تمام ڈیٹا کے لیے ایک استفسار |
| کیشنگ | مقامی HTTP کیشنگ | دستی ترتیب درکار ہے |
| ٹائپنگ | متعارف نہیں (فارمیٹ پر منحصر) | سخت، SDL اسکیما کے ذریعے |
| ٹولز | curl, Postman, Swagger | GraphiQL, Apollo Studio, Introspection |
| فائل اپ لوڈ | multipart کے ذریعے مقامی طور پر | اضافی پروٹوکول درکار ہیں |
| کارکردگی | متوقع، بہتر بنانا آسان | درجہ دار استفساروں کی پیچیدگی پر منحصر |
GraphQL کا بنیادی نقصان — کیشنگ کی پیچیدگی ہے۔ REST میں HTTP کیشنگ URL کی سطح پر کام کرتی ہے: /api/users/42 پر ایک استفسار ہمیشہ ایک جیسی ساخت لوٹاتا ہے، اور جواب کو URL کے لحاظ سے کیش کیا جا سکتا ہے۔ GraphQL میں تمام استفسار ایک endpoint پر جاتے ہیں، جواب کی ساخت استفسار کے باڈی پر منحصر ہوتی ہے۔ اس مسئلے کو حل کرنے کے لیے Apollo Client کلائنٹ کی طرف سے نارملائزڈ کیش استعمال کرتا ہے، جو جوابات کو id کے لحاظ سے الگ الگ اداروں میں تقسیم کرتا ہے اور نئے ڈیٹا ملنے پر خود بخود انہیں اپ ڈیٹ کرتا ہے۔
ایک اور اہم پہلو — N+1 مسئلہ ہے۔ درجہ دار ڈیٹا کی درخواست کرتے وقت (مثلاً صارف کی پوسٹس اور ہر پوسٹ پر تبصرے)، GraphQL فہرست کے ہر آئٹم کے لیے الگ SQL استفسار انجام دے سکتا ہے۔ یہ DataLoader کی مدد سے حل کیا جاتا ہے — ڈیٹابیس استفساروں کو بیچنگ اور کیش کرنے کی یوٹیلیٹی جو الگ الگ استفساروں کو ایک بیچ میں گروپ کرتی ہے۔ REST میں یہ مسئلہ کم نمایاں ہے کیونکہ ڈیولپر سرور پر جواب کی ساخت کو کنٹرول کرتا ہے۔
Apollo Client کے ساتھ Kotlin میں موبائل ایپلیکیشن میں GraphQL کے عملی استعمال کی مثالیں دیکھتے ہیں۔ یہ مثالیں عام منظرناموں کو ظاہر کرتی ہیں: پروفائل اسکرین کے لیے ڈیٹا لوڈ کرنا (query)، نیا پوسٹ بنانا (mutation) اور نئے تبصروں کی سبسکرائب کرنا (subscription)۔ ہر مثال میں GraphQL استفسار اور کلائنٹ سائڈ کوڈ دونوں شامل ہیں۔
ایک GraphQL استفسار صارف، اس کی تازہ ترین پوسٹس اور کل فالوورز کی تعداد لوڈ کرتا ہے۔ REST میں اس کے لیے کم از کم 2-3 استفسار درکار ہوتے: /users/42, /users/42/posts, /users/42/stats۔ GraphQL انہیں ایک round-trip میں یکجا کرتا ہے، سست کنکشنز پر اسکرین لوڈنگ کا وقت کم کرتا ہے۔
// GraphQL query (in .graphql file)
query ProfileScreen($userId: ID!) {
user(id: $userId) {
name
bio
avatarUrl
posts(limit: 10) {
id
title
createdAt
}
followersCount
followingCount
}
}
// Client call (Apollo Client + Kotlin)
val response = apolloClient
.query(ProfileScreenQuery(userId = "42"))
.execute()
binding.nameText.text = response.data?.user?.name
Mutation نہ صرف وسائل تخلیق کرتا ہے بلکہ UI کو اپ ڈیٹ کرنے کے لیے اس کا تازہ ترین ڈیٹا بھی لوٹاتا ہے۔ __typename فیلڈ Apollo Client کے ذریعے کیش کو نارملائز کرنے کے لیے استعمال ہوتا ہے — کلائنٹ کامیاب mutation جواب پر خود بخود کیش میں Post ریکارڈ کو اپ ڈیٹ کر دے گا۔
// GraphQL mutation
mutation CreatePost($input: CreatePostInput!) {
createPost(input: $input) {
id
title
createdAt
author {
id
name
}
}
}
// Mutation call with input type
val input = CreatePostInput(
title = "New post about GraphQL",
content = "GraphQL simplifies working with API..."
)
val result = apolloClient
.mutation(CreatePostMutation(input))
.execute()
موبائل ڈیولپمنٹ کے تناظر میں REST کے مقابلے GraphQL کا اہم فائدہ — خودکار کوڈ جنریشن ہے۔ Kotlin کے لیے Apollo Client (Apollo GraphQL) بلڈ کے وقت .graphql فائلوں سے ٹائپ سیف کلاسز تیار کرتا ہے۔ اگر سرور اسکیما تبدیل کرے تو استفساروں کو اپ ڈیٹ کرنے تک پروجیکٹ بلڈ نہیں ہوگا۔ یہ runtime کی غلطیوں کو روکتا ہے جو REST میں عام ہیں، جہاں جواب کی ساخت میں تبدیلی ڈیولپمنٹ کے دوران نظر انداز ہو سکتی ہے۔
GraphQL کا ایکو سسٹم کئی اہم لائبریریوں اور ٹولز پر مشتمل ہے جو ڈیولپمنٹ اور آپریشن کو آسان بناتے ہیں۔ Apollo Client — سب سے مقبول کلائنٹ لائبریری ہے جو React، iOS، Android اور Kotlin Multiplatform کو سپورٹ کرتی ہے۔ Relay Facebook کی طرف سے — React ایپلیکیشنز کے لیے ایک متبادل ہے جس میں ڈیٹا مینجمنٹ اور کیشنگ کا منفرد طریقہ ہے۔ Apollo اور Relay کے درمیان انتخاب پلیٹ فارم اور کارکردگی کی ضروریات پر منحصر ہے۔
سرور سائڈ پر Apollo Server (Node.js)، Netflix DGS Framework (Kotlin/Java) اور graphql-ruby سرفہرست ہیں۔ اسکیما کی ڈیولپمنٹ اور استفساروں کی جانچ کے لیے GraphiQL استعمال ہوتا ہے — ایک انٹرایکٹو IDE جو براؤزر میں شامل ہے۔ Apollo Studio پروڈکشن ماحول کے لیے کارکردگی کے میٹرکس، استفساروں کی ٹریسنگ اور اسکیما مینجمنٹ فراہم کرتا ہے۔ علیحدہ طور پر GraphQL Code Generator کا ذکر ضروری ہے — ایک ٹول جو SDL اسکیما سے TypeScript، Kotlin، Swift اور Dart اقسام تیار کرتا ہے۔
موبائل ڈیولپمنٹ کے لیے خاص دلچسپی Apollo Kotlin (Apollo GraphQL) ہے — ایک لائبریری جو مکمل طور پر Kotlin میں لکھی گئی ہے اور coroutines، Flow اور Multiplatform کو سپورٹ کرتی ہے۔ یہ Kotlin Multiplatform پروجیکٹس میں Android اور iOS کے لیے مشترکہ GraphQL استفسار استعمال کرنے کی اجازت دیتی ہے۔ Apollo Kotlin کیش کو نارملائز کرتا ہے، فیلڈ کی سطح پر غلطیوں (partial errors) کو سپورٹ کرتا ہے اور .graphql فائلوں سے خود بخود ڈیٹا ماڈل تیار کرتا ہے۔ یہ GraphQL کو بڑے موبائل پروجیکٹس کے لیے ترجیحی انتخاب بناتا ہے جہاں ڈیولپمنٹ کی رفتار اور ٹائپ سیفٹی اہم ہیں۔
اکثر پوچھے گئے سوالات
GraphQL REST کی جگہ نہیں لیتا، بلکہ ایک متبادل طریقہ پیش کرتا ہے۔ REST سادہ CRUD-API، HTTP کیشنگ اور متوقع بوجھ والے عوامی API کے لیے بہتر ہے۔ GraphQL پیچیدہ انٹرفیسز کے لیے موزوں ہے جہاں متعدد متعلقہ ڈیٹا موجود ہو۔
منتقلی آہستہ آہستہ ممکن ہے: GraphQL موجودہ REST سروسز کے سامنے ایک پرت (gateway) کے طور پر کام کر سکتا ہے۔ بہت سی کمپنیاں پرانے API کو بند کیے بغیر REST کے ساتھ GraphQL شامل کرتی ہیں۔ مکمل تبدیلی کے لیے ریزالورز کو دوبارہ لکھنا ضروری ہے۔
N+1 اس وقت پیدا ہوتا ہے جب فہرست کے ہر آئٹم کے لیے ڈیٹابیس سے الگ استفسار کیا جاتا ہے۔ یہ DataLoader کی مدد سے حل کیا جاتا ہے — ایک لائبریری جو الگ الگ استفساروں کو ایک میں جمع کرتی ہے اور ایک HTTP استفسار کے دوران نتائج کو کیش کرتی ہے۔
GraphQL تصریح براہ راست فائل اپ لوڈ کی وضاحت نہیں کرتی۔ عملی طور پر استعمال کیا جاتا ہے: base64 انکوڈنگ (سادہ لیکن بڑی فائلوں کے لیے غیر موثر)، graphql-multipart-request-spec پروٹوکول کے مطابق multipart درخواستیں یا فائلوں کے لیے علیحدہ REST endpoint۔
GraphQL کی حفاظت کے لیے اضافی اقدامات درکار ہیں: درجہ بندی کی گہرائی کی حد، استفسار کی پیچیدگی کی حد، کارروائیوں کی سطح پر ریٹ لمیٹنگ۔ اسکیما کا عوامی introspection ڈیٹا کی ساخت کو ظاہر کر سکتا ہے — پروڈکشن میں اسے بند کرنے کی سفارش کی جاتی ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں