
GraphQL هو معيار للإعلان عن هياكل البيانات وطرق الحصول على البيانات ، والتي تعمل كطبقة إضافية بين العميل والخادم. إذا كانت هذه هي المرة الأولى التي تسمع فيها عن GraphQL ، فإليك بعض الموارد الجيدة: واحد واثنان .
في هذه المقالة سأخبرك كيف يمكنك استخدام GraphQL في مشاريعك باستخدام تقنيات InterSystems.
توجد حاليًا عدة طرق لإنشاء تطبيقات خادم العميل على أنظمة InterSystems الأساسية:
ولكن لماذا GraphQL جيد جدًا؟ ما الميزات الجديدة التي ستقدمها بالمقارنة ، على سبيل المثال ، مع REST؟
يحتوي GraphQL على عدة أنواع من الاستعلامات:
- الاستعلام هي طلبات إلى الخادم لتلقي البيانات ، تمامًا كما هو الحال في REST يوصى باستخدام طلبات GET لتلقي البيانات.
- الطفرة - هذا النوع مسؤول عن تغيير البيانات على الخادم. في REST ، لتغيير طلبات POST للبيانات (PUT ، DELETE).
يمكن أن تؤدي الطفرات ، مثل الاستعلام ، إلى إرجاع البيانات - وهذا مناسب إذا كنت تريد طلب معلومات محدثة من الخادم مباشرة بعد الطفرة. - الاشتراكات هي نفس نوع الاستعلام الذي سينتج البيانات. والفرق الوحيد هو أن الاستعلام يتم تشغيله عن طريق عرض الصفحة على العميل ، ويتم تشغيل الاشتراكات عن طريق الطفرات .
الميزات الرئيسية في GraphQL وما يستحق استخدامه
يقرر العميل ما يريد الحصول عليه.
واحدة من الميزات الرئيسية في GraphQL هي أن هيكل وكمية البيانات يحددها تطبيق العميل. يشير العميل بدقة إلى البيانات التي يريد تلقيها ، باستخدام هيكل إعلاني يشبه الرسم البياني ، وهو يشبه إلى حد كبير تنسيق JSON. هيكل الاستجابة يتوافق مع هيكل الطلب.
هذه هي الطريقة التي يبدو بها استعلام GraphQL بسيط:
{ Sample_Company { Name } }
الإجابة بتنسيق JSON:
{ "data": { "Sample_Company": [ { "Name": "CompuSoft Associates" }, { "Name": "SynerTel Associates" }, { "Name": "RoboGlomerate Media Inc." }, { "Name": "QuantaTron Partners" } ] } }
نقطة دخول واحدة
للعمل في GraphQL ، للعمل مع البيانات ، ننتقل دائمًا إلى نقطة دخول واحدة ( نقطة نهاية ) - خادم GQL. تغيير الهيكل ، الحقول ، معلمات الاستعلام ، نحن نعمل مع بيانات مختلفة. نفس REST لها العديد من نقاط النهاية.
قارن REST بـ GraphQL بمثال بسيط:

لنفترض أنك تريد تحميل محتوى المستخدم ، بالنسبة لـ REST ، تحتاج إلى تقديم ثلاثة طلبات إلى الخادم:
- نقوم بتحميل بيانات المستخدم من خلال هويته
- بواسطة معرف نحصل على مشاركاته
- بواسطة معرف نحصل على مشتركيها
تطابق بطاقة REST هذه الطلبات:
<Route Url="/user/:id" Method="GET" Call="GetUserByID"/> <Route Url="/user/:id/posts" Method="GET" Call="GetUserPostsByID"/> <Route Url="/user/:id/follovers" Method="GET" Call="GetUserFolloversByID"/>
للحصول على مجموعة بيانات جديدة ، يجب استكمال بطاقة REST بنقاط نهاية جديدة.
يتعامل GraphQL مع هذه المهمة في استعلام واحد. للقيام بذلك ، حدد ما يلي في نص الطلب:
{ operationName: null, // query ( query TestName(...){...} ) query: "query { User(id: "ertg439frjw") { name posts { title } followers(last: 3) { name } } }", variables: null // , query* }
بطاقة REST المطابقة لهذا الاستعلام:
<Route Url="/graphql" Method="POST" Call="GraphQL"/>
علاوة على ذلك ، هذه هي نقطة النهاية الوحيدة على الخادم.
قم بتثبيت GraphQL و GraphiQL
لبدء استخدام GraphQL ، عليك القيام ببعض الخطوات:
- قم بتنزيل أحدث إصدار من GitHub واستورده إلى المنطقة المطلوبة
- انتقل إلى بوابة إدارة النظام وقم بإنشاء تطبيق ويب جديد لمنتجك من InterSystems Data Platform (Caché أو Ensemble أو IRIS):
- الاسم - /
- النطاق - مثل العينات
- فئة المعالج - GraphQL.REST.Main
- GraphiQL عبارة عن غلاف لاختبار استعلامات GraphQL. قم بتنزيل أحدث إصدار من GraphiQL المجمع أو قم ببنائه بنفسك
- إنشاء تطبيق ويب جديد:
- الاسم - / Graphiql
- النطاق - مثل العينات
- المسار الفعلي لملفات CSP هو C: \ InterSystems \ GraphiQL \
دعونا نلقي نظرة على النتيجة
انتقل إلى المتصفح على هذا الرابط http: // localhost: 57772 / graphiql / index.html (localhost - server، 57772 - port)

أعتقد أن كل شيء واضح مع منطقة الطلب والاستجابة ، والمخطط هو الوثائق التي يتم إنشاؤها لجميع الفئات المخزنة في المنطقة.
تحتوي الدائرة على:
- فصول
- الخصائص والحجج وأنواعها
- وصف كل ما سبق ، والذي تم إنشاؤه من التعليقات
خذ بعين الاعتبار الرسم التخطيطي باستخدام فئة Sample_Company كمثال :

يدعم GraphiQL أيضًا الإكمال التلقائي ، والذي يمكن استدعاؤه باستخدام مجموعة مفاتيح Ctrl + Space :

استفسارات
يمكن أن تكون الاستعلامات إما بسيطة أو متداخلة ؛ يمكنك الاستعلام عن مجموعات بيانات متعددة. فيما يلي مثال للاستعلام عن بيانات من فئتين مختلفتين Sample_Person و Sample_Company :

التصفية
في الوقت الحالي ، يتم دعم المساواة الصارمة فقط:

ترقيم الصفحات
يتم تنفيذ 4 وظائف لترقيم الصفحات ، إذا لزم الأمر يمكن دمجها:
- بعد: n - كافة السجلات ذات المعرف أكبر من n
- قبل: n - كافة السجلات ذات المعرف أقل من n
- الأول: ن - الإدخالات الأولى
- الأخير: n - آخر إدخالات n

النطاق
في معظم الأحيان ، وفقًا لمنطق الأعمال للتطبيقات لعميل معين ، لا ينبغي أن تكون جميع فئات المنطقة متاحة ، ولكن تلك التي لديه حقوق ، وفقًا لدوره. بناءً على ذلك ، هناك حاجة للحد من رؤية الفئات للعميل:
- جميع الفئات في النطاق ( GraphQL.Scope.All )
- الفئات الموروثة من الطبقة الفائقة ( GraphQL.Scope.Superclass )
- فصول تنتمي إلى حزمة معينة ( GraphQL.Scope.Package )
لتغيير طريقة الرؤية محدودة ، يجب عليك فتح الاستوديو والانتقال إلى المنطقة المطلوبة وفتح فئة GraphQL.Settings . تحتوي على معلمة SCOPECLASS ، ويتم تعيين قيمتها الافتراضية على GraphQL.Scope.All - هذه فئة تصف الواجهة لتقييد رؤية الفئات في الحقل:

لتغيير حد رؤية الفئة ، تحتاج فقط إلى تعيين إحدى القيم الموضحة أعلاه ، GraphQL.Scope.Package أو GraphQL.Scope.Superclass .
في حالة GraphQL.Scope.Package ، لا يزال من الضروري الانتقال إلى هذه الفئة وتعيين قيمة معلمة Package على اسم الحزمة المطلوبة ، على سبيل المثال ، Sample ، ثم ستكون جميع الفئات المخزنة من هذه الحزمة متاحة:

ومع GraphQL.Scope.Superclass ، يمكنك ببساطة أن ترث أيضًا من هذه الفئة في الفصول الدراسية التي تحتاجها:

مدعوم حاليا
الطلبات:
- أساسي
- كائنات متداخلة
- ورقة من أنواع بسيطة
- ورقة الأشياء
قيد التنفيذ
الطلبات:
في الخطط
← رابط إلى مستودع المشروع
← ارتباط بالخادم التجريبي
قضايا سحب الطلبات هي موضع ترحيب كبير.
تابع تطوير مشروعنا!