أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى
مستندات Apigee X. info
تتيح الشروط لوكلاء واجهة برمجة التطبيقات أن تتصرف بشكل ديناميكي في وقت التشغيل. تحدّد الشروط العمليات على المتغيرات التي يتم تقييمها من خلال مسار معالجة 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) التي تمّت مطابقتها |
|---|---|
/*/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.
المتغيّرات
يمكنك استخدام كلّ من متغيّرات التدفق المضمّنة والمتغيّرات المخصّصة في العبارات الشرطية. يمكنك الاطّلاع على ما يلي للحصول على مزيد من المعلومات:
- مرجع لمتغيرات التدفق: قائمة كاملة بالمتغيرات المضمّنة
- سياسة ExtractVariables: تعليمات حول ضبط المتغيّرات المخصّصة
المشغِّلون
عند استخدام عوامل التشغيل، يجب مراعاة القيود التالية:
- لا يمكن استخدام عوامل التشغيل كأسماء للمتغيرات.
- يجب إدراج مسافة قبل عامل التشغيل وبعده.
- لتضمين عامل في متغيّر، يجب وضع اسم المتغيّر بين علامتَي اقتباس مفردتَين.
مثلاً:
'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 |
تطابق نمطًا بنمط glob باستخدام حرف البدل "*". تكون المطابقة حسّاسة لحالة الأحرف. للحصول على أمثلة، يُرجى الاطّلاع على مطابقة الأنماط باستخدام العبارات الشرطية. |
~/ |
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):
| RHS LHS | منطقي | عدد صحيح | الصيغة الطويلة | عدد عائم | مزدوجة | سلسلة | مشابهة | عنصر |
|---|---|---|---|---|---|---|---|---|
| منطقي | منطقي | عدد صحيح | الصيغة الطويلة | عدد عائم | مزدوجة | سلسلة | - | |
| عدد صحيح | عدد صحيح | عدد صحيح | الصيغة الطويلة | عدد عائم | مزدوجة | سلسلة | مشابهة | - |
| الصيغة الطويلة | الصيغة الطويلة | الصيغة الطويلة | الصيغة الطويلة | عدد عائم | مزدوجة | سلسلة | مشابهة | - |
| عدد عائم | عدد عائم | عدد عائم | عدد عائم | عدد عائم | مزدوجة | سلسلة | مشابهة | - |
| مزدوجة | مزدوجة | مزدوجة | مزدوجة | مزدوجة | مزدوجة | سلسلة | مشابهة | - |
| سلسلة | سلسلة | سلسلة | سلسلة | سلسلة | سلسلة | سلسلة | مشابهة | - |
| مشابهة | مشابهة | مشابهة | مشابهة | مشابهة | مشابهة | مشابهة | مشابهة | - |
| عنصر | - | - | - | - | - | - | - | - |
المعاملات الخالية
يوضّح الجدول التالي ما إذا كانت الشروط تؤدي إلى القيمة true أو false عندما تكون القيم فارغة في الجانب الأيسر و/أو الجانب الأيمن من المعامل المعروض:
| عامل التشغيل | قيمة فارغة في الجانب الأيسر | RHS null | قيمة فارغة في الجانب الأيمن والأيسر |
|---|---|---|---|
=، ==، := |
false | false | صحيح |
=| |
false | false | false |
!= |
صحيح | صحيح | false |
> أو > |
صحيح | false | false |
>= أو >= |
false | صحيح | صحيح |
< |
صحيح | false | false |
<= |
صحيح | false | صحيح |
~ |
false | لا ينطبق | false |
~~ |
false | لا ينطبق | false |
!~ |
صحيح | false | false |
~/ |
false | لا ينطبق | false |
القيم الحرفية
بالإضافة إلى القيم الحرفية للسلاسل والأرقام، يمكنك استخدام القيم الحرفية التالية في العبارات الشرطية:
nulltruefalse
على سبيل المثال:
request.header.host is nullflow.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>