GraphQL
GraphQL هي لغة استعلام ومعالجة بيانات تسمح بتحديد البيانات المراد استرجاعها (" استرجاع البيانات التصريحي ") أو تعديلها. يستطيع خادم GraphQL معالجة استعلام العميل باستخدام بيانات من مصادر منفصلة وعرض النتائج في رسم بياني موحد . [ 2 ] لا ترتبط هذه اللغة بأي قاعدة بيانات أو محرك تخزين محدد. تتوفر العديد من محركات التشغيل مفتوحة المصدر لـ GraphQL.
تاريخ
بدأ فيسبوك تطوير GraphQL في عام 2012، وأصدر مسودة مواصفات وتطبيقًا مرجعيًا كمصدر مفتوح في عام 2015. [ 3 ] وفي عام 2018، نُقل GraphQL إلى مؤسسة GraphQL التي تم إنشاؤها حديثًا، والتي تستضيفها مؤسسة لينكس غير الربحية . [ 4 ] [ 5 ]
في 9 فبراير 2018، أصبحت لغة تعريف مخطط GraphQL جزءًا من المواصفات. [ 6 ]
اعتمدت العديد من واجهات برمجة التطبيقات العامة الشائعة لغة GraphQL كطريقة افتراضية للوصول إليها. وتشمل هذه الواجهات واجهات برمجة التطبيقات العامة لفيسبوك، وجيت هاب ، وييلب ، وشوبيفاي ، وواجهة برمجة تطبيقات جوجل دايركشنز، وغيرها الكثير. [ 7 ] [ 8 ]
يُعقد مؤتمر GraphQL السنوي [ 9 ] لعرض أحدث التطورات في البروتوكول والمنظمات التي تستخدم GraphQL بنجاح. تستضيف مؤسسة GraphQL هذا الحدث ، وقد سبق أن نظمته جهات مثل Prisma و Hygraph و Commercetools .
تصميم
يدعم GraphQL قراءة البيانات وكتابتها (تعديلها) والاشتراك في التغييرات التي تطرأ عليها (تحديثات فورية - تُنفذ عادةً باستخدام WebSockets ). [ 10 ] تُنشأ خدمة GraphQL بتعريف أنواع البيانات مع الحقول، ثم توفير دوال لحل البيانات لكل حقل. تُشكل الأنواع والحقول ما يُعرف بتعريف المخطط . تُسمى الدوال التي تسترجع البيانات وتُطابقها بالمُحلِّلات . [ 11 ]
بعد التحقق من صحة البيانات وفقًا للمخطط، يقوم الخادم بتنفيذ استعلام GraphQL. ويعيد الخادم نتيجة تعكس شكل الاستعلام الأصلي، وعادةً ما تكون بتنسيق JSON . [ 12 ]
نظام الكتابة

