การกำหนดค่าโฟลว์

คุณกําลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X
info

ขั้นตอนเป็นองค์ประกอบพื้นฐานของพร็อกซี API ขั้นตอนช่วยให้คุณตั้งโปรแกรมลักษณะการทํางานของ API ได้ด้วยการกําหนดค่าลําดับที่พร็อกซี API จะเรียกใช้นโยบายและโค้ด

ดูภาพรวมแนวคิดของโฟลว์ได้ที่การควบคุมวิธีที่พร็อกซีทำงานกับโฟลว์

หัวข้อนี้อธิบายวิธีสร้างโฟลว์แบบมีเงื่อนไขและเพิ่มตรรกะ (นโยบาย) ลงในโฟลว์ในระดับสูง ศิลปะการสร้างเงื่อนไขมีรายละเอียดมากกว่าเนื้อหาที่กล่าวถึงในหัวข้อนี้ ดูรายละเอียดได้ที่ภาพรวมของตัวแปรและเงื่อนไขที่มีตัวแปร

การแนบนโยบายกับขั้นตอน

Edge มีนโยบายที่กําหนดไว้ล่วงหน้าหลายประเภทเพื่อใช้รักษาความปลอดภัย จัดการการเข้าชม และจัดการข้อความ นอกจากนี้ นโยบายให้คุณเพิ่มโค้ดที่กำหนดเองเพื่อปรับแต่งการประมวลผลข้อความได้อย่างสมบูรณ์

เช่น

  • แนบนโยบายความปลอดภัย OAuth กับขั้นตอนการส่งคำขอก่อนเข้าสู่ระบบของ ProxyEndpoint เนื่องจากขั้นตอนก่อนการประมวลผลคำขอของ ProxyEndpoint เป็นขั้นตอนแรกในไปป์ไลน์ คุณจึงปฏิเสธคำขอได้ทันทีหากละเมิดนโยบายความปลอดภัย
  • แนบนโยบายการเปลี่ยนรูปแบบจาก JSON เป็น XML กับการตอบกลับหลังการประมวลผลของปลายทางเป้าหมายเพื่อแปลงการตอบกลับจาก JSON เป็น XML
  • แนบนโยบาย JavaScript กับโฟลว์แบบมีเงื่อนไขของ ProxyEndpoint เพื่อเรียกใช้โค้ด JavaScript เพื่อประมวลผลคำขอ

เมื่อสร้างโฟลว์แบบมีเงื่อนไขแล้ว คุณจะแนบนโยบายกับโฟลว์ได้ เมื่อเลือกโฟลว์แล้ว ให้คลิกไอคอน + ขั้นตอนในแผนภาพคำขอหรือคำตอบเพื่อเพิ่มนโยบายใหม่หรือที่มีอยู่ลงในโฟลว์

โดยมีการไฮไลต์ตัวอย่างปัญหาที่มีชื่อขั้นตอนของขั้นตอนแบบมีเงื่อนไขในเมนูการนำทาง และปุ่มขั้นตอนจะปรากฏในแผงโฟลว์

ในแผง "เพิ่มขั้นตอน" ระบบจะสร้างอินสแตนซ์นโยบายใหม่ที่มีประเภทนโยบายเป็นโควต้าและชื่อที่แสดงเป็น Quota-2

การแนบนโยบายกับโฟลว์ที่เลือกเป็นการกําหนดค่าพร็อกซี API เพื่อบังคับใช้นโยบายโควต้าสําหรับคําขอที่ส่งไปยัง URI ของโฟลว์และชุดคําผสมนั้นๆ เท่านั้น ตัวอย่างเช่น หากคุณแนบนโยบายไปยังขั้นตอนเรียนรู้ในคําขอ ระบบจะสร้าง XML ต่อไปนี้ในมุมมองโค้ดของเครื่องมือแก้ไขพร็อกซี

