يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات
Apigee X. المعلومات
تمكّن الشروط الخوادم الوكيلة لواجهة برمجة التطبيقات من العمل بشكل ديناميكي في وقت التشغيل. تحدِّد الشروط العمليات
على المتغيّرات، والتي يتم تقييمها من خلال مسار معالجة Apigee Edge. تكون العبارات الشرطية
منطقية ويتم تقييمها دائمًا باستخدام true
أو false
.
نظرة عامة على الشروط
يصف هذا القسم كيف وأين يمكن استخدام الجمل الشرطية مع Edge. بالإضافة إلى ذلك، تصف الأقسام التالية البنية:
هيكل الجمل الشرطية
الهيكل الأساسي للعبارة الشرطية هو:
<Condition>variable.name operator "value"</Condition>
مثال:
<Condition>request.verb = "GET"</Condition>
يمكنك الجمع بين الشروط باستخدام AND لفرض أكثر من شرط واحد في الوقت نفسه. على سبيل المثال، يتم تقييم الشروط التالية إلى true
فقط في حال تطابق معرّف الموارد المنتظم (URI) للطلب مع /statuses
وفعل HTTP للطلب هو GET
:
<Condition>(proxy.pathsuffix MatchesPath "/statuses") and (request.verb = "GET")</Condition>
أين يمكنك استخدام العبارات الشرطية
يمكنك استخدام الشروط للتحكّم في السلوك في ما يلي:
تنفيذ السياسة
يمكنك التحكّم في فرض السياسات باستخدام العبارات الشرطية. ومن بين حالات الاستخدام الشائعة التحويل المشروط لرسائل الاستجابة استنادًا إلى عنوان HTTP أو محتوى الرسالة.
يحوِّل المثال التالي ملف XML بشكل مشروط إلى JSON استنادًا إلى عنوان Accept
:
<Step> <Condition>request.header.accept = "application/json"</Condition> <Name>XMLToJSON</Name> </Step>
تنفيذ التدفق
باستخدام العبارات الشرطية، يمكنك التحكّم في تنفيذ المسارات المُسمّاة في ProxyEndpoints وTargetEndpoints. تجدر الإشارة إلى أنه يمكن تنفيذ التدفقات المسماة فقط بشروط. يتم تنفيذ العمليات المسبقة والتدفقات اللاحقة (كل من الطلبات والاستجابة) في ProxyEndpoints وTargetEndpoints لكل معاملة، ما يؤدي إلى توفير إمكانيات "غير آمنة" غير مشروطة.
على سبيل المثال، لتنفيذ تدفق طلب مشروط استنادًا إلى فعل HTTP في رسالة الطلب، وتدفق الاستجابة الشرطية استنادًا إلى رمز حالة HTTP (المحتمل) الذي يمثل خطأ:
<Flow name="GetRequests"> <Condition>request.verb = "GET"</Condition> <Request> <Step> <Condition>request.path MatchesPath "/statuses/**"</Condition> <Name>StatusesRequestPolicy</Name> </Step> </Request> <Response> <Step> <Condition>(response.status.code = 503) or (response.status.code = 400)</Condition> <Name>MaintenancePolicy</Name> </Step> </Response> </Flow>
اختيار مسار نقطة النهاية المستهدف
وباستخدام العبارات الشرطية، يمكنك التحكّم في نقطة النهاية الهدف التي تم استدعاؤها من خلال إعداد نقطة نهاية الخادم الوكيل. تعيد قاعدة المسار توجيه الطلب إلى نقطة نهاية هدف محددة. وعند توفّر أكثر من نقطة نهاية مستهدفة واحدة، يتم تقييم قاعدة المسار لشرطها، وإذا كانت القيمة صحيحة، تتم إعادة توجيه الطلب إلى نقطة النهاية الهدف المحدّدة.
على سبيل المثال، لتوجيه الرسائل بشكل مشروط إلى نقاط نهاية مستهدفة تم تحديدها استنادًا إلى Content-Type
:
<RouteRule name="default">
<!--this routing executes if the header indicates that this is an XML call. If true, the call is routed to the endpoint XMLTargetEndpoint-->
<Condition>request.header.Content-Type = "text/xml"</Condition>
<TargetEndpoint>XmlTargetEndpoint</TargetEndpoint>
</RouteRule>
اطّلِع على متغيّرات التدفق وشروطها للحصول على مزيد من المعلومات.
تعبيرات المسار
يتم استخدام تعبيرات المسارات لمطابقة مسارات معرّف الموارد المنتظم (URI) باستخدام علامة "*" لتمثيل عنصر مسار واحد و "**" لتمثيل مستويات معرّفات موارد منتظمة (URI) متعددة.
مثال:
النمط | نموذج مسارات معرّفات الموارد المنتظمة (URI) المطابقة |
---|---|
/*/a/ |
/x/a/ أو /y/a/ |
/*/a/* |
/x/a/b أو /y/a/foo |
/*/a/** |
/x/a/b/c/d |
/*/a/*/feed/ |
/x/a/b/feed/ أو /y/a/foo/feed/ |
/a/**/feed/** |
/a/b/feed/rss/1234 |
يتم التعامل مع %
كحرف إلغاء. يتطابق
النمط %{user%}
مع {user}
ولكن لا يتطابق مع
user
.
المتغيرات
يمكنك استخدام كل من متغيّرات التدفق المضمّنة والمتغيرات المخصّصة في العبارات الشرطية. يمكنك الاطّلاع على ما يلي للحصول على مزيد من المعلومات:
- مرجع متغيّرات التدفق: قائمة كاملة بالمتغيّرات المضمّنة
- سياسة استخراج المتغيّرات: تعليمات عن إعداد المتغيرات المخصَّصة
عوامل التشغيل
عند استخدام عوامل التشغيل، يُرجى مراعاة القيود التالية:
- لا يمكن استخدام عوامل التشغيل كأسماء متغيرات.
- يجب إدخال مسافة قبل عامل التشغيل وبعده.
- لتضمين عامل في متغير، يجب تضمين اسم المتغير بين علامتي اقتباس مفردتين.
مثلاً:
'request.header.help!me'
- عوامل التشغيل الحسابية (
+ * - / %
) غير مدعومة. - يتم استخدام أولوية Java للمشغلات.
- يعتمد Apigee Edge على التعبيرات العادية كما تم تنفيذها في
java.util.regex
.
يتضمن الجدول التالي عوامل التشغيل المتوافقة. يمكنك استخدام الرمز أو الكلمة في تعبيراتك:
الرمز | كلمة | الوصف |
---|---|---|
! |
Not ، not |
عامل تشغيل أحادي (يأخذ إدخالاً واحدًا) |
= |
Equals ، Is |
يساوي (حسّاس لحالة الأحرف) |
!= |
NotEquals ، IsNot |
غير يساوي (حسّاس لحالة الأحرف) |
:= |
EqualsCaseInsensitive |
يساوي ولكنه غير حسّاس لحالة الأحرف |
> أو > |
GreaterThan |
أكبر من. إذا استخدمت > عند تحديد الشرط في واجهة مستخدم Edge، يتم تحويلها إلى >. |
>= أو >= |
GreaterThanOrEquals |
أكبر من أو يساوي. إذا كنت تستخدم >= عند تحديد الشرط في واجهة مستخدم Edge، يتم تحويله إلى >=. |
< |
LesserThan |
أصغر من. لا تتيح واجهة مستخدم Edge الحرفي <. |
<= |
LesserThanOrEquals |
أصغر من أو يساوي. لا تتيح واجهة مستخدم Edge الحرفي <=. |
&& |
And ، and |
و |
|| |
Or |
عامل التشغيل Or غير حساس لحالة الأحرف. على سبيل المثال، أسماء OR وOr وor كلها صالحة. |
() |
تجمِّع تعبيرًا. يفتح ( التعبير ويغلقه ) . |
|
~~ |
JavaRegex |
يطابق تعبيرًا عاديًا متوافقًا مع |
~ |
Matches ، Like |
يطابق نمطًا بنمط الكرة الأرضية باستخدام حرف البدل "*". وتكون المطابقة حسّاسة لحالة الأحرف. للحصول على أمثلة، راجِع مطابقة الأنماط باستخدام الشرطات. |
~/ |
MatchesPath ، LikePath |
يطابق تعبير مسار. وتكون المطابقة حسّاسة لحالة الأحرف. للحصول على أمثلة، راجِع مطابقة الأنماط باستخدام الشرطات. |
=| |
StartsWith |
تتطابق مع الأحرف الأولى من السلسلة. وتكون المطابقة حسّاسة لحالة الأحرف. |
الخاصون
تعمل Apigee Edge على تكييف المعاملات مع نوع بيانات شائع قبل مقارنتها. على سبيل المثال، إذا كان رمز حالة الاستجابة هو 404، يكون التعبير response.status.code = "400"
والتعبير response.status.code = 400
مكافئَين.
بالنسبة إلى المعاملات الرقمية، يتم تفسير نوع البيانات كعدد صحيح ما لم يتم إنهاء القيمة على النحو التالي:
- "f" أو "F" (عدد عائم، على سبيل المثال، 3.142f، 91.1F)
- "d" أو "D" (مزدوج، على سبيل المثال، 3.142d، 100.123D)
- "l" أو "L" (طويل، على سبيل المثال، 12321421312L)
في هذه الحالات، يجري النظام عمليات تعديل كما هو موضَّح في الجدول التالي (حيث يشير RHS إلى الجانب الأيمن من المعادلة وLHS هو الجانب الأيسر):
جهة اليد اليمنى واليسرى | منطقي | عدد صحيح | طويلة | عدد عائم | بلوغ القاعدة الثانية | سلسلة | مشابهة | الكائن |
---|---|---|---|---|---|---|---|---|
منطقي | منطقي | عدد صحيح | طويلة | عدد عائم | بلوغ القاعدة الثانية | سلسلة | - | |
عدد صحيح | عدد صحيح | عدد صحيح | طويلة | عدد عائم | بلوغ القاعدة الثانية | سلسلة | مشابهة | - |
طويلة | طويلة | طويلة | طويلة | عدد عائم | بلوغ القاعدة الثانية | سلسلة | مشابهة | - |
عدد عائم | عدد عائم | عدد عائم | عدد عائم | عدد عائم | بلوغ القاعدة الثانية | سلسلة | مشابهة | - |
بلوغ القاعدة الثانية | بلوغ القاعدة الثانية | بلوغ القاعدة الثانية | بلوغ القاعدة الثانية | بلوغ القاعدة الثانية | بلوغ القاعدة الثانية | سلسلة | مشابهة | - |
سلسلة | سلسلة | سلسلة | سلسلة | سلسلة | سلسلة | سلسلة | مشابهة | - |
مشابهة | مشابهة | مشابهة | مشابهة | مشابهة | مشابهة | مشابهة | مشابهة | - |
الكائن | - | - | - | - | - | - | - | - |
المعاملات الخالية
يوضّح الجدول التالي ما إذا كان يتم تقييم الشروط إلى true
أو false
عندما تكون القيم فارغة في الجانب الأيسر (LHS) و/أو في الجانب الأيمن (RHS) من المعامل المعروض:
المؤثِّر | قيمة LHS فارغة | قيمة RHS خالية | قيمة LHS وRHS خالية |
---|---|---|---|
= و== و:= |
false | false | صحيح |
=| |
false | false | false |
!= |
صحيح | صحيح | false |
> أو > |
صحيح | false | false |
>= أو >= |
false | صحيح | صحيح |
< |
صحيح | false | false |
<= |
صحيح | false | صحيح |
~ |
false | لا ينطبق | false |
~~ |
false | لا ينطبق | false |
!~ |
صحيح | false | false |
~/ |
false | لا ينطبق | false |
الكلمات الحرفية
بالإضافة إلى القيم الحرفية للسلسلة والرقمية الرقمية، يمكنك استخدام القيم الحرفية التالية في العبارات الشرطية:
null
true
false
مثال:
request.header.host is null
flow.cachehit is true
أمثلة
<RouteRule name="default"> <Condition>request.header.content-type = "text/xml"</Condition> <TargetEndpoint>XmlTargetEndpoint</TargetEndpoint> </RouteRule>
<Step> <Condition>response.status.code = 503</Condition> <Name>MaintenancePolicy</Name> </Step>
<Flow name="GetRequests"> <Condition>response.verb="GET"</Condition> <Request> <Step> <Condition>request.path ~ "/statuses/**"</Condition> <Name>StatusesRequestPolicy</Name> </Step> </Request> <Response> <Step> <Condition>(response.status.code = 503) or (response.status.code = 400)</Condition> <Name>MaintenancePolicy</Name> </Step> </Response> </Flow>