باستخدام GraphQL، يتم نمذجة مجال الأعمال كرسم بياني من خلال تحديد مخطط؛ ضمن هذا المخطط، يتم تعريف أنواع مختلفة من العقد وعلاقاتها. [ 13 ]
يصف نظام أنواع GraphQL البيانات التي يمكن الاستعلام عنها من واجهة برمجة التطبيقات (API). وتُعرف مجموعة هذه الإمكانيات باسم مخطط الخدمة ، ويمكن للعملاء استخدام هذا المخطط لإرسال استعلامات إلى واجهة برمجة التطبيقات (API) تُعيد نتائج متوقعة. [ 14 ]
يحتوي النوع الأساسي لمخطط GraphQL، Queryافتراضيًا، على جميع الحقول التي يمكن الاستعلام عنها. وتُحدد الأنواع الأخرى الكائنات والحقول التي يمكن لخادم GraphQL إرجاعها. وهناك عدة أنواع أساسية، تُسمى أنواعًا قياسية، لتمثيل أشياء مثل السلاسل النصية والأرقام والمعرفات.
تُعرَّف الحقول افتراضيًا على أنها تقبل القيم الفارغة ، ويمكن استخدام علامة تعجب في نهاية الحقل لجعله غير قابل للقيم الفارغة (إلزامي). ويمكن تعريف الحقل كقائمة عن طريق وضع نوع الحقل بين قوسين مربعين (على سبيل المثال، authors: [String]). [ 15 ]
نوع الاستعلام { المستخدم الحالي : المستخدم }نوع المستخدم { المعرف : ID ! الاسم : سلسلة ! }استفسارات
يحدد استعلام GraphQL الشكل الدقيق للبيانات التي يحتاجها العميل.
استعلام عن المستخدم الحالي { المستخدم الحالي { الاسم العمر } }بمجرد التحقق من صحة البيانات وتنفيذها بواسطة خادم GraphQL، يتم إرجاعها بنفس الشكل.
{ "currentUser" : { "name" : "John Doe" , "age" : 23 } }الطفرات
تتيح عملية التعديل في GraphQL إنشاء البيانات أو تحديثها أو حذفها. تحتوي عمليات التعديل عادةً على متغيرات ، تسمح بتمرير البيانات من العميل إلى الخادم. كما تحدد عملية التعديل شكل البيانات التي ستُعاد إلى العميل بعد اكتمال العملية.
mutation CreateUser ( $name : String !, $age : Int !) { createUser ( userName : $name , age : $age ) { name age } }يتم تمرير المتغيرات ككائن يحتوي على حقول تطابق أسماء المتغيرات في عملية التغيير.
{ "name" : "هان سولو" , "age" : 42 }بمجرد اكتمال العملية، سيعيد خادم GraphQL البيانات المطابقة للشكل المحدد بواسطة التغيير.
{ "data" : { "createUser" : { "name" : "Han Solo" , "age" : 42 } } }الاشتراكات
يدعم GraphQL أيضًا التحديثات المباشرة المرسلة من الخادم إلى العميل في عملية تُسمى الاشتراك. وكما ذكرنا سابقًا، يُحدد العميل شكل البيانات التي يحتاجها عند إجراء أي تحديث.
الاشتراك { شخص جديد { الاسم العمر } }عند إجراء تغيير من خلال خادم GraphQL يقوم بتحديث الحقل المرتبط، يتم إرسال البيانات إلى جميع العملاء المشتركين بالتنسيق المحدد من خلال الاشتراك.
{ "newPerson" : { "name" : "Jane" , "age" : 23 } }التحكم في الإصدارات
على الرغم من عدم وجود ما يمنع ترقيم إصدارات خدمة GraphQL تمامًا مثل أي واجهة برمجة تطبيقات أخرى، إلا أن GraphQL تتخذ موقفًا قويًا بشأن تجنب ترقيم الإصدارات من خلال توفير الأدوات اللازمة للتطوير المستمر لمخطط GraphQL. [ 16 ]
يُستخدم التوجيه @deprecatedالمدمج ضمن لغة تعريف نظام الأنواع للإشارة إلى الأجزاء المهملة من مخطط خدمة GraphQL، مثل الحقول المهملة في نوع ما أو قيم التعداد المهملة. [ 15 ]
لا تُعيد GraphQL إلا البيانات المطلوبة صراحةً، لذا يُمكن إضافة إمكانيات جديدة عبر أنواع جديدة أو حقول جديدة في الأنواع الموجودة دون إحداث تغييرات جذرية. وقد أدّى ذلك إلى ممارسة شائعة تتمثل في تجنّب التغييرات الجذرية وتقديم واجهة برمجة تطبيقات غير مرتبطة بإصدار. [ 16 ]
مقارنة بلغات الاستعلام الأخرى
لا توفر GraphQL لغة استعلام رسومية متكاملة مثل SPARQL ، ولا حتى لهجات SQL التي تدعم الإغلاق المتعدي . على سبيل المثال، لا يمكن لواجهة GraphQL التي تُبلغ عن آباء فرد ما أن تُرجع، في استعلام واحد، مجموعة جميع أسلافه.
الاختبار
يمكن اختبار واجهات برمجة تطبيقات GraphQL يدويًا أو باستخدام أدوات مؤتمتة تُصدر طلبات GraphQL وتتحقق من صحة النتائج. كما يُمكن إنشاء اختبارات تلقائية. [ 17 ] ويمكن إنشاء طلبات جديدة من خلال تقنيات البحث بفضل المخطط المكتوب وقدرات الاستبطان. [ 18 ]
تتضمن بعض أدوات البرمجيات المستخدمة لاختبار تطبيقات GraphQL ما يلي: Postman و Beeceptor و GraphiQL و Apollo Studio و GraphQL Hive و GraphQL Editor و Step CI. [ 19 ]
انظر أيضاً
مراجع
- ↑ "ملاحظات إصدار GraphQL سبتمبر 2025" . GitHub .
- ↑ "تعلم أساسيات GraphQL مع برنامج تعليمي شامل" . www.howtographql.com . تم الاطلاع عليه بتاريخ 25 أبريل 2023 .
- ↑ "GraphQL: لغة استعلام البيانات" . 14 سبتمبر 2015.
- ↑ "جراف كيو إل من فيسبوك يحصل على مؤسسة مفتوحة المصدر خاصة به" . تيك كرانش . تم الاطلاع عليه بتاريخ 7 نوفمبر 2018 .
- ↑ «مؤسسة لينكس تعلن عن نيتها تأسيس مؤسسة جديدة لدعم GraphQL» . مؤسسة لينكس . 6 نوفمبر 2018. تاريخ الاطلاع: 17 مارس 2023 .
- ↑ "GraphQL SDL مضمن في مستودع GitHub" . GitHub .
- ↑ "GraphQL Landscape" . landscape.graphql.org . 5 يوليو 2025.
- ↑ graphql-kit/graphql-apis ، graphql-kit، 31 مايو 2025 ، تم الاطلاع عليه في 5 يونيو 2025
- ↑ "مؤتمر GraphQL لعام 2025" . مؤسسة GraphQL . تم الاطلاع عليه بتاريخ 29 سبتمبر 2025 .
- ↑ "GraphQL" . facebook.github.io . فيسبوك . مؤرشف من الأصل بتاريخ 18 يوليو 2018. تم الاطلاع عليه بتاريخ 4 يوليو 2018 .
- ↑ "مقدمة إلى GraphQL" . graphql.org . تم الاطلاع عليه بتاريخ 25 أبريل 2023 .
- ↑ "التنفيذ" . graphql.org . تم الاطلاع عليه بتاريخ 25 أبريل 2023 .
- ↑ "التفكير بالرسوم البيانية | GraphQL" . graphql.org . تم الاطلاع عليه في 3 يونيو 2025 .
- ↑ "المخططات والأنواع | GraphQL" . graphql.org . تم الاطلاع عليه في 3 يونيو 2025 .
- 1 2 "GraphQL" . spec.graphql.org . تم الاطلاع عليه بتاريخ 25 أبريل 2023 .
- 1 2 "تصميم المخطط | GraphQL" . graphql.org . تم الاطلاع عليه في 3 يونيو 2025 .
- ↑ فارغاس، د.م.؛ بلانكو، أ.ف.؛ فيداوري، أ.س.؛ ألكوسير، ج.ب.س.؛ توريس، م.م.؛ بيرجل، أ.؛ دوكاس، س. (2018). "اختبار الانحراف: تقنية لتوليد حالات الاختبار لواجهات برمجة تطبيقات GraphQL" (ملف PDF) . ورشة العمل الدولية الحادية عشرة حول تقنيات Smalltalk (IWST) : 1-9 .
- ↑ كارلسون، ستيفان؛ كوزيفيتش، عدنان؛ سوندمارك، دانيال (مايو 2021). "الاختبار التلقائي القائم على الخصائص لواجهات برمجة تطبيقات GraphQL". المؤتمر الدولي IEEE/ACM لعام 2021 حول أتمتة اختبار البرمجيات (AST) . مدريد، إسبانيا: IEEE. الصفحات 1-10 . arXiv : 2012.07380 . doi : 10.1109/AST52587.2021.00009 . ISBN 978-1-6654-3567-3. S2CID 229156477 .
- ↑
- مستودع GraphQL IDE الموحد ، GraphQL، 25 أبريل 2023 ، تم الاطلاع عليه في 25 أبريل 2023
- "مستكشف أبولو ستوديو" . أبولو دوكس . تم الاطلاع عليه بتاريخ 25 أبريل 2023 .
- "وحدة تحكم واجهة برمجة تطبيقات محرر GraphQL" . وثائق محرر GraphQL . تم الاطلاع عليها بتاريخ 2 سبتمبر 2023 .
- "اختبار واجهات برمجة تطبيقات GraphQL" . وثائق Step CI . تم الاطلاع عليه بتاريخ 8 يناير 2023 .
- "مختبر هايف" . وثائق هايف . تم الاطلاع عليه بتاريخ 26 نوفمبر 2024 .
روابط خارجية
- لغات الاستعلام
- لغات نمذجة البيانات
- هياكل بيانات الرسم البياني
- هندسة البرمجيات
