การอ้างอิงการกำหนดค่าโฟลว์

คุณกำลังดูเอกสารประกอบ 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, Flowal 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[จุด]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>

การบังคับใช้นโยบายอื่นจะขึ้นอยู่กับค่าของโค้ด

Attributes

องค์ประกอบ <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>

Attributes

องค์ประกอบ <Description> ไม่มีแอตทริบิวต์

องค์ประกอบย่อย

องค์ประกอบ <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> เป็นค่าที่ไม่บังคับ

ตัวอย่างที่ 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 ประมวลผลเพียง 1 ขั้นตอนในกลุ่ม โมเดลดังกล่าวจะประมวลผลขั้นตอนแรกที่ไม่มี เงื่อนไข หรือเงื่อนไขที่แก้ไขเป็น "จริง"

Attributes

ตารางต่อไปนี้อธิบายแอตทริบิวต์ขององค์ประกอบ <Flow>

แอตทริบิวต์ ประเภท คำอธิบาย
name สตริง (ต้องระบุ) รหัสที่ไม่ซ้ำกันสำหรับขั้นตอน ตัวอย่างเช่น &quot;My-Conditional-Flow-1&quot;. ชื่อต้องไม่มีการเว้นวรรคหรือสัญลักษณ์พิเศษอื่นๆ

องค์ประกอบย่อย

ตารางต่อไปนี้อธิบายองค์ประกอบย่อยของ <Flow>

องค์ประกอบย่อย ประเภท คำอธิบาย
<Condition> สตริง กำหนดคำสั่งแบบมีเงื่อนไขที่ประมวลผลขณะรันไทม์ หากข้อความประเมิน เป็นจริง จะมีการดำเนินการโฟลว์ (และขั้นตอนทั้งหมด) หากข้อความประเมินเป็น เท็จ ระบบจะไม่สนใจโฟลว์ (และขั้นตอนทั้งหมด)
<Description> สตริง ให้คำอธิบายสั้นๆ เกี่ยวกับขั้นตอน คำอธิบายนี้ไม่สามารถใช้ได้ภายนอก มองเห็นได้
<Request> วัตถุที่ซับซ้อน ระบุขั้นตอนและเงื่อนไขสำหรับกลุ่มคำขอ
<Response> ออบเจ็กต์ที่ซับซ้อน ระบุขั้นตอนและเงื่อนไขสำหรับกลุ่มการตอบกลับ

<Flows>

ไม่มีองค์ประกอบ <Flow> อย่างน้อย 1 รายการ

ประเภท ออบเจ็กต์ที่ซับซ้อน
องค์ประกอบหลัก <ProxyEndpoint>
<TargetEndpoint>
องค์ประกอบย่อย <Flow>

หากมีองค์ประกอบ <Flow> หลายรายการภายใน <Flows> ระบบจะเรียกใช้ <Flow> เพียงรายการเดียว ช่วงเวลานี้ จะเป็นขั้นตอนแรกที่ไม่มี <Condition> หรือที่มีเงื่อนไขที่แก้ไขแล้ว เป็นจริง

คุณกำหนดขั้นตอนเริ่มต้นที่จะทำงานทุกครั้งได้ (ถ้าไม่มีขั้นตอนอื่นทำงาน) สิ่งนี้อาจเป็นเครื่องมือที่มีประโยชน์ ทั้งนี้ขึ้นอยู่กับการกำหนดค่าพร็อกซี 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> เป็นค่าที่ไม่บังคับ

ตัวอย่างที่ 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 จะดำเนินการเฉพาะขั้นตอนแรกในกลุ่มซึ่งมีเงื่อนไขที่ประเมินว่าเป็นจริง หลัง 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 จะดำเนินการเฉพาะขั้นตอนแรกในกลุ่มซึ่งมีเงื่อนไขที่ประเมินว่าเป็นจริง ถ้า ไม่มีการดำเนินการแบบมีเงื่อนไข ขั้นตอนที่ 3 ในตัวอย่างนี้ (ไม่มีเงื่อนไข) ในการดำเนินการ

ขั้นตอนเริ่มต้นเป็นเครื่องมือที่มีประโยชน์ใน การป้องกันสิ่งที่เป็นอันตราย การโจมตี

Attributes

องค์ประกอบ <Flows> ไม่มีแอตทริบิวต์

องค์ประกอบย่อย

องค์ประกอบ <Flows> มีองค์ประกอบย่อยต่อไปนี้

