التحقق من صحة طلب GraphQL

ينطبق على: جميع مستويات إدارة واجهة برمجة التطبيقات

validate-graphql-request يتحقق النهج من صحة طلب GraphQL ويخول الوصول إلى مسارات استعلام معينة في واجهة برمجة تطبيقات GraphQL. استعلام غير صالح هو "خطأ في الطلب". يتم منح التخويل فقط للطلبات الصالحة.

إشعار

تعيين عناصر النهج والعناصر التابعة بالترتيب الوارد في بيان النهج. تعلم كيفية إعداد نُهج APIM أو تعديلها.

نهج السياسة

<validate-graphql-request error-variable-name="variable name" max-size="size in bytes" max-depth="query depth">
    <authorize>
        <rule path="query path, for example: '/listUsers' or '/__*'" action="string or policy expression that evaluates to 'allow | remove | reject | ignore'" />
    </authorize>
</validate-graphql-request>

سمات

السمة ‏‏الوصف مطلوبة افتراضي
error-variable-name اسم المتغير في context.Variables لتسجيل أخطاء التحقق من الصحة فيه. يتم السماح بتعبيرات النهج. لا ‏‫غير متاح
الحد الأقصى للحجم الحد الأقصى لحجم حمولة الطلب بالبايت. الحد الأقصى المسموح به للقيمة: 102,400 بايت (100 كيلوبايت). (اتصل بالدعم إذا كنت بحاجة إلى زيادة هذا الحد.) يتم السماح بتعبيرات النهج. ‏‏نعم‬ غير متوفر
أقصى عمق عدد صحيح. الحد الأقصى لعمق الاستعلام. يتم السماح بتعبيرات النهج. لا 6

عناصر

Name ‏‏الوصف مطلوب
تخويل أضف هذا العنصر لتعيين قاعدة تخويل مناسبة لمسار واحد أو أكثر. لا
قاعدة أضف عنصراً واحداً أو أكثر من هذه العناصر لتخويل مسارات استعلام معينة. يمكن لكل قاعدة تحديد إجراء مختلف اختيارياً. قد يتم تحديده بشكل مشروط باستخدام تعبير نهج. لا

سمات القاعدة

السمة ‏‏الوصف مطلوبة افتراضي
path مسار الاستعلام لتنفيذ التحقق من صحة التخويل. يجب أن يتبع النمط: /type/field. ‏‏نعم‬ غير متوفر
إجراء الإجراء المطلوب تنفيذه إذا كانت القاعدة تنطبق. قد يتم تحديده بشكل مشروط باستخدام تعبير نهج. لا سماح

نظام الاستبطان

نهج المسار=/__* عبارة عن نظام الاستبطان. يمكنك استخدامه لرفض طلبات الاستبطان (__schema، __type، وغيرها.).

طلب الإجراءات

يتم وصف الإجراءات المتوفرة في الجدول التالي.

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

الاستخدام

ملاحظات الاستخدام

  • تكوين النهج لواجهة برمجة تطبيقات GraphQL تمريرية أو اصطناعية تم استيرادها إلى APIM.

  • يمكن استخدام هذا النهج مرة واحدة فقط في قسم النهج.

  • نظرا لأن استعلامات GraphQL تستخدم مخططا مسطحا، فقد يتم تطبيق الأذونات على أي عقدة طرفية من نوع الإخراج:

    • طفرة أو استعلام أو اشتراك
    • حقل فردي في تعريف نوع

    قد لا يتم تطبيق الأذونات على:

    • نوع الإدخال
    • الأجزاء
    • النقابات
    • الواجهات
    • عنصر المخطط

معالجة الخطأ

يُعد الفشل في التحقق من صحة مخطط GraphQL أو فشل حجم الطلب أو مدى عمقه خطأً في الطلب وفشل النتائج في الطلب مع كتلة أخطاء (ولكن ليست كتلة بيانات).

على غرار خاصية Context.LastError، يتم نشر كافة أخطاء التحقق من صحة GraphQL تلقائياً في المتغير GraphQLErrors. إذا كان يتعين نشر الأخطاء بشكل منفصل، فيمكنك تحديد اسم متغير خطأ. يتم دفع الأخطاء إلى المتغير error والمتغير GraphQLErrors.

الأمثلة

التحقق من صحة الاستعلام

يطبق هذا المثال قواعد التحقق من الصحة والتخويل التالية لاستعلام GraphQL:

  • يتم رفض الطلبات التي يزيد حجمها عن 100 كيلوبايت أو التي يزيد عمق الاستعلام عنها عن 4.
  • يتم رفض الطلبات إلى نظام الاستبطان.
  • تتم إزالة الحقل /Missions/name من الطلبات التي تحتوي على أكثر من عنوانين.
<validate-graphql-request error-variable-name="name" max-size="102400" max-depth="4"> 
    <authorize>
        <rule path="/__*" action="reject" /> 
        <rule path="/Missions/name" action="@(context.Request.Headers.Count > 2 ? "remove" : "allow")" />
    </authorize>
</validate-graphql-request> 

التحقق من صحة الطفرة

يطبق هذا المثال قواعد التحقق من الصحة والتخويل التالية على تبديل GraphQL:

  • يتم رفض الطلبات التي يزيد حجمها عن 100 كيلوبايت أو التي يزيد عمق الاستعلام عنها عن 4.
  • يتم رفض طلبات تغيير الحقل deleteUser إلا عندما يكون الطلب من عنوان IP 198.51.100.1.
<validate-graphql-request error-variable-name="name" max-size="102400" max-depth="4"> 
    <authorize>
        <rule path="/Mutation/deleteUser" action="@(context.Request.IpAddress <> "198.51.100.1" ? "deny" : "allow")" />
    </authorize>
</validate-graphql-request> 

لمزيد من المعلومات حول العمل مع النُهج، راجع: