GraphQL / دليل حلول تحريري
تشخيص رفض الطلب بين HTTP والتحقق من الوثيقة والمتغيرات
حدد المرحلة التي رفضت الطلب، ثم أصلح مخالفة النقل أو المخطط أو الإدخال المعنية بدلاً من تغيير طبقات لا تشير إليها الأدلة.
قاعدة معرفة للقراءة فقط · بلا تعليقات عامة
تعرّف على الأعراض
قد يستقبل العميل جسم خطأ لا يتبع JSON، أو قائمة errors من GraphQL بلا data، أو رسالة عن حقل مجهول، أو فشل متغير مطلوب. يمكن أن تظهر هذه الأعراض قبل تشغيل أي محلل، فلا تجمعها مع مهلات مصادر البيانات أثناء التنفيذ. احتفظ بحالة HTTP ونوع محتوى الاستجابة ومعرف آمن للعملية وفئة الرفض الدقيقة، حتى تستطيع ربط العينة بمرحلتها دون كشف قيم خاصة.
افهم الأسباب المحتملة
- تشمل الأسباب المحتملة رفض الوكيل أو المصادقة، ونوع Content-Type غير المناسب، وJSON المعيبة، ووثيقة GraphQL غير الصحيحة نحوياً، واختلاف مخطط العميل عن المنشور، وعدم اختيار عملية من وثيقة متعددة العمليات، ومتغيرات تخالف الأنواع المعلنة. صحة جسم JSON لا تثبت أن وثيقة GraphQL الموجودة داخله صالحة مقابل نسخة المخطط التي يستعملها الخادم فعلياً.
افصل دليل النقل عن اللغة
ابدأ ببيانات الاستجابة المتاحة للعميل وبسجل لإعادة إنتاج الطلب بعد تنقيحه من المعلومات الحساسة. لا تعد صفحة HTML أعادها وكيل، أو استجابة رفض المصادقة، نتيجة GraphQL لمجرد أن عنوان الطلب ينتهي بـ/graphql. إذا كان الجسم بالفعل نتيجة GraphQL بصيغة JSON، فحدد هل بدأ التنفيذ: تمنع أخطاء الطلب عادة وجود نتيجة data، بينما قد ترافق أخطاء الحقول بيانات جزئية. تختلف صياغة الرسائل بين التنفيذات؛ لذلك اعتمد على مرحلة الفشل والبيانات المنظمة، لا على البحث عن عبارة واحدة في كل رسالة. لا تسجل الاعتمادات أو ترويسات التفويض أو قيم المتغيرات الخاصة أثناء جمع العينة.
قارن أثر الوثيقة والمخطط المحددين
سجل إصدار الخادم المقصود والوثيقة المركبة الدقيقة التي أرسلها العميل، بما فيها الأجزاء المنشورة داخلها. قد يعني الحقل المجهول خطأ تهجئة، لكنه قد يعني أيضاً نشر العميل قبل توفر دعم الخادم، أو بقاء مثيل قديم أثناء إطلاق تدريجي. تحقق من الوثيقة مقابل أثر المخطط المحلي المقصود بأدوات المشروع المثبتة، من دون تجربة عناوين خدمات غير معنية. إذا احتوت الوثيقة عدة عمليات، فتأكد من أن operationName يختار العملية المطلوبة. يبقى الحقل المهمل قابلاً للاستخدام إلى أن يحذف؛ فوسم الإهمال وحده لا يفسر رسالة تفيد أن الحقل غير معروف.
{"query":"query Card($id: ID!) { course(id: $id) { title } }","operationName":"Card","variables":{"id":"c1"}}
يفصل الجسم بين اختيار العملية وقيم متغيراتها. يثبت تحليله محلياً صحة صياغة JSON فقط، ولا يثبت التوافق مع المخطط المنشور أو نجاح المصادقة أو التنفيذ.
صحح مخالفة الإدخال المحددة
افحص تعريف المتغير وموضع الوسيط وتمثيل JSON معاً. لا يصبح متغير من النوع String قابلاً للاستعمال مكان ID! لمجرد أن المثالين يحملان نصاً. ولا يجوز حذف متغير مطلوب أو تمرير null إليه صراحة. في الإدخال الاختياري، ميز العضو المحذوف من العضو ذي القيمة null، وراجع الافتراضات التي تنطبق على كل منهما. صحح عينة العميل أو عقد المخطط المصمم بقصد؛ لا تحول كل الوسائط إلى سلاسل ضعيفة التحقق لمجرد إسكات خطأ واحد. وعند استخدام HTTP، قرن الجسم بتفاوض محتوى مدعوم، وارفض تنفيذ الطفرات عبر GET وفق عقد دمج النقل.
تحقق من الرفض دون آثار مصدر
استخدم اختبارات عمليات معزولة ومراقب استدعاءات لخدمة اصطناعية، لتثبت أن الصياغة غير الصحيحة والحقول المجهولة والمتغيرات المطلوبة المخالفة لا تصل إلى كتابة داخل المحلل. ينبغي للعينة الإيجابية المصححة أن تعيد البيانات المسموحة المختارة بالضبط. افصل عنها اختبارات النقل الخاصة بنوع المحتوى والمصادقة وقواعد الطرق. مثال JSON المعروض هنا لا يرسل طلباً، ولم يتصل الدليل بمحرك GraphQL أو عنوان خدمة. إذا لم يوجد محلل مثبت في المشروع، فاحفظ العينة وحدود التحقق؛ لا تثبت اعتماداً جديداً أو تستدع خدمة إنتاج لمجرد الحصول على رسالة خطأ.
تحقق من نجاح الإصلاح
تحقق من عينة صحيحة، ومن عينات سلبية منفصلة لكل من JSON النقل المعيبة، والوثيقة غير الصالحة، وقيم المتغيرات المخالفة. أكد أثر المخطط المقصود وفئة الخطأ الآمنة، واستعمل المراقب لإثبات عدم حدوث استدعاء كتابة للعمليات المرفوضة. نجاح محلل JSON المحلي وحده لا يكفي لإثبات إصلاح الواجهة.
امنع تكرار المشكلة
- ولد آثار العميل من مخطط مثبت، وتحقق من الوثائق المركبة كاملة أثناء المراجعة، واحتفظ بعينات ممثلة لقيم المتغيرات. نسق فترة تداخل إصداري الخادم والعميل وإمكان التراجع عنهما. سجل بيانات آمنة عن المرحلة ومعرف الوثيقة، وأبق الأسرار وإدخال المستخدم الخاص خارج السجلات الروتينية.