คุณกําลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X info
โมเดลการเขียนโปรแกรมแอปพลิเคชันทุกแบบจะมีวิธีควบคุมขั้นตอนการประมวลผลด้วย ในพร็อกซี API การดำเนินการนี้จะทำได้โดยใช้โฟลว์ คุณเพิ่มตรรกะ คำสั่งเงื่อนไข การจัดการข้อผิดพลาด และอื่นๆ ลงในโฟลว์ได้ คุณใช้โฟลว์เพื่อควบคุมสิ่งที่เกิดขึ้นและช่วงเวลาที่ต้องการ
ขั้นตอนเป็นลำดับขั้นตามเส้นทางการประมวลผลคำขอ API เมื่อเพิ่มตรรกะพร็อกซี เช่น เพื่อยืนยันคีย์ API คุณจะเพิ่มตรรกะเป็นขั้นตอนในลําดับที่ระบุโดยขั้นตอน เมื่อกําหนดเงื่อนไขเพื่อระบุว่าตรรกะจะทํางานหรือไม่และเมื่อใด ให้เพิ่มเงื่อนไขนั้นลงในโฟลว์
ตัวอย่างการกำหนดค่าโฟลว์ต่อไปนี้จะกำหนดโฟลว์ที่นโยบาย VerifyAPIKey จะทำงานหากเส้นทางคำขอขาเข้าลงท้ายด้วย /
และคำกริยา HTTP ของคำขอคือ GET
<Flow name="Get Food Carts"> <Description>Get Food Carts</Description> <Request> <Step> <Name>Verify-API-Key</Name> </Step> </Request> <Condition>(proxy.pathsuffix MatchesPath "/") and (request.verb = "GET")</Condition> </Flow>
ค่า Verify-API-Key
ในองค์ประกอบ <Name>
ของโฟลว์แสดงนโยบายที่กําหนดค่าไว้ในส่วนอื่นในพร็อกซีด้วย XML ดังตัวอย่างต่อไปนี้
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <VerifyAPIKey async="false" continueOnError="false" enabled="true" name="Verify-API-Key"> <DisplayName>Verify API Key</DisplayName> <Properties/> <APIKey ref="request.header.x-api-key"/> </VerifyAPIKey>
กำลังออกแบบลำดับการดำเนินการของโฟลว์
คุณจัดโครงสร้างโฟลว์เพื่อให้ตรรกะทำงานตามลําดับที่ถูกต้องตามเส้นทางการประมวลผล
เมื่อตัดสินใจว่าจะเพิ่มตรรกะไว้ที่ใด คุณจะต้องเลือกก่อนว่าจะเพิ่มลงในปลายทางพร็อกซีหรือปลายทางเป้าหมาย พร็อกซี API จะแบ่งโค้ดของตัวเองระหว่างโค้ดที่โต้ตอบกับไคลเอ็นต์ของพร็อกซี (ปลายทางพร็อกซี) และโค้ดที่ไม่บังคับซึ่งโต้ตอบกับเป้าหมายแบ็กเอนด์ของพร็อกซี หากมี (ปลายทางเป้าหมาย)
ปลายทางทั้ง 2 แบบจะมีโฟลว์ตามที่อธิบายไว้ที่นี่
ประเภทปลายทาง | คำอธิบาย | โฟลว์ที่รองรับ |
---|---|---|
ProxyEndpoint | มีโฟลว์พร็อกซี API ที่ใกล้กับไคลเอ็นต์มากที่สุด ระบุพื้นที่ให้ตรรกะดำเนินการดำเนินการกับคำขอจากไคลเอ็นต์เป็นอันดับแรก จากนั้นจึงตอบสนองคำขอไปยังไคลเอ็นต์ | PreFlow, ConditionalFlow, PostFlow, PostClientFlow |
TargetEndpoint | มีโฟลว์พร็อกซี API ที่ใกล้กับทรัพยากรแบ็กเอนด์มากที่สุด ระบุตําแหน่งสำหรับตรรกะเพื่อเตรียมคําขอ จากนั้นจัดการการตอบกลับจากทรัพยากรแบ็กเอนด์ | PreFlow, ขั้นตอนแบบมีเงื่อนไข, PostFlow |
คุณกําหนดค่าขั้นตอนด้วย XML ที่ระบุสิ่งที่ควรเกิดขึ้นและลําดับที่ควรเกิดขึ้น ภาพต่อไปนี้แสดงลําดับของโฟลว์ภายในปลายทางพร็อกซีและปลายทางเป้าหมาย
ปลายทางพร็อกซีและปลายทางเป้าหมายแต่ละรายการจะมีโฟลว์ที่คุณจัดเรียงตามลําดับต่อไปนี้ได้
ตำแหน่ง | ประเภทโฟลว์ | คำอธิบาย |
---|---|---|
1 | PreFlow |
โดยจะมีประโยชน์เมื่อคุณต้องตรวจสอบว่าโค้ดบางรายการทำงานก่อนจะมีอะไรเกิดขึ้นอีก หาก PreFlow อยู่ในปลายทางเป้าหมาย ระบบจะดำเนินการหลังจาก PostFlow ของปลายทางพร็อกซี |
2 | โฟลว์แบบมีเงื่อนไข |
สถานที่สำหรับตรรกะตามเงื่อนไข ทำงานหลังจาก PreFlow และก่อน PostFlow
ระบบจะดำเนินการตามขั้นตอนแบบมีเงื่อนไขเพียง 1 รายการต่อกลุ่ม ซึ่งเป็นขั้นตอนแรกที่เงื่อนไขจะประเมินค่าเป็น "จริง" ซึ่งหมายความว่าคุณจะทําให้ขั้นตอนแบบมีเงื่อนไขหนึ่งๆ ทำงานเป็นส่วนหนึ่งของรายการต่อไปนี้ได้
|
3 | PostFlow |
พื้นที่ที่ดีในการบันทึกข้อมูล ส่งการแจ้งเตือนเมื่อเกิดเหตุการณ์บางอย่างขณะประมวลผลคำขอ และอื่นๆ ทำงานหลังจากโฟลว์แบบมีเงื่อนไขและ PreFlow หาก PostFlow อยู่ในปลายทางของพร็อกซี และมีปลายทางเป้าหมาย ปลายทางของพร็อกซี PostFlow จะทำงานก่อน PreFlow ปลายทางเป้าหมาย |
4 | PostClientFlow (โฟลว์พร็อกซีเท่านั้น) | ขั้นตอนในการบันทึกข้อความหลังจากที่ส่งการตอบกลับไปยังไคลเอ็นต์แล้ว |
ให้เรียกใช้โค้ดก่อนด้วย PreFlow
PreFlow มีประโยชน์เมื่อคุณต้องตรวจสอบว่าโค้ดบางรายการทำงานจริงก่อนจะมีอะไรเกิดขึ้นอีก
ในปลายทางพร็อกซี ขั้นตอนก่อนการเรียกใช้เป็นตําแหน่งที่ดีสําหรับโค้ดที่ตรวจสอบสิทธิ์ไคลเอ็นต์และจํากัดการเข้าชมจากไคลเอ็นต์ PreFlow เหมาะสำหรับขั้นตอนแรกในการเตรียมความพร้อมเพื่อส่งคำขอในปลายทางเป้าหมาย
เช่น ปกติแล้วคุณไม่ต้องการให้บริการแก่ลูกค้าที่เกินโควต้า หากต้องการรองรับข้อกําหนดเหล่านี้ ให้ใส่นโยบายความปลอดภัยและโควต้าในส่วน PreFlow วิธีนี้จะทำให้คุณไม่ต้องกังวลว่าเงื่อนไขที่จะประเมินล้มเหลวในขั้นตอนแบบมีเงื่อนไขในภายหลัง นโยบายในขั้นตอนนี้จะทำงานก่อนการประมวลผลอื่นๆ เสมอ
ในตัวอย่างต่อไปนี้ นโยบาย SpikeArrest และ Quota จะทำงานก่อนที่จะประมวลผลการส่งไปยังโฟลว์แบบมีเงื่อนไข
<PreFlow name="MyPreFlow"> <Request> <Step> <Name>Spike-Arrest</Name> </Step> <Step> <Name>Quota</Name> </Step> </Request> <Response/> </PreFlow>
ให้เรียกใช้โค้ดอย่างมีเงื่อนไขด้วยโฟลว์แบบมีเงื่อนไข
ระหว่าง PreFlow กับ PostFlow คุณจะมีโฟลว์ที่ทำงานอย่างมีเงื่อนไขได้ วิธีนี้ช่วยให้คุณกําหนดค่าลําดับตรรกะได้หลายรายการ แต่มีการดำเนินการเพียงรายการเดียวตามสถานะของพร็อกซี คุณใช้โฟลว์แบบมีเงื่อนไขหรือไม่ก็ได้หากสามารถเรียกใช้ตรรกะทั้งหมดในโฟลว์ก่อนหรือหลัง และไม่จำเป็นต้องใช้เงื่อนไข (กล่าวคือ ระบบรองรับเฉพาะเส้นทางเดียวผ่านปลายทาง)
แต่ละโฟลว์จะระบุเงื่อนไขที่จะทดสอบค่าสถานะที่แตกต่างกัน ซึ่งจะขยายการดำเนินการตามเงื่อนไขอย่างมีประสิทธิภาพ เช่น คุณอาจต้องการแปลง XML เป็น JSON เฉพาะเมื่อแอปที่ส่งคำขอทํางานบนอุปกรณ์เคลื่อนที่
ในที่นี้ ระบบจะบังคับใช้ข้อจำกัดโควต้าเฉพาะในกรณีที่คำขอเป็นคำขอ GET
ที่มีรูปแบบ URI /issue/**
(/issue/ โดยมีอะไรก็ได้ใน URI หลังเครื่องหมายทับตัวสุดท้าย)
<Flow name="MyFlow"> <Description/> <Request> <Step> <Name>Quota</Name> </Step> </Request> <Response/> <Condition>(proxy.pathsuffix MatchesPath "/issue/**") and (request.verb = "GET")</Condition> </Flow>
คุณใช้ตัวแปรโฟลว์เพื่อระบุเงื่อนไข ดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้ตัวแปรในเงื่อนไขได้ที่เงื่อนไขที่มีตัวแปรโฟลว์
ดูตัวอย่างการใช้การจับคู่รูปแบบในเงื่อนไขได้ที่การจับคู่รูปแบบ
การรันโค้ดหลังตรรกะหลักด้วย PostFlow
PostFlow เป็นพื้นที่ที่เหมาะแก่การดำเนินการต่างๆ หลังจากตรรกะหลักของปลายทาง และก่อนที่การประมวลผลปลายทางจะเสร็จสิ้น PostFlow ทำงานหลังจากโฟลว์แบบมีเงื่อนไขและ PreFlow
PostFlow เป็นพื้นที่ที่เหมาะแก่การบันทึกข้อมูลบางอย่าง ส่งการแจ้งเตือนว่าเกิดอะไรขึ้น เปลี่ยนรูปแบบข้อความตอบกลับ และอื่นๆ
ในตัวอย่างต่อไปนี้ นโยบาย AssignMessage ที่เรียกว่า SetResponseHeaders จะกำหนดส่วนหัวของข้อความตอบกลับก่อนที่ Apigee Edge จะส่งการตอบกลับไปยังไคลเอ็นต์
<PostFlow> <Response> <Step> <Name>SetResponseHeaders</Name> </Step> </Response> </PostFlow>
เรียกใช้โค้ดหลังจากที่ไคลเอ็นต์ได้รับการตอบกลับจากพร็อกซีด้วย PostClientFlow
PostClientFlow อาจมีนโยบายต่อไปนี้
- นโยบายเกี่ยวกับส่วนขยายไฮไลต์
- นโยบาย Flowข้อความไฮไลต์*
- นโยบายการบันทึกข้อความ
- นโยบายข้อความไฮไลต์บริการ
* นโยบาย FlowCallout จะเรียกได้เฉพาะ Flow ที่แชร์ซึ่งเป็นไปตามเกณฑ์ในการอยู่ใน PostClientFlow (กล่าวคือ มีเฉพาะนโยบายที่เข้ากันได้)
หากคุณรวม PostClientFlow จะเป็นโฟลว์สุดท้ายที่จะดำเนินการหลังจากส่งการตอบกลับไปยังไคลเอ็นต์แล้ว
PostClientFlow เหมาะสำหรับการบันทึกขั้นสุดท้าย นอกจากนี้ คุณยังบันทึกการประทับเวลาเริ่มต้นและสิ้นสุดของข้อความตอบกลับได้ด้วย
ต่อไปนี้คือตัวอย่างของ PostClientFlow ที่มีนโยบาย MessageLนั้นๆ แนบอยู่
... <PostFlow name="PostFlow"> <Request/> <Response/> </PostFlow> <PostClientFlow> <Request/> <Response> <Step> <Name>Message-Logging-1</Name> </Step> </Response> </PostClientFlow> ...
วิดีโอ: ดูวิดีโอสั้นๆ นี้ซึ่งแสดงวิธีสร้าง PostClientFlow โดยใช้นโยบาย MessageLogging จากชุดวิดีโอ 4 นาทีสําหรับนักพัฒนาซอฟต์แวร์ (4MV4D)
ดูข้อมูลเพิ่มเติมได้ที่
การเพิ่มตรรกะลงในโฟลว์
เมื่อเพิ่มตรรกะลงในพร็อกซี ให้เพิ่มนโยบายลงในโฟลว์ของพร็อกซี เนื้อหาของโฟลว์จะทำงานตามลำดับ (PreFlow ตามด้วย PostFlow ตามที่อธิบายไว้ในหัวข้อนี้) เช่นเดียวกับที่โฟลว์ดำเนินการตามลำดับ
การกำหนดค่าโฟลว์ตัวอย่างต่อไปนี้อ้างอิงถึงนโยบาย 3 รายการ (กำหนดค่าไว้ที่อื่นในไฟล์ XML ของนโยบายเอง) นโยบายที่ Verify-API-Key
อ้างอิงจะทำงานก่อนนโยบายที่ Remove-API-Key
อ้างอิง โดยทั้งสองนโยบายตามด้วยนโยบาย Quota
<Flow name="Get Food Cart Menus"> <Description>Get Food Cart Menus</Description> <Request> <Step> <Name>Verify-API-Key</Name> </Step> <Step> <Name>Remove-API-Key</Name> </Step> <Step> <Name>Quota</Name> </Step> </Request> <Condition>(proxy.pathsuffix MatchesPath "/") and (request.verb = "GET")</Condition> </Flow>
คอนโซล Apigee Edge จะแสดงลําดับนโยบายนี้เป็นแถวไอคอน โดยที่แต่ละไอคอนแสดงถึงนโยบาย
ขั้นตอนการแก้ไขข้อบกพร่อง
เครื่องมือ Apigee Edge Trace จะมีวิธีกราฟิกในการดูการทำงานของตรรกะในพร็อกซี API ตามคำขอ เครื่องมือจะแสดงการประมวลผลระหว่างคําขอและคําตอบ ไม่ได้แสดงการแยกระหว่าง PreFlow, เงื่อนไขของโฟลว์ และ PostFlow โดยเฉพาะ
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับพร็อกซีการติดตาม โปรดดูการใช้เครื่องมือการติดตาม
การจัดการข้อผิดพลาดในขั้นตอน
คุณรายงานข้อบกพร่องได้จากหลายที่ในพร็อกซี API รวมถึงจากโฟลว์
ตัวอย่างต่อไปนี้คือกลุ่มการตอบกลับจาก PreFlow ในปลายทางเป้าหมาย กล่าวคือ เป็นโค้ดที่จะทำงานทันทีหลังจากที่ได้รับการตอบสนองจากเป้าหมายแบ็กเอนด์ ในตัวอย่าง ระบบจะแสดงข้อผิดพลาดหากการตอบกลับจากเป้าหมายไม่ใช่ 200 (สําเร็จ)
<PreFlow name="PreFlow"> <Response> <Step> <Name>RaiseFault</Name> <Condition>(response.status.code GreaterThan "200")</Condition> </Step> </Response> </PreFlow>
ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดการข้อผิดพลาดได้ที่การจัดการข้อผิดพลาด