องค์ประกอบย่อย ประเภท คำอธิบาย
<Flow> ออบเจ็กต์ที่ซับซ้อน โฟลว์ที่กำหนดชุดขั้นตอนที่เป็นไปได้ภายในโฟลว์แบบมีเงื่อนไข

<Name>

ระบุรหัสของนโยบายที่จะดำเนินการภายใน <Flow>

ประเภท สตริง
องค์ประกอบหลัก <Step>
องค์ประกอบย่อย ไม่มี

ไวยากรณ์

องค์ประกอบ <Name> ใช้ไวยากรณ์ต่อไปนี้

<Name>policy_name</Name>

ตัวอย่าง

ตัวอย่างต่อไปนี้แสดงนโยบาย 2 รายการที่เพิ่มลงในขั้นตอนตามชื่อ

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

Attributes

องค์ประกอบ <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>

Attributes

ตารางต่อไปนี้อธิบายแอตทริบิวต์ขององค์ประกอบ <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>

Attributes

ตารางต่อไปนี้อธิบายแอตทริบิวต์ขององค์ประกอบ <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>

Attributes

ตารางต่อไปนี้อธิบายแอตทริบิวต์ขององค์ประกอบ <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>

Attributes

องค์ประกอบ <Request> ไม่มีแอตทริบิวต์

องค์ประกอบย่อย

ตารางต่อไปนี้อธิบายองค์ประกอบย่อยของ <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>

Attributes

องค์ประกอบ <Response> ไม่มีแอตทริบิวต์

องค์ประกอบย่อย

ตารางต่อไปนี้อธิบายองค์ประกอบย่อยของ <Response>

องค์ประกอบย่อย ประเภท คำอธิบาย
<Condition> สตริง ระบุว่ามีการดำเนินการตามขั้นตอนภายในกลุ่มคำตอบหรือไม่
<Step> สตริง ระบุนโยบายที่จะดำเนินการภายในกลุ่มการตอบกลับ

<Step>

ระบุนโยบายที่จะดำเนินการและ (ไม่บังคับ) เงื่อนไขที่กำหนดว่าจะดำเนินการหรือไม่ นโยบายนั้น

ประเภท ออบเจ็กต์ที่ซับซ้อน
องค์ประกอบหลัก <Request>
<Response>
องค์ประกอบย่อย <Condition>
<Name>

มีการกำหนดขั้นตอนใน <Flow> ได้มากกว่า 1 ขั้นตอน และมีการดำเนินการตามขั้นตอนต่างๆ ใน ตามลำดับที่กำหนดไว้ใน XML ของโฟลว์

ขั้นตอนที่ไม่มีเงื่อนไขจะทํางานเสมอ ขั้นตอนที่มีเงื่อนไขจะทํางานต่อเมื่อเงื่อนไขนั้น ประเมินเป็น true หากเงื่อนไขประเมินได้เป็น "เท็จ" Edge จะข้ามขั้นตอนนี้

ไวยากรณ์

องค์ประกอบ <Step> ใช้ไวยากรณ์ต่อไปนี้

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

มี <Condition> และ <Name> ได้เพียง 1 รายการต่อ <Step> เท่านั้น หลายขั้นตอนใน <Flow>

องค์ประกอบย่อยทั้งหมดของ <Step> เป็นค่าที่ไม่บังคับ

ตัวอย่างที่ 1

ตัวอย่างต่อไปนี้แสดง 1 ขั้นตอนพร้อมเงื่อนไขและ 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>

ขั้นตอนที่ไม่มีเงื่อนไขจะทํางานเสมอ

Attributes

องค์ประกอบ <Step> ไม่มีแอตทริบิวต์

องค์ประกอบย่อย

ตารางต่อไปนี้อธิบายองค์ประกอบย่อยของ <Step>

องค์ประกอบย่อย ประเภท คำอธิบาย
<Condition> สตริง กำหนดคำสั่งแบบมีเงื่อนไขสำหรับขั้นตอนที่ประมวลผลขณะรันไทม์ หาก จะประเมินค่าเป็นจริง จากนั้น Edge จะดำเนินการตามขั้นตอนนั้น หากข้อความประเมินเป็น false จากนั้น Edge จะข้ามขั้นตอนนี้
<Name> สตริง ระบุรหัสของนโยบายที่จะดำเนินการในโฟลว์ปัจจุบัน