<ProxyEndpoint name="default">
...
   <Flow name="issue">
        <Description/>
        <Request>
            <Step>
                <Name>Quota-2</Name>
            </Step>
        </Request>
        <Response/>
        <Condition>(proxy.pathsuffix MatchesPath "/issue/**") and (request.verb = "GET")</Condition>
    </Flow>
... 
</ProxyEndpoint>

ในการกำหนดค่านี้ หากมีคำขอ GET เข้ามาในพร็อกซี API ที่มีรูปแบบ URI ของ .../issue/** (/issue/ ที่มีทุกอย่างใน URI หลังเครื่องหมายทับสุดท้าย) ระบบจะใช้โควต้ากับการเรียก API นั้น

เกี่ยวกับโฟลว์แบบมีเงื่อนไข

ระบบจะเรียกใช้นโยบายที่แนบมากับ PreFlow หรือ PostFlow เสมอ อย่างไรก็ตาม ระบบจะเรียกใช้นโยบายในโฟลว์แบบมีเงื่อนไขก็ต่อเมื่อเงื่อนไขของโฟลว์ประเมินเป็น "จริง" เท่านั้น

ในระหว่างการประมวลผลคําขอและการตอบกลับ ระบบจะเรียกใช้เวิร์กโฟลว์แบบมีเงื่อนไขเพียงรายการเดียวต่อกลุ่มเท่านั้น ซึ่งเป็นเวิร์กโฟลว์แรกที่เงื่อนไขประเมินผลเป็น "จริง" ซึ่งหมายความว่าคุณจะทําให้ขั้นตอนแบบมีเงื่อนไขหนึ่งๆ ทำงานเป็นส่วนหนึ่งของแต่ละรายการต่อไปนี้ได้

  • ไปป์ไลน์คำขอของ ProxyEndpoint
  • ไปป์ไลน์คำขอของ TargetEndpoint
  • ไปป์ไลน์คำตอบของ ProxyEndpoint
  • ไปป์ไลน์การตอบกลับของ TargetEndpoint

วิดีโอ: ดูวิดีโอสั้นๆ เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับขั้นตอนแบบมีเงื่อนไข

ตัวอย่างเช่น คําจํากัดความ ProxyEndpoint ต่อไปนี้แสดงขั้นตอนแบบมีเงื่อนไขที่ ProxyEndpoint ดําเนินการกับคําขอ HTTP GET ไปยังพร็อกซี API

<ProxyEndpoint name="default">
  <PreFlow>
    <Request/>
    <Response/>
  </PreFlow>   
  <Flows>
    <Flow name="Flow-1">
      <Condition>request.verb="GET"</Condition>
      <Request/>
      <Response/>
    </Flow>
  </Flows>
  <PostFlow>
    <Request/>
    <Response/>
  </PostFlow>
  ...
</ProxyEndpoint>

สังเกตว่าเงื่อนไขอ้างอิง request.verb ตัวแปรโฟลว์ ตัวแปรการไหลคือข้อมูลอ้างอิงที่มีชื่อซึ่งเก็บข้อมูลสถานะที่เชื่อมโยงกับธุรกรรม API ที่ Edge ประมวลผล Edge จะกําหนดตัวแปรสถานะหลายรายการที่คุณอ้างอิงได้

บริการ RESTful คือคอลเล็กชันทรัพยากร API ทรัพยากร API คือส่วนย่อยของเส้นทาง URI ที่ระบุเอนทิตีบางอย่างที่นักพัฒนาซอฟต์แวร์เข้าถึงได้โดยการเรียกใช้ API ของคุณ เช่น หากแบ็กเอนด์บริการของคุณแสดงรายงานสภาพอากาศและการพยากรณ์อากาศ API อาจกำหนด 2 ขั้นตอนแบบมีเงื่อนไขซึ่งแมปกับทรัพยากร API เหล่านั้น ได้แก่ /reports และ /forecasts เมื่อการเรียก API รวมทรัพยากรรายการใดรายการหนึ่งใน URL เงื่อนไขจะประเมินเป็น "จริง" และระบบจะเรียกใช้ตรรกะที่แนบมากับโฟลว์แบบมีเงื่อนไข

จากนั้นนักพัฒนาแอปจะเข้าถึงทรัพยากรของคุณได้โดยส่งคำขอไปยัง URL ในรูปแบบต่อไปนี้

http://myAPIs.myCo.com/weather/reports

หรือ

http://myAPIs.myCo.com/weather/forecasts

ในพร็อกซี API คุณสามารถกําหนดขั้นตอนการดำเนินการแบบมีเงื่อนไขซึ่งสอดคล้องกับทรัพยากรที่เฉพาะเจาะจงได้ ดังนี้

<ProxyEndpoint name="default">
  <PreFlow>
    <Request/>
    <Response/>
  </PreFlow>   
  <Flows>
    <Flow name="Flow-1">
      <Condition>(proxy.pathsuffix MatchesPath "/reports")</Condition>
      <Request/>
      <Response/>
    </Flow>
    <Flow name="Flow-2">
      <Condition>(proxy.pathsuffix MatchesPath "/forecasts")</Condition>
      <Request/>
      <Response/>
    </Flow>
  </Flows>
  <PostFlow>
    <Request/>
    <Response/>
  </PostFlow>
  ...
</ProxyEndpoint>

ในตัวอย่างนี้ คุณอ้างอิงตัวแปรโฟลว์ proxy.pathsuffix ซึ่งมีส่วนของคำต่อท้ายของ URL ที่ใช้เข้าถึงพร็อกซี API จากนั้นคุณสามารถแนบนโยบายต่างๆ กับโฟลว์แบบมีเงื่อนไขสำหรับแต่ละทรัพยากรได้

การเพิ่มโฟลว์แบบมีเงื่อนไข

ในตัวอย่างสั้นๆ นี้ คุณจะตั้งค่าโฟลว์ที่จะดำเนินการเฉพาะเมื่อข้อความคำขอเป็น HTTP GET

หากต้องการเพิ่มขั้นตอนแบบมีเงื่อนไข ให้เลือกแท็บพัฒนาในเครื่องมือสร้างพร็อกซี API

แท็บพัฒนาของเครื่องมือสร้างพร็อกซี

คลิกไอคอน + ในปลายทางที่ต้องการ

เพิ่มปุ่มโฟลว์แบบมีเงื่อนไข

แบบฟอร์มขั้นตอนแบบมีเงื่อนไขใหม่ช่วยให้คุณตั้งชื่อขั้นตอนและกําหนดค่าเงื่อนไขได้ ในตัวอย่างต่อไปนี้ คุณเพิ่มเงื่อนไขง่ายๆ ที่ประเมิน HTTP ของข้อความคําขอเพื่อหาคํากริยา GET (ไม่ใช่ PUT, POST ฯลฯ) ใน URI หลังเส้นทางฐาน

ในแผง &quot;ขั้นตอนแบบมีเงื่อนไขใหม่&quot; ระบบจะตั้งชื่อขั้นตอนเป็น &quot;Flow-1&quot; และกำหนดค่าประเภทเงื่อนไข เส้นทาง และคำกริยา

(ดูวิธีสร้างคำสั่งเงื่อนไขในตัวแปรและเงื่อนไขของขั้นตอน)

ตอนนี้ขั้นตอนใหม่ชื่อ Flow-1 จะปรากฏในเมนู Navigator

ไฮไลต์ Flow-1

ตอนนี้ให้ดูการกําหนดค่า XML สําหรับ ProxyEndpoint เลือก Flow-1 ในเมนู Navigator

คุณจะเห็นการกําหนดค่าต่อไปนี้

<PreFlow name="PreFlow">
    <Request/>
    <Response/>
</PreFlow>   
<Flows>
    <Flow name="Flow-1">
      <Request/>
      <Response/>
      <Condition>(proxy.pathsuffix MatchesPath "/**") and (request.verb = "GET")</Condition>
    </Flow>
</Flows>
<PostFlow name="PostFlow">
    <Request/>
    <Response/>
</PostFlow>

ขั้นตอนถัดไป

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