برنامج GraphQL التعليمي للمبتدئين: ما هو وميزاته ومثال عليه
⚡ ملخص ذكي
GraphQL هي لغة استعلام من جانب الخادم تُمكّن العميل من طلب البيانات التي يحتاجها بالضبط في استدعاء واحد. تشرح هذه الصفحة مكوناتها الرئيسية، والاستعلامات، والمتغيرات، والتعديلات، والاشتراكات، وكيف تختلف عن REST.
ما هو GraphQL؟
GraphQL هي تقنية من جانب الخادم على مستوى التطبيق، طورتها شركة فيسبوك (التي تُعرف الآن باسم ميتا) لتنفيذ الاستعلامات باستخدام البيانات الموجودة. تم إطلاقها للجمهور في عام 2015، وتخضع لقواعد GraphQL. Foundation منذ عام ٢٠١٨، يُحسّن GraphQL استدعاءات واجهات برمجة تطبيقات RESTful. فهو يوفر طريقةً تصريحيةً لجلب البيانات وتحديثها. كما يُسهّل GraphQL تحميل البيانات من الخادم إلى العميل، ويُمكّن المبرمجين من اختيار أنواع الطلبات التي يرغبون في إرسالها.
ما الذي تحتاج إلى تعلمه قبل تعلم GraphQL؟
يعتمد هذا البرنامج التعليمي GraphQL على اكسبريس و NodeJs. لذلك، يمكنك تعلم GraphQL بسهولة شديدة من خلال الفهم الأساسي لـ NodeJS.
لماذا نستخدم GraphQL؟
فيما يلي أسباب استخدام GraphQL:
- إنه يوفر استعلامًا قابلاً للقراءة من قبل الإنسان.
- في لغة GraphQL، من السهل جدًا التعامل مع العديد من قواعد البيانات.
- فهو مناسب للخدمات المصغرة والأنظمة المعقدة.
- يمكنك جلب البيانات من خلال استدعاء API واحد.
- يساعدك في تجميع الاستعلامات والتخزين المؤقت.
- لن تواجه مشاكل في جلب البيانات الزائد أو الناقص.
- طلبات الخياطة لاحتياجاتك.
- يساعدك على اكتشاف المخطط بالتنسيق المناسب.
- تحافظ GraphQL تلقائيًا على مزامنة الوثائق مع تغييرات واجهة برمجة التطبيقات.
- تطور واجهة برمجة التطبيقات (API) ممكن بدون إصدار.
- تُستخدم حقول GraphQL في استعلامات متعددة يمكن مشاركتها مع مستوى مكون أعلى لإعادة استخدامها.
- يمكنك اختيار الوظائف التي تريد كشفها وكيفية عملها.
- يمكن استخدامه لنموذج أولي للتطبيق السريعping.
تطبيقات GraphQL
فيما يلي التطبيقات المهمة لـ GraphQL:
- ويوفر التتابع وأطر العميل الأخرى
- يساعدك GraphQL على تحسين أداء تطبيق الهاتف المحمول.
- يمكن أن يقلل من مشكلة الجلب الزائد لتقليل الخدمة السحابية من جانب الخادم وتقليل استخدام الشبكة من جانب العميل.
- يمكن استخدامه عندما يتعين على تطبيق العميل تحديد الحقول المطلوبة بتنسيق استعلام طويل.
- يمكن استخدام GraphQL بشكل كامل عندما يتعين عليك إضافة وظائف إلى واجهة برمجة التطبيقات القديمة أو الموجودة لديك.
- يتم استخدامه عندما يتعين عليك تبسيط واجهة برمجة التطبيقات المعقدة.
- نمط واجهة المزيج والمزج، والذي يستخدم بشكل شائع في البرمجة الموجهة للكائنات.
- عندما يتعين عليك تجميع البيانات من أكثر من مكان في واجهة برمجة تطبيقات واحدة ملائمة.
- يمكنك استخدام GraphQL كـtracإضافة إلى واجهة برمجة التطبيقات الحالية لتحديد بنية الاستجابة بناءً على احتياجات المستخدم.
تعتمد كل هذه الفوائد على ثلاثة أجزاء متحركة تعمل معًا.
المكونات الرئيسية لـ GraphQL
الآن في هذا البرنامج التعليمي GraphQL، دعونا نتعلم المكونات الرئيسية لـ GraphQL:

كما هو موضح في الشكل أعلاه، هناك ثلاثة مكونات رئيسية لـ GraphQL: 1) الاستعلام، 2) المحلل، و3) المخطط.
سؤال
الاستعلام هو طلب API تم إجراؤه بواسطة تطبيق جهاز العميل. وهو يدعم الزيادات ويشير إلى المصفوفات. يتم استخدام الاستعلام لقراءة أو جلب القيم.
أجزاء الاستعلام:
فيما يلي الأجزاء المهمة من الاستعلام
- حقل:
يشير الحقل ببساطة إلى أننا نطلب من الخادم معلومات محددة. فيما يلي مثال على حقل في استعلام GraphQL.
query {
team {
id
name
}
}
يستجيب الخادم بوثيقة JSON التي يتطابق شكلها مع الاستعلام:
{
"data": {
"team": [
{
"id": 1,
"name": "Avengers"
}
]
}
}
في مثال GraphQL المذكور أعلاه، نطلب من الخادم الحقل المسمى "team" وحقوله الفرعية مثل "id" و"name". يُعيد خادم GraphQL البيانات المطلوبة تمامًا.
- الحجج
In RESTلا يمكننا تمرير سوى مجموعة واحدة من الوسائط كـ URL الشرائح ومعلمات الاستعلام. للحصول على ملف تعريف معين، سيبدو استدعاء REST النموذجي كما يلي:
GET /api/team?id=2 Content-Type: application/json { "id": 2, "name": "Justice League" }
حل
توفر أدوات التحليل التوجيهات لتحويل عملية GraphQL إلى بيانات. فهي تحل الاستعلام إلى بيانات من خلال تعريف وظائف أداة التحليل.
يعرض للخادم العملية بالإضافة إلى موقع جلب البيانات وفقًا لحقل معين. يقوم المحلل أيضًا بفصل مخطط قاعدة البيانات ومخطط واجهة برمجة التطبيقات. تساعد المعلومات المنفصلة على تعديل المحتوى الذي تم الحصول عليه من قاعدة البيانات.
مخطط
مخطط GraphQL هو مركز تنفيذ GraphQL. فهو يصف الوظائف المتاحة للعملاء المتصلين بها.
مميزات برنامج GraphQL
فيما يلي ميزات مهمة لـ GraphQL:
- فهو يوفر لغة استعلام تعريفية، وهي ليست ضرورية.
- فهو هرمي ويركز على المنتج.
- GraphQL هو نوع قوي. وهذا يعني أن الاستعلامات يتم تنفيذها في سياق نظام معين.
- يتم ترميز الاستعلامات في GraphQL في العميل، وليس في الخادم.
- يحتوي على جميع ميزات طبقة التطبيق لنموذج OSI.
عملاء GraphQL
عميل GraphQL هو رمز يقدم طلبات POST إلى خادم GraphQL ذي الصلة. يمكنك الاستعلام عن واجهة برمجة تطبيقات GraphQL مباشرة، ولكن النهج الجيد هو الاستفادة من مكتبة عميل مخصصة باستخدام Relay.
هذه Javaتم تطوير مكتبة البرامج النصية بواسطة Facebook لإنشاء تطبيقات React باستخدام GraphQL. يمكن أن يكون عملاء GraphQL عبارة عن نظام إدارة محتوى مثل Drupal أو تطبيق صفحة واحدة أو تطبيق جوال وما إلى ذلك.
خوادم GraphQL
خوادم GraphQL هي تطبيقات من جانب الخادم لمواصفات GraphQL. وهي تعرض بياناتك كواجهة برمجة تطبيقات GraphQL، والتي يمكن لبرنامج العميل الخاص بك الاستعلام عنها. قاعدة بيانات.
بوابات GraphQL
البوابة هي نمط من أنماط الخدمات المصغرة، حيث يمكنك إنشاء خدمة منفصلة للتعامل مع خدمات الواجهة الخلفية الأخرى. وهي توفر توثيقًا عمليًا، وتتيح طريقة سهلة لجمع البيانات من أكثر من مصدر واحد بطلب واحد.
ما هو المتغير في GraphQL؟
A المتغير في GraphQL يتم استخدامه لفصل القيم الديناميكية عن استعلام العميل وتمرير الاستعلام كقاموس فريد. يمكن أيضًا استخدام المتغير في GraphQL لإعادة استخدام الاستعلام أو الطفرات التي كتبها العميل باستخدام الوسائط الفردية. في graphQL، لا يمكنك تمرير الوسائط الديناميكية مباشرة في سلسلة الاستعلام. والسبب هو أن التعليمات البرمجية من جانب العميل تحتاج إلى معالجة سلسلة الاستعلام ديناميكيًا في الوقت الذي تقوم فيه بتشغيل البرنامج.
يُوفر GraphQL طريقة فعّالة لفصل القيم الديناميكية عن الاستعلام، حيث يُمررها كقاموس منفصل. تُعرف هذه القيم بالمتغيرات. عند التعامل مع المتغيرات، يجب القيام بالخطوات الثلاث التالية:
- استبدل القيمة الثابتة في الاستعلام باسم متغير.
- قم بتعريف اسم المتغير كأحد المتغيرات المقبولة بواسطة استعلام GraphQL.
- قم بتمرير القيمة في قاموس المتغيرات الخاص بالنقل.
إليكم الشكل النهائي. أولاً، الاستعلام الذي يُعرّف المتغير:
query HeroNameAndFriends($episode: Episode) { hero(episode: $episode) { name friends { name } } }
ثم يتم إرسال قاموس منفصل لقيم المتغيرات معه:
{
"episode": "JEDI"
}
والرد الذي أعاده الخادم:
{
"data": {
"hero": {
"name": "R2-D2",
"friends": [
{ "name": "Luke Skywalker" },
{ "name": "Han Solo" },
{ "name": "Leia Organa" }
]
}
}
}
كما ترون في مثال GraphQL أعلاه، قمنا ببساطة بتمرير متغير مختلف بخلاف الحاجة إلى إنشاء استعلام جديد.
ما هي الطفرة؟
الطفرة هي طريقة لتغيير مجموعة البيانات في GraphQL. يقوم بتعديل البيانات في مخزن البيانات وإرجاع قيمة. تساعدك الطفرات على إدراج البيانات أو تحديثها أو حذفها. بشكل عام، يتم تعريف الطفرات على أنها جزء من المخطط.
نقاط يجب مراعاتها أثناء تصميم طفرات GraphQL
فيما يلي النقاط المهمة أثناء تصميم GraphQL:
- التسمية: أولا وقبل كل شيء، عليك تسمية الفعل الطفرات الخاص بك. ثم الاسم أو "الكائن" إن أمكن. استخدم CamelCase أثناء تسمية الطفرات.
- النوعية: عليك أن تجعل طفرة محددة قدر الإمكان. يجب أن تمثل الطفرات الإجراءات الدلالية التي اتخذها المستخدم.
- كائن الإدخال: استخدم نوع كائن إدخال واحدًا وفريدًا ومطلوبًا كوسيطة لتنفيذ الطفرة على العميل.
- نوع الحمولة الفريدة: يجب عليك استخدام نوع حمولة فريد لكل طفرة. يمكنك أيضًا إضافة مخرجات الطفرة كحقل إلى نوع الحمولة النافعة هذا.
- التعشيش: استخدم التعشيش مع طفرتك أينما كان ذلك منطقيًا. يسمح لك بالاستفادة الكاملة من GraphQL API.
تُقرأ الاستعلامات وتُكتب التغييرات. أما النوع الثالث من العمليات فيشمل البيانات التي تتغير أثناء اتصال العميل.
ما هو الاشتراك في GraphQL؟
A اشتراك يُعدّ الاشتراك النوع الثالث من العمليات في مواصفات GraphQL، إلى جانب الاستعلام والتعديل. يُنجز كل من الاستعلام والتعديل في طلب واستجابة واحدة. أما الاشتراك، فيُبقي اتصالاً مفتوحاً طويل الأمد، عادةً عبر WebSockets، بحيث يُرسل الخادم نتيجة جديدة إلى العميل في كل مرة يحدث فيها حدث مُحدد.
يشابه بناء الجملة الاستعلام، مع استبدال كلمة "الاشتراك" بالاستعلام:
subscription OnCommentAdded($postId: ID!) { commentAdded(postId: $postId) { id content author { name } } }
ثلاث نقاط تميز الاشتراكات في الممارسة العملية.
- يتم تحديد الأحداث بناءً على الأحداث وليس عن طريق الاستطلاع: يسجل العميل اهتمامه مرة واحدة. ولا يتم إرسال أي شيء آخر حتى ينشر الخادم حدثًا مطابقًا، وهو أمر أرخص بكثير من الاستقصاء المتكرر.
- حقل جذر واحد لكل اشتراك: لا تسمح المواصفات إلا بحقل واحد من المستوى الأعلى، على عكس الاستعلام الذي يمكنه طلب عدة حقول في وقت واحد.
- الأفضل أن تبقى صغيرة: قم بتحديث الحقول التي تحتاج الواجهة إلى تحديثها فقط. ومن الاستخدامات الشائعة: الدردشة المباشرة، والإشعارات، ومؤشرات الأسعار.
الفرق بين GraphQL و REST
الجدول التالي يوضح الفرق المهم بين GraphQL وREST.
| GraphQL | REST |
|---|---|
| ويتبع هندسة موجهة نحو العميل. | ويتبع هندسة موجهة نحو الخادم. |
| يمكن تنظيم GraphQL من حيث المخطط. | يمكن تنظيم REST من حيث نقاط النهاية. |
| GraphQL هو مجتمع متنامٍ. | REST هو مجتمع كبير جدًا. |
| سرعة التطوير في GraphQL سريعة. | سرعة التطوير في REST بطيئة. |
| منحنى التعلم في GraphQL حاد. | منحنى التعلم في REST معتدل. |
| يتم فصل الهوية عن كيفية جلبها. | نقطة النهاية التي تتصل بها في REST هي هوية كائن معين. |
| في لغة GraphQL، يحدد العميل الحقول التي يتلقاها. | يتم تحديد شكل وحجم المورد بواسطة الخادم في REST. |
| يوفر GraphQL اتساقًا عاليًا عبر جميع الأنظمة الأساسية. | من الصعب تحقيق الاتساق عبر جميع المنصات. |
عيوب GraphQL
فيما يلي عيوب GraphQL:
- النظام البيئي الشاب
- نقص الموارد في الجزء الخلفي.
- نمط التصميم مفقود لتطبيق معقد.
- مشكلات الأداء مع الاستعلامات المعقدة.
- مبالغة في التطبيقات الصغيرة
- لا يعتمد GraphQL على أساليب التخزين المؤقت لـ HTTP التي تتيح تخزين محتوى الطلب.
- GraphQL لا يفهم الملفات. وبالتالي، لا يتم تضمين ميزة تحميل الملفات فيه.
- مع GraphQL، كن مستعدًا للحصول على الكثير من التعليم قبل التطوير مثل تعلم لغة تعريف المخطط.
التطبيقات والأدوات مفتوحة المصدر المستخدمة بواسطة GraphQL
التطبيقات والأدوات المهمة مفتوحة المصدر التي يستخدمها GraphQL هي كما يلي:
- غاتسبيGatsby هو تطبيق مدعوم بتقنية GraphQL، ويستطيع استخدام البيانات المستمدة من أكثر من مصدر واحد لواجهة برمجة تطبيقات GraphQL. يمكنك استخدامه لتطوير تطبيقات React ثابتة وتطبيقات React موجهة للعميل.
- GraphiQL: هو بيئة تطوير متكاملة تتكامل مع المتصفح وتتفاعل أيضًا مع واجهة برمجة تطبيقات GraphQL. تتضمن بعض وظائف GraphiQL عمليات التعديل، والاستعلام عن البيانات، والإكمال التلقائي للاستعلامات.
- ملعب GraphQL: هو بيئة تطوير متكاملة (IDE) قوية مزودة بمحرر مدمج للتعامل مع عمليات التعديل، والتحقق من الصحة، واستعلامات GraphQL، والاشتراكات، وغيرها. يمكن للمطور استخدام هذه البيئة لتصور بنية المخطط. تم إيقاف المشروع الآن، وتم دمج ميزاته في GraphiQL.
- بريزما: بريزما هي قاعدة بياناتtracطبقة tion، التي يتم تقديمها الآن كـ ORM آمن من حيث النوع، والتي تقترن على نطاق واسع بخادم GraphQL لعرض عمليات CRUD (إنشاء، قراءة، تحديث، حذف).
- قطعة: إنها أداة مفتوحة المصدر ونظام أساسي يحول التعليمات البرمجية القابلة لإعادة الاستخدام إلى مكونات. يمكن للمطورين استخدامها لمشاركة وتطوير المشاريع المختلفة.

