مرجع الشروط

يتم الآن عرض مستندات 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 يساوي ولكنه غير حسّاس لحالة الأحرف
> أو &gt; GreaterThan أكبر من. إذا استخدمت > عند تحديد الشرط في واجهة مستخدم Edge، يتم تحويلها إلى &gt;.
>= أو &gt;= GreaterThanOrEquals أكبر من أو يساوي. إذا كنت تستخدم >= عند تحديد الشرط في واجهة مستخدم Edge، يتم تحويله إلى &gt;=.
&lt; LesserThan أصغر من. لا تتيح واجهة مستخدم Edge الحرفي <.
&lt;= LesserThanOrEquals أصغر من أو يساوي. لا تتيح واجهة مستخدم Edge الحرفي <=.
&& And، and و
|| Or عامل التشغيل Or غير حساس لحالة الأحرف. على سبيل المثال، أسماء OR وOr وor كلها صالحة.
() تجمِّع تعبيرًا. يفتح ( التعبير ويغلقه ).
~~ JavaRegex

يطابق تعبيرًا عاديًا متوافقًا مع javax.util.regex. وتكون المطابقة حسّاسة لحالة الأحرف. للحصول على أمثلة، يُرجى مراجعة مطابقة الأنماط في العبارات الشرطية.

~ 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
> أو &gt; صحيح false false
>= أو &gt;= false صحيح صحيح
&lt; صحيح false false
&lt;= صحيح 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>