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

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

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

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

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

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

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

เช่น

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

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

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

ในแผงเพิ่มขั้นตอน ระบบจะสร้างอินสแตนซ์นโยบายใหม่ด้วยโควต้าประเภทนโยบายและชื่อที่แสดง โควต้า-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 จะทำงานเสมอ อย่างไรก็ตาม นโยบายในขั้นตอนแบบมีเงื่อนไขจะทำงานเมื่อเงื่อนไขของโฟลว์ประเมินเป็น "จริง" เท่านั้น

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

  • ไปป์ไลน์คำขอของ 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 หลังเส้นทางฐาน

ในแผงโฟลว์ตามเงื่อนไขใหม่ โฟลว์มีชื่อว่า Flow-1 และมีการกําหนดค่าประเภทเงื่อนไข เส้นทาง และกริยา

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

ขั้นตอนใหม่ที่เรียกว่า Flow-1 ปรากฏอยู่ในเมนูนำทาง

ไฮไลต์ขั้นตอนที่ 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>

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

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