أنت تعرض مستندات 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 لاحظ أن فقط 'التسمية' يمكن تنفيذ التدفقات بشكل مشروط. التدفقات المسبقة تنفيذ عمليات Postflows (كل من الطلب والاستجابة) على ProxyEndpoints وTargetEndpoints لكل العملية، وبالتالي تقديم قيمة "failsafe" غير مشروطة والإمكانات.
على سبيل المثال، لتنفيذ تدفق طلب مشروط بناءً على فعل 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>
اختيار مسار نقطة النهاية المستهدفة
باستخدام العبارات الشرطية، يمكنك التحكم في نقطة النهاية المستهدفة التي تم استدعاؤها من خلال نقطة نهاية الخادم الوكيل التكوين. تعمل قاعدة المسار على إعادة توجيه الطلب إلى نقطة نهاية هدف محدّدة. عندما يتجاوز توفر نقطة نهاية هدف واحدة، يتم تقييم قاعدة المسار لشرطها، وإذا كانت true، تتم إعادة توجيه الطلب إلى نقطة النهاية المستهدفة المحددة.
على سبيل المثال، لتوجيه الرسائل بشكل مشروط إلى نقاط نهاية مستهدفة مخصصة استنادًا إلى
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
يسرد الجدول التالي عوامل التشغيل المتوافقة. يمكنك استخدام الرمز أو الكلمة في التعبيرات:
الرمز | Word | الوصف |
---|---|---|
! |
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 فارغ |
---|---|---|---|
= و== و:= |
خطأ | خطأ | صحيح |
=| |
خطأ | خطأ | خطأ |
!= |
صحيح | صحيح | خطأ |
> أو > |
صحيح | خطأ | خطأ |
>= أو >= |
خطأ | صحيح | صحيح |
< |
صحيح | خطأ | خطأ |
<= |
صحيح | خطأ | صحيح |
~ |
خطأ | لا ينطبق | خطأ |
~~ |
خطأ | لا ينطبق | خطأ |
!~ |
صحيح | خطأ | خطأ |
~/ |
خطأ | لا ينطبق | خطأ |
القيم الحرفية
بالإضافة إلى السلاسل الحرفية والرقمية، يمكنك استخدام المصطلحات الحرفية التالية في العبارات الشرطية:
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>