مرجع الشروط

أنت تعرض مستندات 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 يساوي ولكنه غير حساس لحالة الأحرف
> أو &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 فارغ
= و== و:= خطأ خطأ صحيح
=| خطأ خطأ خطأ
!= صحيح صحيح خطأ
> أو &gt; صحيح خطأ خطأ
>= أو &gt;= خطأ صحيح صحيح
&lt; صحيح خطأ خطأ
&lt;= صحيح خطأ صحيح
~ خطأ لا ينطبق خطأ
~~ خطأ لا ينطبق خطأ
!~ صحيح خطأ خطأ
~/ خطأ لا ينطبق خطأ

القيم الحرفية

بالإضافة إلى السلاسل الحرفية والرقمية، يمكنك استخدام المصطلحات الحرفية التالية في العبارات الشرطية:

  • 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>