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

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

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

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

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

การแนบนโยบายกับโฟลว์

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

ตัวอย่างเช่น

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

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

ในเมนู Navigator ระบบจะไฮไลต์โฟลว์แบบมีเงื่อนไขตัวอย่างชื่อ issue และ
    ในบานหน้าต่างโฟลว์ ปุ่มขั้นตอนจะแสดงขึ้น

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

การแนบนโยบายกับโฟลว์ที่เลือกไว้จะกำหนดค่าพร็อกซี API ให้บังคับใช้นโยบาย โควต้าสำหรับคำขอที่ส่งไปยัง URI และคำกริยาของโฟลว์นั้นๆ เท่านั้น ตัวอย่างเช่น หากคุณ แนบนโยบายกับโฟลว์ learn ในคำขอ ระบบจะสร้าง 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 จะปรากฏในเมนู Navigator

ไฮไลต์โฟลว์ 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>

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

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