التحقق من صحة طلب 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>
سمات
عناصر
Name | الوصف | مطلوب |
---|---|---|
تخويل | أضف هذا العنصر لتعيين قاعدة تخويل مناسبة لمسار واحد أو أكثر. | لا |
قاعدة | أضف عنصراً واحداً أو أكثر من هذه العناصر لتخويل مسارات استعلام معينة. يمكن لكل قاعدة تحديد إجراء مختلف اختيارياً. قد يتم تحديده بشكل مشروط باستخدام تعبير نهج. | لا |
سمات القاعدة
السمة | الوصف | مطلوبة | افتراضي |
---|---|---|---|
path | مسار الاستعلام لتنفيذ التحقق من صحة التخويل. يجب أن يتبع النمط: /type/field . |
نعم | غير متوفر |
إجراء | الإجراء المطلوب تنفيذه إذا كانت القاعدة تنطبق. قد يتم تحديده بشكل مشروط باستخدام تعبير نهج. | لا | سماح |
نظام الاستبطان
نهج المسار=/__*
عبارة عن نظام الاستبطان. يمكنك استخدامه لرفض طلبات الاستبطان (__schema
، __type
، وغيرها.).
طلب الإجراءات
يتم وصف الإجراءات المتوفرة في الجدول التالي.
الإجراء | الوصف |
---|---|
رفض | يحدث خطأ في الطلب، ولا يتم إرسال الطلب إلى الخلفية. لا يتم تطبيق قواعد إضافية إذا تم تكوينها. |
حذف | يحدث خطأ في الحقل، ويتم إزالة الحقل من الطلب. |
سماح | يتم تمرير الحقل إلى الخلفية. |
تجاهل | القاعدة غير صالحة لهذه الحالة ويتم تطبيق القاعدة التالية. |
الاستخدام
- أقسام النهج:الواردة.
- نطاقات النهج: العمومية، ومساحة العمل، والمنتج، وواجهة برمجة التطبيقات
- البوابات: الكلاسيكية، الإصدار 2، الاستهلاك، المستضافة ذاتيا
ملاحظات الاستخدام
تكوين النهج لواجهة برمجة تطبيقات 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
إلا عندما يكون الطلب من عنوان IP198.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>
النهج ذات الصلة
المحتوى ذو الصلة
لمزيد من المعلومات حول العمل مع النُهج، راجع: