مرجع ضبط التدفق

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

يوفر هذا القسم معلومات مرجعية حول عناصر XML التي تستخدمها لتحديد تدفقات الخادم الوكيل لواجهة برمجة التطبيقات.

التسلسل الهرمي والبناء

توضح الأمثلة التالية التدرج الهرمي للعناصر وبنية عناصر تهيئة التدفق:

التسلسل الهرمي للعنصر

يوضِّح المثال التالي العرض الهرمي لعناصر ضبط التدفق ضمن العنصرَين <ProxyEndpoint> و<TargetEndpoint>:

<ProxyEndpoint | TargetEndpoint>
    <PreFlow>
          <Request>
                <Step>
                    <Condition>
                    <Name>
          <Response>
                <Step>
                    <Condition>
                    <Name>
          <Description>
    <Flows>
          <Flow>
                <Description>
                <Condition>
                <Request>
                      <Step>
                          
                <Response>
                      <Step>
                          
          <Description>
    <PostFlow>
          <Request>
                <Step>
                    
          <Response>
                <Step>
                    
          <Description>
    <PostClientFlow> (<ProxyEndpoint> only)
          <Response>
                
          <Description>

      // Additional configuration elements

</ProxyEndpoint | TargetEndpoint>

البنية

يوضح المثال التالي البنية لعناصر ضبط التدفق. ويتوفّر شرح مفصّل لكل عنصر من هذه العناصر في الأقسام التالية:

<!-- ProxyEndpoint flow configuration file -->
<ProxyEndpoint ... >
  ...
  <PreFlow name="flow_name">
    <Description>flow_description</Description>
    <Request>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Request>
    <Response>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Response>
  </PreFlow>
  <Flows name="flow_name">
    <Flow name="conditional_flow_name">
      <Description>flow_description</Description>
      <Condition>property operator "value"</Condition>
      <Request>
        <Step>
          <Condition>property operator "value"</Condition>
          <Name>policy_name</Name>
        </Step>
        ...
      </Request>
      <Response>
        <Step>
          <Condition>property operator "value"</Condition>
          <Name>policy_name</Name>
        </Step>
        ...
      </Response>
    </Flow>
  </Flows>
  <PostFlow name="flow_name">
    <Description>flow_description</Description>
    <Request>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Request>
    <Response>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Response>
  </PostFlow>
  <PostClientFlow name="flow_name">
    <Description>flow_description</Description>
    <Response>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Response>
  </PostClientFlow>
  ...
</ProxyEndpoint>

<!-- TargetEndpoint flow configuration file -->
<TargetEndpoint ... >
  ...
  <PreFlow name="flow_name">
    <Description>flow_description</Description>
    <Request>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Request>
    <Response>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Response>
  </PreFlow>
  <Flows name="flow_name">
    <Flow name="conditional_flow_name">
      <Description>flow_description</Description>
      <Condition>property operator "value"</Condition>
      <Request>
        <Step>
          <Condition>property operator "value"</Condition>
          <Name>policy_name</Name>
        </Step>
        ...
      </Request>
      <Response>
        <Step>
          <Condition>property operator "value"</Condition>
          <Name>policy_name</Name>
        </Step>
        ...
      </Response>
    </Flow>
    ...
  </Flows>
  <PostFlow name="flow_name">
    <Description>flow_description</Description>
    <Request>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Request>
    <Response>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Response>
  </PostFlow>
  ...
</TargetEndpoint>

يمكنك استخدام هذه العناصر لتحديد تنفيذ PreFlow وConditional Flow وPostFlow وPostClientFlow.

<Condition>

تحدد عبارة تتم معالجتها في وقت التشغيل. إذا تم تقييم العبارة على أنها صحيحة، يتم تنفيذ الخطوة أو التدفق المرتبط بالشرط. وإذا تم تقييم العبارة إلى false، يتم تجاهل الخطوة أو التدفق.

النوع سلسلة
العناصر الرئيسية <Flow>
<Step>
العناصر الفرعية لا ينطبق

يمكنك تطبيق شرط على خطوة محدّدة أو على مسار كامل، استنادًا إلى ما إذا كنت قد وضعت العنصر في <Flow> أو <Step>:

// Condition can apply to just one step:        // Or to the flow:
<Flows>                                         <Flows>
  <Flow>                                          <Flow>
    <Step>                                          <Condition>
      <Condition>                                   <Step>
      <Name>                                          <Name>
      ...                                             ...
    ...                                             ...
  ...                                             ...
</Flows>                                        </Flows>

إذا تم تقييم شرط ضمن <Step> على أنّه صحيح، سينفِّذ Edge هذه الخطوة. وإذا تم تقييم الحالة إلى "خطأ"، يتخطّى Edge الخطوة.

إذا تم تقييم شرط ضمن <Flow> على "صحيح"، يعالج Edge جميع الخطوات في التدفق. وإذا تم تقييم الحالة إلى "خطأ"، يتخطّى Edge التدفق بالكامل.

البنية

يستخدم العنصر <Condition> الصيغة التالية:

<Condition>property operator "value"</Condition>

المكان:

property
سمة متغيّر التدفق التي تريد استخدامها في شرطك على سبيل المثال، يحتوي متغيّر التدفق request على سمتَين باسم path وcontent. ولاستخدامها في شرط، عليك تحديد flow_variable[dot]property_name:
request.path
request.content

للحصول على قائمة كاملة بمتغيّرات التدفق وخصائصها، يُرجى الاطّلاع على مرجع متغيّرات التدفق.

operator
بنية تحدّد كيفية تقييم الشرط. وتتضمّن عوامل التشغيل الشائعة ما يلي:
>     greater than           <=    less than or equal to
<     less than              >=    greater than or equal to
=     equals                 &&    and
!=    not equals             ||    or

~~    JavaRegex
~     Matches
/~    MatchesPath

للحصول على قائمة كاملة، راجِع عوامل التشغيل في مرجع "الشروط".

"value"
القيمة التي يتم تقييم خاصية متغيّر التدفق وفقًا لها ويكون هذا عادةً نوعًا أساسيًا، مثل العدد الصحيح أو السلسلة. على سبيل المثال، 200 أو "/cat". ويمكن أن تشتمل القيمة على أحرف بدل، مثل العلامات النجمية والأحرف الأخرى لمطابقة الأنماط، كما هو موضح في مطابقة النمط مع عبارات شرطية.

مثال 1

يتحقّق المثال التالي مما إذا كانت سمة verb لمتغيّر مسار request هي "GET":

<!-- api-platform/reference/examples/flow-segments/condition-1.xml -->
<ProxyEndpoint name="default">
  <PreFlow name="my-preFlows">
    <Description>My first PreFlow</Description>
    <Request>
      <Step>
        <Condition>request.verb = "GET"</Condition>
        <Name>Log-Request-OK</Name>
      </Step>
    </Request>
  </PreFlow>
  ...
</ProxyEndpoint>

إذا كان الطلب هو "GET"، ينفّذ هذا المثال السياسة "Log-Request-OK".

مثال 2

يتحقق المثال التالي من رمز الاستجابة:

<!-- api-platform/reference/examples/flow-segments/condition-2.xml -->
<ProxyEndpoint name="default">
  <PreFlow name="my-preFlows">
    <Description>My first PreFlow</Description>
    <Response>
      <Step>
        <Condition>response.status.code LesserThanOrEquals 300</Condition>
        <Name>Log-Response-OK</Name>
      </Step>
      <Step>
        <Condition>response.status.code GreaterThan 300</Condition>
        <Name>Log-Response-NOT-OK</Name>
      </Step>
    </Response>
  </PreFlow>
  ...
</ProxyEndpoint>

استنادًا إلى قيمة الرمز البرمجي، يتم تنفيذ سياسة مختلفة.

السمات

لا يتضمّن العنصر <Condition> أيّ سمات.

العناصر الفرعية

لا يحتوي العنصر <Condition> على أي عناصر فرعية.

<Description>

يصف التدفق بمصطلحات يفهمها الإنسان. ويمكنك استخدام هذا العنصر لتقديم معلومات لك أو إلى مطوّري برامج آخرين حول سير عملية النقل. لا يظهر الوصف خارجيًا.

النوع سلسلة
العناصر الرئيسية <Flow>
<PreFlow>
<PostFlow>
العناصر الفرعية لا ينطبق

البنية

يستخدم العنصر <Description> الصيغة التالية:

<Description>flow_description</Description>

مثال

يوضح المثال التالي عنصر <Description> يحدد الغرض من التدفق:

<!-- api-platform/reference/examples/flow-segments/description-1.xml -->
<ProxyEndpoint name="default">
  <Flows name="my-conditional-flows">
    <Flow name="reports">
      <Request>
        <Description>Based on the path suffix, determine which flow to use</Description>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/reports"</Condition>
          <Name>XML-to-JSON-1</Name>
        </Step>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/forecasts"</Condition>
          <Name>XML-to-JSON-1</Name>
        </Step>
      </Request>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

السمات

لا يتضمّن العنصر <Description> أيّ سمات.

العناصر الفرعية

لا يحتوي العنصر <Description> على أي عناصر فرعية.

<Flow>

تحدد هذه السمة مجموعة مخصصة من الخطوات التي ينفّذها متصفّح Edge.

النوع عنصر معقد
العناصر الرئيسية <Flows>
العناصر الفرعية <Condition>
<Description>
<Request>
<Response>

يمكنك اختياريًا تحديد <Condition> في <Flow>. في هذه الحالة، ينفِّذ Edge فقط الخطوات في التدفق إذا تم تقييم الشرط إلى true. وبخلاف ذلك، يتخطّى Edge التدفق بالكامل.

يمكن أن يحتوي عنصر <Flows> على عدة عناصر <Flow>، لكل منها شرطها والخطوات الخاصة به. في حال توفُّر عدة عناصر <Flow>، ينفِّذ Edge العنصر الأول فقط الذي لا يتوفّر فيه شرط أو يتم تقييم الشرط إلى true.

يمكنك تعريف التدفق الافتراضي الذي يتم تنفيذه دائمًا (إذا لم يكن أي من التدفقات الشرطية الأخرى كذلك). وبناءً على كيفية ضبط الخادم الوكيل لواجهة برمجة التطبيقات، قد تكون هذه الأداة مفيدة في الحماية من الهجمات الضارة.

البنية

يستخدم العنصر <Flow> الصيغة التالية:

<Flow name="conditional_flow_name">
  <Description>flow_description</Description>
  <Condition>property operator "value"</Condition>
  <Request>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Request>
  <Response>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Response>
</Flow>

جميع العناصر الفرعية لـ <Flow> اختيارية.

مثال 1

يعرض المثال التالي عنصر <Flow> بسيط ينفِّذ دائمًا السياسة "Log-Message-OK" :

<!-- api-platform/reference/examples/flow-segments/flow-1.xml -->
<ProxyEndpoint name="default">
  <Flows name="my-flow">
    <Flow>
      <Request>
        <Step>
          <Name>Log-Message-OK</Name>
        </Step>
      </Request>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

مثال 2

يوضّح المثال التالي سمة <Flow> تتضمّن عدة خطوات، ولكل منها شرطها الخاص:

<!-- api-platform/reference/examples/flow-segments/flow-2.xml -->
<ProxyEndpoint name="default">
  <Flows name="my-conditional-flows">
    <Flow name="reports">
      <Request>
        <Description>Based on the path suffix, determine which flow to use</Description>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/reports"</Condition>
          <Name>XML-to-JSON-1</Name>
        </Step>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/forecasts"</Condition>
          <Name>Verify-Auth-1</Name>
        </Step>
      </Request>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

مثال 3

يوضح المثال التالي تدفقات متعددة في تدفق شرطي:

<!-- api-platform/reference/examples/flow-segments/flows-2.xml -->
<ProxyEndpoint name="default">
  <Flows>
    <Flow name="my-flow-1">
      <Response>
        <Step>
          <Condition>response.status.code = 200</Condition>
          <Name>Assign-Message-1</Name>
        </Step>
      </Response>
    </Flow>
    <Flow name="my-flow-2">
      <Response>
        <Step>
          <Condition>response.status.code >= 400</Condition>
          <Name>Assign-Message-2</Name>
        </Step>
      </Response>
    </Flow>
    <Flow name="my-flow-3">
      <Response>
        <Step>
          <Condition>response.status.code >= 300</Condition>
          <Name>Assign-Message-3</Name>
        </Step>
      </Response>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

تنفِّذ Edge تدفقًا واحدًا فقط في القطاع، وتنفِّذ التدفق الأول الذي لا يحتوي على شرط، أو يتم ضبط حالته إلى true.

السمات

يوضّح الجدول التالي سمات العنصر <Flow>:

السمة Type الوصف
name سلسلة (مطلوب) معرّف فريد للتدفق. على سبيل المثال، "My-Conditional-Flow-1". لا يمكن أن يحتوي الاسم على مسافات أو رموز خاصة أخرى.

العناصر الفرعية

يوضِّح الجدول التالي العناصر الفرعية لـ <Flow>:

عنصر فرعي Type الوصف
<Condition> سلسلة تحدد عبارة شرطية تتم معالجتها في وقت التشغيل. إذا تم تقييم العبارة على أنها صحيحة، يتم تنفيذ التدفق (وجميع خطواته). وإذا تم تقييم العبارة إلى false، يتم تجاهل التدفق (وجميع خطواتها).
<Description> سلسلة يقدم وصفًا موجزًا للتدفق. ولا يظهر هذا الوصف خارجيًا.
<Request> عنصر معقد تُحدِّد الخطوات والشروط لشريحة الطلب.
<Response> عنصر معقد تُحدِّد الخطوات والشروط الخاصة بشريحة الردّ.

<Flows>

لا يحتوي على أي عناصر أو أكثر من عناصر <Flow>.

النوع عنصر معقد
العناصر الرئيسية <ProxyEndpoint>
<TargetEndpoint>
العناصر الفرعية <Flow>

وفي حال توفُّر عناصر <Flow> متعدّدة في <Flows>، سيتم تنفيذ <Flow> واحد فقط. سيكون هذا هو المسار الأول الذي لا يحتوي على <Condition>، أو يتم ضبط حالته إلى true.

ويمكنك تحديد تدفق افتراضي يتم تنفيذه دائمًا (إذا لم يتم تنفيذ أي من التدفقات الأخرى). وبناءً على كيفية ضبط الخادم الوكيل لواجهة برمجة التطبيقات، قد تكون هذه الأداة مفيدة في الحماية من الهجمات الضارة.

البنية

يستخدم العنصر <Flows> الصيغة التالية:

<Flows name="flow_name">
  <Flow name="conditional_flow_name">
    <Description>flow_description</Description>
    <Condition>property operator "value"</Condition>
    <Request>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Request>
    <Response>
      <Step>
        <Condition>property operator "value"</Condition>
        <Name>policy_name</Name>
      </Step>
      ...
    </Response>
  </Flow>
</Flows>

جميع العناصر الفرعية لـ <Flows> اختيارية.

مثال 1

يعرض المثال التالي عنصر <Flows> بسيط مع عنصر <Flow> واحد:

<!-- api-platform/reference/examples/flow-segments/flows-1.xml -->
<ProxyEndpoint name="default">
  <Flows name="my-conditional-flows">
    <Flow name="reports">
      <Request>
        <Description>Based on the path suffix, determine which flow to use</Description>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/reports"</Condition>
          <Name>XML-to-JSON-1</Name>
        </Step>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/forecasts"</Condition>
          <Name>Verify-Auth-1</Name>
        </Step>
      </Request>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

تنفِّذ Edge إحدى هذه السياسات استنادًا إلى لاحقة المسار التي تجمعها من متغيّر التدفق proxy. إذا لم تتطابق لاحقة المسار مع أي من الشروط، لن تنفّذ Edge هذا التدفق.

مثال 2

يعرض المثال التالي عدة عناصر <Flow> ضمن <Flows>، ولكل منها سمة <Condition> خاصة بها:

<!-- api-platform/reference/examples/flow-segments/flows-2.xml -->
<ProxyEndpoint name="default">
  <Flows>
    <Flow name="my-flow-1">
      <Response>
        <Step>
          <Condition>response.status.code = 200</Condition>
          <Name>Assign-Message-1</Name>
        </Step>
      </Response>
    </Flow>
    <Flow name="my-flow-2">
      <Response>
        <Step>
          <Condition>response.status.code >= 400</Condition>
          <Name>Assign-Message-2</Name>
        </Step>
      </Response>
    </Flow>
    <Flow name="my-flow-3">
      <Response>
        <Step>
          <Condition>response.status.code >= 300</Condition>
          <Name>Assign-Message-3</Name>
        </Step>
      </Response>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

تنفذ Edge التدفق الأول فقط في الجزء الذي يتم تقييم حالته إلى true. وبعد ذلك، يتخطّى Edge التدفقات المتبقية في المقطع.

مثال 3

يعرض المثال التالي <Flow> "تلقائي":

<!-- api-platform/reference/examples/flow-segments/flows-3.xml -->
<ProxyEndpoint name="default">
  <Flows>
    <Flow name="my-conditional-flow-1">
      <Response>
        <Step>
          <Condition>response.status.code = 200</Condition>
          <Name>Assign-Message-1</Name>
        </Step>
      </Response>
    </Flow>
    <Flow name="my-conditional-flow-2">
      <Response>
        <Step>
          <Condition>response.header.someheader = "42"</Condition>
          <Name>Assign-Message-2</Name>
        </Step>
      </Response>
    </Flow>
    <Flow name="my-default-flow">
      <Response>
        <Step>
          <Name>Assign-Message-3</Name>
        </Step>
      </Response>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

تنفذ Edge التدفق الأول فقط في الجزء الذي يتم تقييم حالته إلى true. إذا لم يتم تنفيذ أي تدفقات شرطية، سيتم تنفيذ المسار الثالث في هذا المثال (بدون شرط).

يمكن أن يكون التدفق التلقائي أداة مفيدة في الحماية من الهجمات الضارة.

السمات

لا يتضمّن العنصر <Flows> أيّ سمات.

العناصر الفرعية

يضم العنصر <Flows> العناصر الثانوية التالية:

عنصر فرعي Type الوصف
<Flow> عنصر معقد يشير ذلك المصطلح إلى تدفق يحدِّد مجموعة واحدة محتملة من الخطوات ضمن التدفق المشروط.

<Name>

تُحدِّد هذه السياسة رقم تعريف السياسة المطلوب تنفيذها داخل <Flow>.

النوع سلسلة
العناصر الرئيسية <Step>
العناصر الفرعية لا ينطبق

البنية

يستخدم العنصر <Name> الصيغة التالية:

<Name>policy_name</Name>

مثال

يوضح المثال التالي سياستين تمت إضافتهما إلى التدفقات حسب اسمهما:

<!-- api-platform/reference/examples/flow-segments/name-1.xml -->
<ProxyEndpoint name="default">
  <Flows name="my-conditional-flows">
    <Flow name="reports">
      <Request>
        <Description>Based on the path suffix, determine which flow to use</Description>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/reports"</Condition>
          <Name>XML-to-JSON-1</Name>
        </Step>
        <Step>
          <Condition>proxy.pathsuffix MatchesPath "/forecasts"</Condition>
          <Name>Verify-Auth-1</Name>
        </Step>
      </Request>
    </Flow>
  </Flows>
  ...
</ProxyEndpoint>

السمات

لا يتضمّن العنصر <Name> أيّ سمات.

العناصر الفرعية

لا يحتوي العنصر <Name> على أي عناصر فرعية.

<PostFlow>

تحدِّد الخطوات التي يجب اتخاذها في PostFlow للطلب والاستجابة.

النوع عنصر معقد
العناصر الرئيسية <ProxyEndpoint>
<TargetEndpoint>
العناصر الفرعية <Description>
<Request>
<Response>

يستخدم العنصر <PostFlow> الصيغة التالية:

البنية

<PostFlow name="flow_name">
  <Description>flow_description</Description>
  <Request>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Request>
  <Response>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Response>
</PostFlow>

مثال

يوضّح المثال التالي نموذج PostFlow مع خطوات تحديد كل من الطلب والاستجابة:

<!-- api-platform/reference/examples/flow-segments/postflow-1.xml -->
<ProxyEndpoint name="default">
  <PostFlow name="my-postflows">
    <Description>My first PostFlow</Description>
    <Request>
      <Step>
        <Condition>request.verb = "GET"</Condition>
        <Name>Log-Request-OK</Name>
      </Step>
    </Request>
    <Response>
      <Step>
        <Name>Set-Response-Headers</Name>
      </Step>
    </Response>
  </PostFlow>
  ...
</ProxyEndpoint>

السمات

يوضّح الجدول التالي سمات العنصر <PostFlow>:

السمة Type الوصف
name سلسلة معرّف فريد للتدفق (فريد ضمن نقطة النهاية). على سبيل المثال، "My-PostFlow-1". ولا يمكن أن تشتمل القيمة على مسافات أو رموز خاصة أخرى.

العناصر الفرعية

يوضِّح الجدول التالي العناصر الفرعية لـ <PostFlow>:

عنصر فرعي Type الوصف
<Description> سلسلة يقدم وصفًا موجزًا للتدفق.
<Request> عنصر معقد تُحدِّد السياسات التي سيتم تنفيذها أثناء عملية PostFlow للطلب.
<Response> عنصر معقد تحدِّد السياسات التي سيتم تنفيذها أثناء عملية PostFlow الخاصة بالردّ.

<PostClientFlow>

تحدِّد هذه السياسة السياسات في ProxyEndpoint والتي لا يتم تنفيذها إلا بعد إرجاع ردّ إلى العميل. تسجّل هذه السياسات عادةً الرسائل ذات الصلة بالردّ.

النوع عنصر معقد
العناصر الرئيسية <ProxyEndpoint>
العناصر الفرعية <Description>
<Response>

البنية

يستخدم العنصر <PostClientFlow> الصيغة التالية:

<PostClientFlow name="flow_name">
  <Description>flow_description</Description>
  <Response>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Response>
</PostClientFlow>

جميع العناصر الفرعية لـ <PostClientFlow> اختيارية.

مثال

يوضّح المثال التالي عنصر PostClientFlow البسيط الذي ينفِّذ سياسة واحدة:

<!-- api-platform/reference/examples/flow-segments/postclientflow-1.xml -->
<ProxyEndpoint name="default">
  <PostClientFlow name="my-postclientflows">
    <Description>My first PostClientFlow. Processed after the response is sent back to the client.</Description>
    <Response>
      <Step>
        <Name>Message-Logging-OK</Name>
      </Step>
    </Response>
  </PostClientFlow>
  ...
</ProxyEndpoint>

السمات

يوضّح الجدول التالي سمات العنصر <PostClientFlow>:

السمة Type الوصف
name سلسلة معرّف فريد للتدفق. ولا يمكن أن يحتوي الاسم على مسافات أو رموز خاصة أخرى. على سبيل المثال، "My-PostClientFlow-1".

العناصر الفرعية

يوضِّح الجدول التالي العناصر الفرعية لـ <PostClientFlow>:

عنصر فرعي Type الوصف
<Description> سلسلة يقدم وصفًا موجزًا للتدفق.
<Response> عنصر معقد تحدِّد السياسات التي سيتم تنفيذها أثناء عملية PostFlow الخاصة بالردّ.

<PreFlow>

تُحدِّد السياسات التي سيتم تنفيذها في الإعداد المسبق للطلب والاستجابة.

النوع عنصر معقد
العناصر الرئيسية <ProxyEndpoint>
<TargetEndpoint>
العناصر الفرعية <Description>
<Request>
<Response>

البنية

يستخدم العنصر <PreFlow> الصيغة التالية:

<PreFlow name="flow_name">
  <Description>flow_description</Description>
  <Request>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Request>
  <Response>
    <Step>
      <Condition>property operator "value"</Condition>
      <Name>policy_name</Name>
    </Step>
    ...
  </Response>
</PreFlow>

جميع العناصر الفرعية لـ <PreFlow> اختيارية.

مثال

يوضّح المثال التالي تدفقًا مُسبقًا يحتوي على طلب وعملية استجابة محدَّدة:

<!-- api-platform/reference/examples/flow-segments/preflow-1.xml -->
<ProxyEndpoint name="default">
  <PreFlow name="my-preFlows">
    <Description>My first PreFlow</Description>
    <Request>
      <Step>
        <Condition>request.verb = "GET"</Condition>
        <Name>Log-Request-OK</Name>
      </Step>
    </Request>
    <Response>
      <Step>
        <Condition>response.status.code LesserThanOrEquals 300</Condition>
        <Name>Log-Response-OK</Name>
      </Step>
      <Step>
        <Condition>response.status.code GreaterThan 300</Condition>
        <Name>Log-Response-NOT-OK</Name>
      </Step>
    </Response>
  </PreFlow>
  ...
</ProxyEndpoint>

السمات

يوضّح الجدول التالي سمات العنصر <PreFlow>:

السمة Type الوصف
name سلسلة معرّف فريد للتدفق. ولا يمكن أن يحتوي الاسم على مسافات أو رموز خاصة أخرى. على سبيل المثال، "My-PreFlow-1".

العناصر الفرعية

يوضِّح الجدول التالي العناصر الفرعية لـ <PreFlow>:

عنصر فرعي Type الوصف
<Description> سلسلة يقدم وصفًا موجزًا للتدفق.
<Request> عنصر معقد تُحدِّد السياسات التي سيتم تنفيذها أثناء الإعداد المسبق للطلب.
<Response> عنصر معقد تحدّد السياسات التي سيتم تنفيذها أثناء الإعداد المسبق للاستجابة.

<Request>

تُحدِّد السياسات المطلوب تنفيذها أثناء مقطع الطلب من التدفق.

النوع عنصر معقد
العناصر الرئيسية <Flow>
<PreFlow>
<PostFlow>
العناصر الفرعية <Condition>
<Step>

البنية

يستخدم العنصر <Request> الصيغة التالية:

<Request>
  <Step>
    <Condition>property operator "value"</Condition>
    <Name>policy_name</Name>
  </Step>
  ...
</Request>

جميع العناصر الفرعية لـ <Request> اختيارية.

مثال

يوضّح المثال التالي التدفقات المحدّدة للطلب في كل من جدولَي PreFlow وPostFlow:

<!-- api-platform/reference/examples/flow-segments/request-1.xml -->
<ProxyEndpoint name="default">
  <PreFlow name="my-preFlows">
    <Description>My first PreFlow</Description>
    <Request>
      <Step>
        <Condition>request.verb = "GET"</Condition>
        <Name>Log-Request-OK</Name>
      </Step>
    </Request>
  </PreFlow>
  <PostFlow name="my-postflows">
    <Description>My first PostFlow</Description>
    <Request>
      <Step>
        <Condition>request.verb = "GET"</Condition>
        <Name>Log-Request-OK</Name>
      </Step>
    </Request>
  </PostFlow>
  ...
</ProxyEndpoint>

السمات

لا يتضمّن العنصر <Request> أيّ سمات.

العناصر الفرعية

يوضِّح الجدول التالي العناصر الفرعية لـ <Request>:

عنصر فرعي Type الوصف
<Condition> عنصر معقد تحدِّد ما إذا كان قد تم تنفيذ الخطوات ضمن مقطع الطلب أم لا.
<Step> سلسلة تحدد سياسة لتنفيذها داخل مقطع الطلب.

<Response>

تحدِّد السياسات المطلوب تنفيذها أثناء جزء الاستجابة من التدفق.

النوع عنصر معقد
العناصر الرئيسية <Flow>
<PreFlow>
<PostClientFlow>
<PostFlow>
العناصر الفرعية <Condition>
<Step>

البنية

يستخدم العنصر <Response> الصيغة التالية:

<Response>
  <Step>
    <Condition>property operator "value"</Condition>
    <Name>policy_name</Name>
  </Step>
  ...
</Response>

جميع العناصر الفرعية لـ <Response> اختيارية.

مثال

يوضّح المثال التالي مسارات محدّدة للاستجابة في كلٍّ من PreFlow وPostFlow:

<!-- api-platform/reference/examples/flow-segments/response-1.xml -->
<ProxyEndpoint name="default">
    <PreFlow name="my-preFlows">
        <Description>My first PreFlow</Description>
        <Response>
            <Step>
                <Condition>response.status.code LesserThanOrEquals 300</Condition>
                <Name>Log-Response-OK</Name>
            </Step>
            <Step>
                <Condition>response.status.code GreaterThan 300</Condition>
                <Name>Log-Response-NOT-OK</Name>
            </Step>
        </Response>
    </PreFlow>
    <PostFlow name="my-postflows">
        <Description>My first PostFlow</Description>
        <Response>
            <Step>
                <Name>Set-Response-Headers</Name>
            </Step>
        </Response>
    </PostFlow>
  ...
