مرجع پیکربندی جریان

شما در حال مشاهده مستندات Apigee Edge هستید.
به مستندات Apigee X مراجعه کنید .
اطلاعات

این بخش اطلاعات مرجعی در مورد عناصر XML که برای تعریف جریان‌های پروکسی API خود استفاده می‌کنید، ارائه می‌دهد.

سلسله مراتب و نحو

مثال‌های زیر سلسله مراتب عناصر و نحو عناصر پیکربندی جریان را نشان می‌دهند:

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

مثال زیر سلسله مراتب عناصر پیکربندی جریان را در عناصر <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>

دستوری را تعریف می‌کند که در زمان اجرا پردازش می‌شود. اگر نتیجه‌ی دستور درست باشد، مرحله یا جریان مربوط به شرط اجرا می‌شود. اگر نتیجه‌ی دستور نادرست باشد، مرحله یا جریان نادیده گرفته می‌شود.

نوع رشته
عنصر(های) والد <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 است. برای استفاده از آنها در یک شرط، باید property_name flow_variable [نقطه] را مشخص کنید:
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". این مقدار می‌تواند شامل کاراکترهای جایگزین، مانند ستاره‌ها و سایر کاراکترها برای تطبیق الگو باشد، همانطور که در تطبیق الگو با شرط‌ها توضیح داده شده است.

مثال ۱

مثال زیر بررسی می‌کند که آیا ویژگی 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" را اجرا می‌کند.

مثال ۲

مثال زیر کد پاسخ را بررسی می‌کند:

<!-- 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> هیچ ویژگی (attribute) ندارد.

عناصر فرزند

عنصر <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> هیچ ویژگی (attribute) ندارد.

عناصر فرزند

عنصر <Description> هیچ عنصر فرزندی ندارد.

<Flow>

مجموعه‌ای از مراحل سفارشی را تعریف می‌کند که Edge اجرا می‌کند.

نوع شیء پیچیده
عنصر(های) والد <Flows>
عنصر(های) فرزند <Condition>
<Description>
<Request>
<Response>

شما می‌توانید به صورت اختیاری یک <Condition> روی <Flow> تعیین کنید. در این صورت، Edge فقط مراحل جریان را در صورتی اجرا می‌کند که شرط درست باشد. در غیر این صورت، Edge کل جریان را نادیده می‌گیرد.

یک عنصر <Flows> می‌تواند شامل چندین عنصر <Flow> باشد که هر کدام شرط و مراحل خاص خود را دارند. وقتی چندین عنصر <Flow> وجود داشته باشد، Edge فقط اولین موردی را که در آن هیچ شرطی وجود ندارد یا شرط آن درست است، اجرا می‌کند.

شما می‌توانید یک جریان پیش‌فرض تعریف کنید که همیشه اجرا شود (اگر هیچ یک از جریان‌های شرطی دیگر اجرا نشوند). بسته به نحوه پیکربندی پروکسی API شما، این می‌تواند ابزاری مفید برای محافظت در برابر حملات مخرب باشد.

نحو

عنصر <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> اختیاری هستند.

مثال ۱

مثال زیر یک <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>

مثال ۲

مثال زیر یک <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>

مثال ۳

مثال زیر چندین جریان را در یک جریان شرطی نشان می‌دهد:

<!-- 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 فقط یک جریان را در یک بخش اجرا می‌کند؛ اولین جریانی را اجرا می‌کند که شرطی ندارد، یا شرط آن به درست ختم می‌شود.

ویژگی‌ها

جدول زیر ویژگی‌های عنصر <Flow> را شرح می‌دهد:

ویژگی نوع توضیحات
name رشته (الزامی) یک شناسه منحصر به فرد برای جریان. به عنوان مثال، "My-Conditional-Flow-1". این نام نمی‌تواند شامل فاصله یا سایر کاراکترهای خاص باشد.

عناصر فرزند

جدول زیر عناصر فرزند <Flow> را شرح می‌دهد:

عنصر فرزند نوع توضیحات
<Condition> رشته یک دستور شرطی تعریف می‌کند که در زمان اجرا پردازش می‌شود. اگر نتیجه‌ی دستور درست باشد، جریان (و تمام مراحل آن) اجرا می‌شود. اگر نتیجه‌ی دستور نادرست باشد، جریان (و تمام مراحل آن) نادیده گرفته می‌شود.
<Description> رشته شرح مختصری از جریان ارائه می‌دهد. این شرح از بیرون قابل مشاهده نیست.
<Request> شیء پیچیده مراحل و شرایط مربوط به بخش درخواست را مشخص می‌کند.
<Response> شیء پیچیده مراحل و شرایط مربوط به بخش پاسخ را مشخص می‌کند.

<Flows>

شامل صفر یا چند عنصر <Flow> است.

نوع شیء پیچیده
عنصر(های) والد <ProxyEndpoint>
<TargetEndpoint>
عنصر(های) فرزند <Flow>

اگر چندین عنصر <Flow> درون <Flows> وجود داشته باشد، فقط یکی از <Flow> اجرا خواهد شد. این اولین جریانی خواهد بود که یا <Condition> ندارد، یا شرط آن به true برمی‌گردد.

شما می‌توانید یک جریان پیش‌فرض تعریف کنید که همیشه اجرا شود (اگر هیچ یک از جریان‌های دیگر اجرا نشوند). بسته به نحوه پیکربندی پروکسی API شما، این می‌تواند ابزاری مفید برای محافظت در برابر حملات مخرب باشد.

نحو

عنصر <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> اختیاری هستند.

مثال ۱

مثال زیر یک عنصر <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 این جریان را اجرا نمی‌کند.

