
مرحبا ، habrozhiteli! لقد نشرنا كتابًا عن لغة استعلام GraphQL. قررنا مشاركة ترجمة الفصل "Anatomy of GraphQL Queries"
Snowtooth هو منتجع تزلج خيالي. من أجل الأمثلة في هذا الفصل ، سوف ندعي أن هذا هو جبل حقيقي ونحن نعمل هناك. سنبحث في كيفية استخدام فريق Snow Fang على شبكة الإنترنت GraphQL لتوفير معلومات في الوقت الفعلي: معلومات حول حالة مصاعد التزلج ومسارات التزلج. يمكن Snow Fang Ski Patrol فتح وإغلاق مصاعد التزلج والمنحدرات مباشرة من هاتفك الذكي. لمتابعة الأمثلة في هذا الفصل ، راجع واجهة Snow Fang على منصة GraphQL Playground (snowtooth.moonhighway.com/).
يمكنك استخدام عملية الاستعلام للاستعلام عن البيانات من API. يصف الاستعلام البيانات التي تريد تلقيها من خادم GraphQL. عندما ترسل طلبًا ، فإنك تطلب وحدات البيانات حسب الحقل. يتم عرض هذه الحقول في نفس الحقل في استجابة بيانات JSON التي تتلقاها من الخادم. على سبيل المثال ، إذا قمت بإرسال طلب allLifts وطلبت حقول الاسم والحالة ، يجب أن تحصل على استجابة JSON تحتوي على مجموعة من allLifts وسلاسل الأسماء والحالة لكل مصعد ، كما هو موضح هنا:
query { allLifts { name status } }
خطأ في التعامل
الطلبات الناجحة تقوم بإرجاع مستند JSON يحتوي على مفتاح البيانات. الطلبات الفاشلة تُرجع مستند JSON يحتوي على مفتاح الخطأ. يتم إرسال تفاصيل الخطأ الذي حدث في صورة بيانات JSON ضمن هذا المفتاح. يمكن أن تحتوي استجابة JSON على "بيانات" و "أخطاء".
يمكنك إضافة استعلامات متعددة إلى مستند استعلام ، ولكن يمكن بدء عملية واحدة فقط في كل مرة. على سبيل المثال ، يمكنك وضع عمليتين للاستعلام في مستند استعلام:
query lifts { allLifts { name status } } query trails { allTrails { name difficulty } }
عند النقر فوق زر التشغيل ، يطالبك GraphQL Playground بتحديد إحدى هاتين العمليتين.
إذا كنت ترغب في إرسال طلب واحد لجميع البيانات المحددة ، فأنت بحاجة إلى وضع كل شيء في نفس الطلب:
query liftsAndTrails { liftCount(status: OPEN) allLifts { name status } allTrails { name difficulty } }
فيما يلي فوائد GraphQL. يمكننا تلقي أنواع مختلفة من البيانات في طلب واحد. نحن نطلب رفع عدد حسب الحالة ، والذي يسمح لنا لمعرفة عدد المصاعد التي لديها حاليا هذه الحالة. نطلب أيضًا اسم وحالة كل مصعد. أخيرًا ، نطلب اسم وحالة كل تتبع.
الاستعلام هو نوع من GraphQL. نحن نسميها نوع الجذر لأنه هو النوع الذي يعين العملية ، والعمليات هي جذور وثيقة الاستعلام الخاصة بنا. يتم تحديد الحقول المتاحة للاستعلام في واجهة برمجة تطبيقات GraphQL في مخطط واجهة برمجة التطبيقات هذه. تشير الوثائق إلى الحقول المتاحة للاختيار في نوع الاستعلام.
تخبرنا الوثائق أنه يمكننا تحديد حقول liftCount و allLifts و allTrails عند استدعاء واجهة برمجة التطبيقات هذه. كما أنه يحدد المزيد من الحقول المتاحة للاختيار ، ولكن الهدف الكامل من الاستعلام هو أنه يمكننا اختيار الحقول التي نحتاج إليها والتي نحتاج إلى حذفها.
عندما نكتب استعلامات ، نختار الحقول التي نحتاجها ، مع إرفاقها بأقواس مجعدة. وتسمى هذه الكتل العينات. ترتبط الحقول التي نحددها في الاختيار مباشرة بأنواع GraphQL. يتم تحديد حقول liftCount و allLifts و allTrails في نوع الاستعلام.
يمكنك تضمين العديد من الاختيارات في بعضها البعض. نظرًا لأن حقل allLifts يُرجع قائمة الرفع ، نحتاج إلى استخدام الأقواس المعقوفة لإنشاء تحديد جديد لهذا النوع. توجد جميع أنواع البيانات التي يمكننا طلبها حول المصعد ، لكن في هذا المثال ، نحتاج فقط إلى اسم المصعد وحالته. وبالمثل ، فإن طلب allTrails سيعيد أنواع المسارات.
تحتوي استجابة JSON على جميع البيانات التي طلبناها. يتم تنسيق هذه البيانات كـ JSON وتسليمها في نفس النموذج مثل طلبنا. يتم إعطاء كل حقل JSON نفس اسم الحقل الموجود في نموذجنا. يمكننا تغيير أسماء الحقول في كائن الاستجابة في الطلب عن طريق تحديد الأسماء المستعارة ، كما هو موضح أدناه:
query liftsAndTrails { open: liftCount(status: OPEN) chairlifts: allLifts { liftName: name status } skiSlopes: allTrails { name difficulty } }
التالي هو الجواب:
{ "data": { "open": 5, "chairlifts": [ { "liftName": "Astra Express", "status": "open" } ], "skiSlopes": [ { "name": "Ditch of Doom", "difficulty": "intermediate" } ] } }
نحن الآن نرجع البيانات بنفس الشكل ، لكن في جوابنا قمنا بإعادة تسمية عدة حقول. طريقة لتصفية نتائج استعلام GraphQL هي تمرير وسيطات الاستعلام. الوسائط هي زوج من القيم الأساسية (أو الأزواج) المرتبطة بحقل الطلب. إذا كانت أسماء المصاعد المغلقة مطلوبة فقط ، فيمكننا إرسال وسيطة من شأنها تصفية إجابتنا:
query closedLifts { allLifts(status: "CLOSED" sortBy: "name") { name status } }
يمكنك أيضًا استخدام الوسائط لتحديد البيانات. على سبيل المثال ، لنفترض أننا بحاجة إلى طلب حالة كبل فردي. يمكننا اختيار المصعد بمعرفه الفريد:
query jazzCatStatus { Lift(id: "jazz-cat") { name status night elevationGain } }
هنا نرى أن الإجابة تحتوي على الاسم والحالة والليل والارتفاع. للحصول على سيارة Jazz Cat.
»يمكن الاطلاع على مزيد من المعلومات حول الكتاب على
موقع الناشر»
المحتويات»
مقتطفاتخصم 25٪ على كوبون
الباعة المتجولين -
GraphQLعند دفع النسخة الورقية من الكتاب ، يتم إرسال نسخة إلكترونية من الكتاب عن طريق البريد الإلكتروني.