</ProxyEndpoint>

السمات

لا يتضمّن العنصر <Response> أيّ سمات.

العناصر الفرعية

يوضِّح الجدول التالي العناصر الفرعية لـ <Response>:

عنصر فرعي Type الوصف
<Condition> سلسلة تحدِّد هذه السمة ما إذا كانت الخطوات ضمن مقطع الاستجابة قد تم تنفيذها.
<Step> سلسلة تحدِّد هذه السياسة سياسة يتم تنفيذها ضمن مقطع الاستجابة.

<Step>

تحدِّد هذه السياسة سياسة لتنفيذها و (اختياريًا) شرط يحدّد ما إذا كان سيتم تنفيذ هذه السياسة أم لا.

النوع عنصر معقد
العناصر الرئيسية <Request>
<Response>
العناصر الفرعية <Condition>
<Name>

يمكن أن يتم تحديد أكثر من خطوة في <Flow>، ويتم تنفيذ الخطوات بالترتيب الذي تم تحديدها به في ملف XML الخاص بالتدفق.

يتم دائمًا تنفيذ الخطوات بدون شرط. يتم تنفيذ الخطوات التي تتضمّن شرطًا فقط إذا تم تقييم الشرط إلى true. إذا تم تقييم الحالة إلى false، سيتخطى Edge الخطوة.

البنية

يستخدم العنصر <Step> الصيغة التالية:

<Step>
  <Condition>property operator "value"</Condition>
  <Name>policy_name</Name>
</Step>

ويمكن إدراج <Condition> و<Name> واحد فقط لكل <Step>، ولكن يمكن أن يتضمّن <Flow> عدة خطوات.

جميع العناصر الفرعية لـ <Step> اختيارية.

مثال 1

يوضّح المثال التالي خطوة واحدة تتضمّن شرطًا وخطوة أخرى بدون شرط:

<!-- api-platform/reference/examples/flow-segments/step-1.xml -->
<ProxyEndpoint name="default">
  <PostFlow name="my-postflows">
      <Description>My first PostFlow</Description>
      <Request>
          <Step>
              <Condition>request.verb = "GET"</Condition>
              <Name>Log-Request-OK</Name>
          </Step>
      </Request>
      <Response>
          <Step>
              <Name>Set-Response-Headers</Name>
          </Step>
      </Response>
  </PostFlow>
  ...
</ProxyEndpoint>

سيتم تنفيذ الخطوة بدون الشرط في كل مرة أثناء شريحة الطلب. سيتم تنفيذ الخطوة التي تتضمّن شرطًا فقط عندما يكون الطلب هو "GET" أثناء جزء الاستجابة.

مثال 2

يوضِّح المثال التالي خطوات متعدّدة في شريحة واحدة:

<!-- api-platform/reference/examples/flow-segments/step-2.xml -->
<ProxyEndpoint name="default">
    <PostFlow name="PostFlow">
        <Response>
            <Step>
                <Name>Assign-Message-1</Name>
            </Step>
            <Step>
                <Name>Assign-Message-2</Name>
            </Step>
        </Response>
    </PostFlow>
  ...
</ProxyEndpoint>

يتم دائمًا تنفيذ الخطوات بدون شرط.

السمات

لا يتضمّن العنصر <Step> أيّ سمات.

العناصر الفرعية

يوضِّح الجدول التالي العناصر الفرعية لـ <Step>:

عنصر فرعي Type الوصف
<Condition> سلسلة تحدد عبارة شرطية للخطوة التي تتم معالجتها في وقت التشغيل. وإذا تم تقييم العبارة إلى "صحيح"، ينفِّذ Edge الخطوة. وإذا تم تقييم العبارة إلى "خطأ"، سيتخطى Edge الخطوة.
<Name> سلسلة تُحدِّد رقم تعريف السياسة المطلوب تنفيذها في التدفق الحالي.