مفاهيم GraphQL :
خلال تصفحك للمواقع والمقالات التقنية قد يكون مر عليك مصطلح GraphQL , في هذا المقال ساقوم بتوضيح بعض المفاهيم الاساسية المتعلقة بهذه التقنية ومقارنتها ب REST لمزيد من الايضاح
ولكن اولا لنوضح كيف يتم تبادل البيانات بين التطبيقات وبين الخادم ؟
كل تطبيق او موقع يقوم بمهمة محددة لا بد له من مصدر لجلب البيانات اللازمة لعمل التطبيق وايضا للقيام بعمليات المعالجة والحفظ , هذا المصدر يتمثل في الواجهة البرمجية الخلفية التي يتم تبادل البيانات بينها وبين المستخدمين باستخدام تقنيات عديدة اكثرها شيوعا هي تقنية REST.
ما الذي تقوم به REST ؟
هي خدمة برمجية تعمل في الخادم اهم ميزاتها هي سهولة الاستخدام . تتلخص مهمتها الاساسسية في توفير الموارد resources واتاحة الوصول لها عن طريق روابط http اعتياديه بحيث يتيح كل url الوصول لموارد معينه على الخادم, كما يمكن انشاء وتعديل وحذف الموارد بحسب الصلاحيات المتاحه للمستخدمين.
لنفترض ان لدينا تطبيق متجر يتيح للمستخدمين استعراض منتج ما والتفاصيل والتقييمات واراء المستهلكين. من ناحية برمجية يمكن للواجهة الخلفية توفيرمورد خاص يتيح كل البيانات المطلوبة.
الطلب request:
GET /api/v1/products/
الرد response:
{
products: [
{category: "Sporting Goods", price: "$49.99", stocked: true, name: "Football"},
{category: "Sporting Goods", price: "$9.99", stocked: true, name: "Baseball"},
{category: "Sporting Goods", price: "$29.99", stocked: false, name: "Basketball"},
{category: "Electronics", price: "$99.99", stocked: true, name: "iPod Touch"},
{category: "Electronics", price: "$399.99", stocked: false, name: "iPhone 5"},
{category: "Electronics", price: "$199.99", stocked: true, name: "Nexus 7"}
]
}
هنا الخادم قام بارجاع البيانات المطلوبة لعمل التطبيق ويمكن عمل تمثيل للبيانات على الواجهة الامامية وعرضها للمستخدم.
ولكن هل تلاحظ اي شئ مختلف في البيانات المسترجعة ؟
من المفترض ان واجهة المستخدم ونماذج البيانات تتجه إلى الالتزام بنفس بنية المعلومات information architecture
ولكن في كثير من الاحيان قد تختلف الواجهة الامامية الخاصة بالعرض عن النموذج الفعلي للبيانات بسبب ان كلا النموذجين بناها فريق مختلف عن الاخر.
في المثال السابق قمنا بطلب قائمة بالمنتجات فقط, فجاء الرد محتويا على الكثير من البيانات التي قد نستخدمها وفي كثير من الاحيان يتم تجاهلها تماما
هذا قد يسبب الكثير من المشاكل منها :
- البطئ في عمل التطبيق بسبب حجم البيانات المسترجعه عبر الشبكة ولا يتم استخدامها.
- الحاجة للقيام بالكثير من عمليات التصفية والتشكيل للبيانات في الواجهة الامامية مما يسبب في زيادة حجم التطبيق.
- زيادة العبئ على الخادم وعلى قاعدة البيانات
مقارنة توضح الفروق بين REST و GraphQL :
هذه الاسباب وغيرها تعد الدوافع وراء ظهور تقنيات جديدة خصوصا مع تزايد استخدام الهواتف الذكية ظهرت الحاجة الى تحميل البيانات بشكل اكثر فعالية.
ما هي GraphQL ؟
بحسب الموقع الرسمي هي لغة استعلام لل APIs , و مكتبة تعمل في الوقت التشغيلي للخادم لتنفيذ الاستعلامات.
او لنقل هي طريقة او مقياس يحدد كيفية طلب البيانات يتم ارسال هذه الصيغه من المستخدم عل شكل استعلام يتم التعامل معه في السرفر واسترجاع البيانات المطلوبة بدقة. فبدلا من اعتماد العديد من نقاط النهاية “endpoints” غير الذكية، اعتمدت على نقطة نهاية واحدة ذكية وقادرة على تلقي الإستعلامات المعقدة وتنفيذها ومن ثم صياغتها بالشكل الذي يرغب به العميل.
بعض من مميزاتها:
- احصل على البيانت التي تريدها حيث يمكنك اختصار طلبك عن طريق اختيار الحقول التي تريد الاستعلام عنها فقط.
- الحصول على عدة موارد في طلب واحد, حيث تدمج عدة أنظمة وراء واجهة برمجة التطبيقات API الخاصة بها، أي توحدهم وتخفي تعقيداتهم.
- يمكن الوصول الى كل امكانيات البيانات عن طريق endpoint واحدة.
- تتميز بعملية تدقيق ومراجعة على الاستعلامات والتأكد من موافقتها للمخطط مما يقلل من الاخطاء الغير متوقعة.
ما هي اجزاء GraphQL ؟
تتكون GraphQL API من ثلاث أجزاء رئيسية:
-
مخطط البيانات (schema):
مخطط محدد مسبقا وهو نموذج للبيانات التي يمكن طلبها من الخادم. يحدد المخطط أنواع الاستعلامات المسموح بها وأنواع البيانات التي يمكن جلبها والعلاقات بين هذه الأنواع. -
الاستعلامات (queries):
صيغة طلب للبيانات تحدد الحقول اللازمة, ونلاحظ ان الاستعلام لدية نفس تركيبة مخطط البيانات. -
محلل الاستعلامات (resolver):
وهو يقوم بارشاد خادم GraphQL إلى المكان والكيفية التي يجلب بها البيانات الموافقة لاستعلام معين.
اسهل طريقة لفهم اي شئ جديد هي استخدامه, في هذا الموقع يمكنك تجربة الاستعلامات على خادم حقيقي بشكل مباشر , فقط اقرأ الوثائق وابدأ في الاكتشاف !
أخيرا:
اتمنى ان اكون وفقت في توضيح وتبسيط فكرة هذه التقنية, المقال عبارة عن تجميع من عدة مصادر,عملي هو فقط التنسيق والترتيب , اي خطأ او تعديل شاركني به في التعليقات.تحياتي للجميع
المصادر: