GraphQL هو كل من لغة الاستعلام للواجهات البرمجية (APIs) وبيئة تشغيل لتنفيذ هذه الاستعلامات باستخدام البيانات الحالية الخاصة بك. يقدم وصفًا شاملاً وواضحًا للبيانات المتاحة في واجهة برمجة التطبيقات الخاصة بك، يتيح للعملاء طلب ما يحتاجونه بدقة دون زيادة، يسهل تطور الواجهات البرمجية بمرور الوقت، ويدعم أدوات مطورين قوية.
تحكم الوصول في GraphQL وتحسين استعلامات GraphQL
تحكم الوصول
التفويض هو مجموعة من القواعد أو منطق الأعمال الذي يحدد ما إذا كان المستخدم، الجلسة، أو السياق يمتلك قائمة تحكم الوصول (ACL) لأداء بعض الإجراءات أو عرض بيانات محددة.
ينبغي فرض هذا السلوك في طبقة منطق الأعمال. بينما قد يكون من المغري وضع منطق التفويض مباشرة داخل طبقة GraphQL، فإنه عادة ما يكون من الأنسب التعامل معه في مكان آخر.
تحسين الاستعلامات
تحسين استعلامات GraphQL يتضمن تقنيات مثل تقليل جلب البيانات غير الضرورية ومعالجتها لتحسين أوقات الاستجابة وتقليل حمل الخادم. هذا يؤدي إلى تطبيق أكثر كفاءة، يقدم تجربة مستخدم أفضل، ويزيد من التفاعل والاحتفاظ بالمستخدمين، ويزيد من قابلية масшب الخادم.
طرق تحسين استعلام GraphQL
- N+1 (التحميل المجمع)
- الجلب الزائد والجلب الناقص
- التخزين المؤقت لتقليل التأخير
- الترقيم
تعزيز تحكم الوصول في GraphQL وتحسين استعلامات GraphQL
محرك التفويض يتحقق من أذونات العقد والحقول باستخدام ACL (قائمة التحكم بالوصول) ويحسن استعلامات GraphQL بناءً على الأذونات. بالإضافة إلى ذلك، يقوم محلل N+1 بتحسين الأداء من خلال دمج الاستعلامات. هذا النهج يعالج مشكلة N+1.
الممثلون
- استعلام GraphQL: طلب يُرسل من قبل العميل إلى خادم GraphQL لجلب بيانات محددة.
- محرك GraphQL: يشير إلى خدمة تتيح لك تنفيذ استعلامات GraphQL.
- محرك التفويض: يتحقق من أذونات العقد والحقول باستخدام ACL ويحسن استعلام GraphQL بناءً على أذونات الحقول.
- محلل N+1: يقلل من العبء والlatency المرتبطين بعدة استعلامات قاعدة بيانات، مما يحسن الأداء والكفاءة.
تعزيز التحكم بالوصول
التنفيذ الحالي
لنفترض أن تطبيقاً يحتوي على منتجات، وموردين، وعناوين. الوصول إلى بيانات المورد والعنوان يتطلب مصادقة المستخدم، والتي يمكن التعامل معها بسهولة في المحللات.
على الرغم من ذلك، بيانات البائع محدودة للمستخدمين الإداريين، وبعض حقول البائع متاحة فقط لأدوار محددة. من ناحية أخرى، المنتجات عامة ويمكن عرضها بواسطة دور مالك المنتج. تشغيل الاستعلام المذكور (الشكل 3) سيعيد بيانات المنتج بالإضافة إلى بيانات البائع والعنوان المرتبطة، مما يؤدي إلى مشكلة أمنية.
تنفيذ محسن
يتم التحقق من العقد وحقول الاستعلام وفقًا لإذن المستخدم، ويتم إنشاء استعلام GraphQL محسن.
الشكل 4 هو مثال على كيفية تنفيذ المصادقة المخصصة في GraphQL API باستخدام Node.js. في هذا الكود، يتم استخراج الدور من رأس المصادقة ويستخدم بعد ذلك، بالإضافة إلى الاستعلام، للتحقق من التفويض.
في هذا المثال، نحن نستخدم دور وإذن المستخدم من الجلسة أو الطلب الذي يتحكم في الوصول إلى الاستعلامات والتعديلات المحددة في مخطط GraphQL. لقد عرفنا قواعد الدور والإذن في مخطط GraphQL لجميع المستخدمين.
هذه الطريقة تتحقق بشكل متكرر من الدور والإذن على جميع العقد والحقول. إذا لم يكن للعقدة أو الحقل إذن، فإنه يقوم بإحدى الإجراءات التالية بناءً على الإعدادات:
- إزالة العقدة أو الحقل.
- إرجاع الحقل أو العقدة مع رسالة خطأ.
- إلقاء استثناء.
بمجرد التحقق من استعلام GraphQL مقابل المخطط، ستقوم هذه الطريقة بإرجاع استعلام GraphQL المحسن.
تعزيز تحسين استعلام ORM باستخدام N+1
التنفيذ الحالي
إنه مسألة تقنية تؤثر على أداء الاستعلام. يمكن أن يحدث في التطبيقات التي تستخدم إطار عمل التعيين الكائني-العلاقي (ORM) للوصول إلى قاعدة بيانات.
يظهر عادة عندما يحتاج التطبيق إلى تحميل مجموعة من الكيانات ذات الصلة من قاعدة البيانات.
لنفترض أن هناك منتجين؛ يحتاج إلى إجراء استعلام واحد لاسترداد المنتجات واثنين من الاستعلامات الإضافية لجلب الموردين لكل منتج على حدة.
استعلام واحد يسترد قائمة المنتجات، واستعلام منفصل يجلب الموردين لكل منتج. عدد استعلامات الموردين يساوي عدد المنتجات.
التنفيذ المحسن
بمجرد أن تصل الطلب إلى محلل N+1، يقوم محلل N+1 بتحسين الاستعلامات لتقليل عدد طلبات قاعدة البيانات بتقليلها إلى استعلام واحد للبيانات الرئيسية واستعلام إضافي للبيانات ذات الصلة، مما يقلل بفعالية من مشكلة N+1.
- استعلام البيانات الرئيسية: استعلام واحد يسترد المجموعة الرئيسية من البيانات المطلوبة للتطبيق.
- استعلام البيانات ذات الصلة: استعلام إضافي يجلب أي بيانات ذات صلة ضرورية لإكمال المجموعة البيانية.
بعد إكمال جميع محللي الاستعلامات، يعيد الخادم البيانات المحسنة إلى العميل بتنسيق JSON.
الخاتمة
لقد أوضحنا أن تنفيذ آليات المصادقة المفصلة، إلى جانب تدابير الأمان المحسنة، أمر حاسم لضمان أمان واجهة برمجة التطبيقات GraphQL. هذا يشمل كل من الأمان على مستوى العقدة والأمان على مستوى الحقل.
كما يصف هذا المقال، يحدث مشكلة N+1 عندما يقود استعلام غير مُحسن إلى استدعاءات زائدة للقاعدة данных في GraphQL. لقد قدمنا حلاً للتغلب على مشكلة N+1. إنه يقلل من استخدام موارد خادم القاعدة данных، مما يؤدي إلى توفير في التكاليف وتحسين قابلية التوسع. بالإضافة إلى ذلك، من خلال تحسين أداء الاستعلام، يتم تحسين تجربة المستخدم بتقليل أوقات استجابة الاستعلام.
Source:
https://dzone.com/articles/optimizing-fine-grained-graphql-access-control-and-queries