مثال ۲

مثال زیر چندین عنصر <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 فقط اولین جریان را در یک قطعه که شرط آن درست باشد اجرا می‌کند. پس از آن، Edge از جریان‌های باقی‌مانده در قطعه صرف‌نظر می‌کند.

مثال ۳

مثال زیر یک <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 فقط اولین جریان را در بخشی که شرط آن درست باشد اجرا می‌کند. اگر هیچ جریان شرطی اجرا نشود، جریان سوم در این مثال (بدون شرط) اجرا می‌شود.

یک جریان پیش‌فرض می‌تواند ابزاری مفید برای محافظت در برابر حملات مخرب باشد.

ویژگی‌ها

عنصر <Flows> هیچ ویژگی (attribute) ندارد.

عناصر فرزند

عنصر <Flows> دارای عناصر فرزند زیر است:

عنصر فرزند نوع توضیحات
<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> هیچ ویژگی (attribute) ندارد.

عناصر فرزند

عنصر <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> را شرح می‌دهد:

ویژگی نوع توضیحات
name رشته یک شناسه منحصر به فرد برای جریان (منحصراً در نقطه پایانی). به عنوان مثال، "My-PostFlow-1". این مقدار نمی‌تواند شامل فاصله یا سایر کاراکترهای خاص باشد.

عناصر فرزند

جدول زیر عناصر فرزند <PostFlow> را شرح می‌دهد:

عنصر فرزند نوع توضیحات
<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> را شرح می‌دهد:

ویژگی نوع توضیحات
name رشته یک شناسه منحصر به فرد برای جریان. نام نمی‌تواند شامل فاصله یا سایر کاراکترهای خاص باشد. به عنوان مثال، "My-PostClientFlow-1".

عناصر فرزند

جدول زیر عناصر فرزند <PostClientFlow> را شرح می‌دهد:

عنصر فرزند نوع توضیحات
<Description> رشته شرح مختصری از جریان ارائه می‌دهد.
<Response> شیء پیچیده سیاست‌هایی را که باید در طول PostFlow پاسخ اجرا شوند، تعریف می‌کند.

<PreFlow>

سیاست‌هایی را که باید در 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> اختیاری هستند.

مثال

مثال زیر یک 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> را شرح می‌دهد:

ویژگی نوع توضیحات
name رشته یک شناسه منحصر به فرد برای جریان. نام نمی‌تواند شامل فاصله یا سایر کاراکترهای خاص باشد. به عنوان مثال، "My-PreFlow-1".

عناصر فرزند

جدول زیر عناصر فرزند <PreFlow> را شرح می‌دهد:

عنصر فرزند نوع توضیحات
<Description> رشته شرح مختصری از جریان ارائه می‌دهد.
<Request> شیء پیچیده سیاست‌هایی را که باید در طول PreFlow درخواست اجرا شوند، تعریف می‌کند.
<Response> شیء پیچیده سیاست‌هایی را که باید در طول PreFlow پاسخ اجرا شوند، تعریف می‌کند.

<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> هیچ ویژگی (attribute) ندارد.

عناصر فرزند

جدول زیر عناصر فرزند <Request> را شرح می‌دهد:

عنصر فرزند نوع توضیحات
<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> هیچ ویژگی (attribute) ندارد.

عناصر فرزند

جدول زیر عناصر فرزند <Response> را شرح می‌دهد:

عنصر فرزند نوع توضیحات
<Condition> رشته تعیین می‌کند که آیا مراحل درون بخش پاسخ اجرا شده‌اند یا خیر.
<Step> رشته سیاستی را برای اجرا در بخش پاسخ مشخص می‌کند.

<Step>

سیاستی را برای اجرا مشخص می‌کند و (به صورت اختیاری) شرطی را تعیین می‌کند که تعیین می‌کند آیا آن سیاست اجرا شود یا خیر.

نوع شیء پیچیده
عنصر(های) والد <Request>
<Response>
عنصر(های) فرزند <Condition>
<Name>

می‌تواند بیش از یک مرحله در یک <Flow> تعریف شود و مراحل به ترتیبی که در XML جریان تعریف شده‌اند، اجرا می‌شوند.

مراحل بدون شرط همیشه اجرا می‌شوند. مراحل دارای شرط فقط در صورتی اجرا می‌شوند که شرط درست باشد. اگر شرط نادرست باشد، Edge از آن مرحله صرف نظر می‌کند.

نحو

عنصر <Step> از سینتکس زیر استفاده می‌کند:

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

در هر <Step> فقط یک <Condition> و یک <Name> می‌تواند وجود داشته باشد، اما در <Flow> می‌تواند چندین مرحله وجود داشته باشد.

تمام عناصر فرزند <Step> اختیاری هستند.

مثال ۱

مثال زیر یک مرحله با شرط و یک مرحله بدون شرط را نشان می‌دهد:

<!-- 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" باشد.

مثال ۲

مثال زیر چندین مرحله را در یک بخش واحد نشان می‌دهد:

<!-- 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> هیچ ویژگی (attribute) ندارد.

عناصر فرزند

جدول زیر عناصر فرزند <Step> را شرح می‌دهد:

عنصر فرزند نوع توضیحات
<Condition> رشته یک دستور شرطی برای مرحله‌ای که در زمان اجرا پردازش می‌شود، تعریف می‌کند. اگر دستور به درست (true) ارزیابی شود، Edge مرحله را اجرا می‌کند. اگر دستور به نادرست (false) ارزیابی شود، Edge از مرحله صرف نظر می‌کند.
<Name> رشته شناسه سیاستی را که باید در جریان فعلی اجرا شود، مشخص می‌کند.