คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่
เอกสารประกอบของ Apigee X info
ใช้นโยบาย FlowCallout เพื่อเรียกโฟลว์ที่แชร์จากพร็อกซี API หรือโฟลว์ที่แชร์อื่น
ในโฟลว์ที่แชร์ คุณจะสร้างลำดับขั้นตอนที่นำกลับมาใช้ใหม่ได้ในรันไทม์จากหลายๆ ที่ โดยขั้นตอนเหล่านี้จะมีการนำไปใช้เป็นนโยบายเช่นเดียวกับในพร็อกซี API นโยบาย FlowCallout ช่วยให้คุณเรียกใช้โฟลว์ที่แชร์จากพร็อกซี API และโฟลว์ที่แชร์อื่นๆ ได้ ซึ่งทำงานเหมือนกับการเรียกฟังก์ชันในภาษาโปรแกรมแบบดั้งเดิม
- ตัวอย่างเช่น ลองนึกภาพว่าคุณได้สร้างโฟลว์ที่แชร์ที่มีฟีเจอร์ด้านความปลอดภัย เช่น การยืนยันคีย์ API, การตรวจสอบโทเค็น OAuth และการป้องกันด้วยนิพจน์ทั่วไป โฟลว์ที่แชร์นี้ แสดงถึงข้อตกลงของคุณเกี่ยวกับวิธีตรวจสอบคำขอขาเข้า คุณสามารถใช้นโยบาย FlowCallout เพื่อเรียกใช้โฟลว์ที่แชร์ดังกล่าวจากพร็อกซี API หลายรายการได้
- คุณสามารถเรียกโฟลว์ที่แชร์หนึ่งจากอีกโฟลว์หนึ่งได้โดยใช้นโยบาย FlowCallout จากภายในโฟลว์ที่แชร์
ตัวอย่าง
ยืนยันคีย์ API ในโฟลว์ที่แชร์
ในตัวอย่างนี้ ระบบจะใช้โฟลว์ที่แชร์เพื่อทำงานทั่วไปที่เกี่ยวข้องกับความปลอดภัย โดยโฟลว์ที่แชร์จะตรวจสอบคีย์ API พร็อกซี API และโฟลว์ที่แชร์อื่นๆ สามารถใช้นโยบาย FlowCallout เพื่อเรียกใช้โฟลว์ที่แชร์นี้ได้
คำจำกัดความของโฟลว์ที่แชร์ต่อไปนี้มีนโยบาย Verify-API-Key ที่ทำงาน
เมื่อมีการเรียกโฟลว์ที่แชร์จากนโยบาย FlowCallout ในพร็อกซี API
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<SharedFlow name="default">
<Step>
<Name>Verify-API-Key</Name>
</Step>
</SharedFlow>นโยบาย VerifyAPIKey ภายในโฟลว์ที่แชร์ก่อนหน้าจะดึงค่าคีย์และ
ยืนยันค่าดังกล่าว
<VerifyAPIKey async="false" continueOnError="false" enabled="true" name="Verify-API-Key">
<DisplayName>Verify API Key</DisplayName>
<APIKey ref="request.queryparam.apikey"/>
</VerifyAPIKey>นโยบาย FlowCallout ต่อไปนี้ซึ่งใช้ในพร็อกซี API จะเรียกโฟลว์ที่แชร์ก่อนหน้าเพื่อ
ยืนยันคีย์ API บันเดิลโฟลว์ที่แชร์ verify-apikey-shared (ไม่ได้แสดงที่นี่)
จะกำหนดค่าโฟลว์ที่แชร์ในลักษณะที่บันเดิล APIProxy กำหนดค่าพร็อกซี
<FlowCallout async="false" continueOnError="false" enabled="true" name="Auth-Flow-Callout">
<DisplayName>Auth Flow Callout</DisplayName>
<SharedFlowBundle>verify-apikey-shared</SharedFlowBundle>
</FlowCallout>ส่งพารามิเตอร์ไปยังโฟลว์ที่แชร์
ตัวอย่างนี้แสดงวิธีส่งพารามิเตอร์จากนโยบาย FlowCallout ไปยังโฟลว์ที่แชร์ โดยนโยบาย FlowCallout จะเรียกโฟลว์ที่แชร์ซึ่งออกแบบมาเพื่อทำหน้าที่จัดการสตริงทั่วไป โฟลว์ที่แชร์มี JavaScript ที่เชื่อมสตริงอินพุต แปลงอินพุตเป็นตัวพิมพ์เล็ก หรือทั้ง 2 อย่าง นโยบาย FlowCallout กำหนดพารามิเตอร์ที่ระบุ อินพุตสตริง เอาต์พุต และสิ่งที่ต้องทำกับอินพุต
นโยบาย FlowCallout
String-Handlerจะเรียกโฟลว์ที่แชร์ โดยส่งพารามิเตอร์ที่ระบุตัวแปรที่จะจัดเก็บเอาต์พุตของโฟลว์ที่แชร์ การดำเนินการโฟลว์ที่แชร์ที่จะใช้ และอินพุตที่จะใช้ (ในที่นี้คือค่าคงที่สตริง แต่จะเป็นตัวแปรโฟลว์ก็ได้) องค์ประกอบParameterจะระบุชื่อและค่าของตัวแปร ที่จะสร้างในรันไทม์ โฟลว์ที่แชร์สามารถดึงตัวแปรเหล่านี้มาใช้ในโค้ดของตัวเองได้<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <FlowCallout async="false" continueOnError="false" enabled="true" name="String-Handler"> <DisplayName>String Handler</DisplayName> <Parameters> <Parameter name="input">Gladys Kravitz</Parameter> <Parameter name="operations">concatenate tolowercase</Parameter> <Parameter name="outputVariable">string.handler.output</Parameter> </Parameters> <SharedFlowBundle>StringHandler</SharedFlowBundle> </FlowCallout>โฟลว์ที่แชร์
defaultต่อไปนี้มีนโยบาย JavaScriptSharedStringFunctionsที่ทำงานเมื่อมีการเรียกโฟลว์ที่แชร์จากนโยบาย FlowCallout<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <SharedFlow name="default"> <Step> <Name>SharedStringFunctions</Name> </Step> </SharedFlow>ในโฟลว์ที่แชร์ นโยบาย JavaScript
SharedStringFunctionsต่อไปนี้จะระบุไฟล์ JavaScript SharedStringFunctions.js ที่มีโค้ดที่จะดำเนินการ<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <Javascript async="false" continueOnError="false" enabled="true" timeLimit="200" name="SharedStringFunctions"> <DisplayName>SharedStringFunctions</DisplayName> <Properties/> <ResourceURL>jsc://SharedStringFunctions.js</ResourceURL> </Javascript>
JavaScript ต่อไปนี้ SharedStringFunctions.js จะทำงานจาก
SharedStringFunctionsนโยบาย JavaScript สคริปต์นี้จะดึงค่าจาก ตัวแปรที่สร้างจากองค์ประกอบParameterของนโยบาย FlowCallout// Input value from the calling API proxy. var handledString = context.getVariable("input"); // Variable to use for output from this script. var outputVariable = context.getVariable("outputVariable"); // A space-separated list of things to do to the input string. // Convert to lower case to handle unintentional capitals in configuration. var operation = context.getVariable("operations").toLowerCase(); // If "lowercase" was given as an operation, convert the input to lowercase. if (operation.includes("tolowercase")) { handledString = handledString.toLowerCase(); } // If "concatenate" was given as an operation, concatenate the input. if (operation.includes("concatenate")) { handledString = handledString.replace(/\s+/g, ''); } // Assign the resulting string to the output variable specified by // the calling API proxy. context.setVariable(outputVariable, handledString);
- การดำเนินการจะไหลกลับจากนโยบาย JavaScript ไปยังโฟลว์ที่แชร์ แล้วไปยัง นโยบาย FlowCallout ในพร็อกซี API ต้นทาง
ข้อมูลอ้างอิงองค์ประกอบ
ต่อไปนี้คือองค์ประกอบและแอตทริบิวต์ที่คุณกำหนดค่าได้ในนโยบายนี้
<FlowCallout async="false" continueOnError="false" enabled="true" name="Flow-Callout-1">
<DisplayName>Custom label used in UI</DisplayName>
<SharedFlowBundle>thereferencedsharedflowbundle</SharedFlowBundle>
</FlowCallout>แอตทริบิวต์ <FlowCallout>
<FlowCallout async="false" continueOnError="false" enabled="true" name="Flow-Callout-1">
ตารางต่อไปนี้อธิบายแอตทริบิวต์ทั่วไปในองค์ประกอบระดับบนสุดของนโยบายทั้งหมด
| แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ |
|---|---|---|---|
name |
ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ (ไม่บังคับ) ใช้องค์ประกอบ |
ไม่มี | ต้องระบุ |
continueOnError |
ตั้งค่าเป็น ตั้งค่าเป็น |
เท็จ | ไม่บังคับ |
enabled |
ตั้งค่าเป็น ตั้งค่าเป็น |
จริง | ไม่บังคับ |
async |
แอตทริบิวต์นี้เลิกใช้งานแล้ว |
เท็จ | เลิกใช้ |
<DisplayName> องค์ประกอบ
ใช้เพิ่มเติมจากแอตทริบิวต์ name เพื่อติดป้ายกำกับนโยบายใน
เครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน
<DisplayName>Policy Display Name</DisplayName>
| ค่าเริ่มต้น |
ไม่มี หากไม่ใส่องค์ประกอบนี้ ค่าของแอตทริบิวต์ |
|---|---|
| การมีบุคคลอยู่ | ไม่บังคับ |
| ประเภท | สตริง |
องค์ประกอบ <SharedFlowBundle>
ระบุชื่อของโฟลว์ที่แชร์ที่จะเรียก ค่าขององค์ประกอบนี้ควรเหมือนกับ ค่าแอตทริบิวต์ name ขององค์ประกอบ SharedFlowBundle เป้าหมาย
<SharedFlowBundle/>
ในตัวอย่างที่ง่ายที่สุด คุณจะระบุชื่อของโฟลว์ที่แชร์ที่กำลังเรียกเป็นค่าสำหรับองค์ประกอบนี้
นั่นคือ ค่าขององค์ประกอบนี้ต้องเหมือนกับค่าแอตทริบิวต์ name
ของโฟลว์ที่แชร์
<SharedFlowBundle>Shared-Flow-Name</SharedFlowBundle>
| ค่าเริ่มต้น | ไม่มี |
| การมีบุคคลอยู่ |
ต้องระบุ |
| ประเภท | ไม่มี |
แอตทริบิวต์
ไม่มี
องค์ประกอบ <Parameter>
ระบุพารามิเตอร์และค่า (หรือแหล่งที่มาของค่า) ที่จะส่งเป็นตัวแปรไปยังโฟลว์ที่แชร์ซึ่งเรียกโดยนโยบายนี้
การใช้พารามิเตอร์ช่วยให้คุณระบุค่า (หรือตัวแปรที่มีค่า) ที่ควรส่งไปยังโฟลว์ที่แชร์ซึ่งเรียกโดยนโยบายได้ ซึ่งคล้ายกับแนวคิดในการระบุ พารามิเตอร์ในการเรียกฟังก์ชัน ค่าพารามิเตอร์ FlowCallout อาจแตกต่างกันไปตามบริบทของการเรียกโฟลว์ที่แชร์ เช่นเดียวกับพารามิเตอร์ฟังก์ชัน
พารามิเตอร์ FlowCallout จะมองเห็นได้เฉพาะในระหว่างการดำเนินการของโฟลว์ที่แชร์เท่านั้น
ไวยากรณ์
คุณสามารถใช้องค์ประกอบนี้กับรูปแบบไวยากรณ์ใดรูปแบบหนึ่งต่อไปนี้ โปรดทราบว่าเมื่อคุณใช้ค่าลิเทอรัล รูปแบบของค่าที่คุณระบุจะขึ้นอยู่กับโค้ดที่ใช้ค่าดังกล่าว
<!- A literal value in an attribute. --/> <Parameter name="parameter-name" value='parameter-value' /> <!- A reference to a variable in an attribute. --/> <Parameter name="parameter-name" ref='source-variable-name' /> <!- A literal value in the element content. --/> <Parameter name="parameter-name">parameter-value</Parameter> <!- An reference to an attribute in the element content. --/> <Parameter name="parameter-name">{source-variable-name}</Parameter>
ตัวอย่าง
นโยบาย FlowCallout String-Handler นี้จะส่งพารามิเตอร์ที่ระบุตำแหน่งที่จะจัดเก็บเอาต์พุตของโฟลว์ที่แชร์และอินพุตที่จะใช้ องค์ประกอบ Parameter จะระบุชื่อและค่าของตัวแปรที่จะสร้างในรันไทม์ โฟลว์ที่แชร์สามารถดึง
ตัวแปรเหล่านี้มาใช้ในโค้ดของตัวเองได้
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<FlowCallout async="false" continueOnError="false" enabled="true" name="String-Handler">
<DisplayName>String Handler</DisplayName>
<Parameters>
<Parameter name="input">Gladys Kravitz</Parameter>
<Parameter name="outputVariable">string.handler.output</Parameter>
</Parameters>
<SharedFlowBundle>StringHandler</SharedFlowBundle>
</FlowCallout>| ค่าเริ่มต้น | ไม่มี |
| การมีบุคคลอยู่ |
ต้องระบุ |
| ประเภท | ไม่มี |
แอตทริบิวต์
| แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | ประเภท |
|---|---|---|---|---|
| name | ชื่อของตัวแปรในรันไทม์ที่จะสร้างด้วยพารามิเตอร์นี้ | ไม่มี | ต้องระบุ | สตริง |
| ref |
ตัวแปรที่มีค่าที่จะใช้ในรันไทม์ ละเว้นแอตทริบิวต์นี้หากคุณ ระบุค่าคงที่ที่จะใช้ |
ไม่มี | ไม่บังคับ | สตริง |
| value | ค่าที่จะใช้ในตัวแปรในรันไทม์ที่สร้างด้วยพารามิเตอร์นี้ ละเว้นแอตทริบิวต์นี้หาก คุณระบุชื่อตัวแปรที่ควรเป็นแหล่งที่มาของค่า | ไม่มี | ไม่บังคับ | สตริง |
องค์ประกอบ <Parameters>
ระบุชุดองค์ประกอบ <Parameter> ที่จะส่งเป็นตัวแปรไปยังโฟลว์ที่แชร์ซึ่งเรียกโดยนโยบายนี้
ไวยากรณ์
<Parameters> <Parameter name="parameter-name" value='parameter-value' /> </Parameters>
| ค่าเริ่มต้น | ไม่มี |
| การมีบุคคลอยู่ |
ไม่บังคับ |
| ประเภท | ไม่มี |
แอตทริบิวต์
ไม่มี
สคีมา
ตัวแปรโฟลว์
ตัวแปรโฟลว์ช่วยให้เกิดลักษณะการทำงานแบบไดนามิกของนโยบายและโฟลว์ในรันไทม์ โดยอิงตามส่วนหัว HTTP เนื้อหาข้อความ หรือบริบทโฟลว์ ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวแปรโฟลว์ได้ที่ ข้อมูลอ้างอิงตัวแปร
| ตัวแปร | คำอธิบาย |
|---|---|
|
|
ขอบเขต: ระหว่างการดำเนินการของโฟลว์ที่แชร์ ค่าแอตทริบิวต์ name ของโฟลว์ที่แชร์ |
|
|
ขอบเขต: ระหว่างการดำเนินการของโฟลว์ที่แชร์ซึ่งแนบกับ Flowhook ชื่อของ Flowhook |
ข้อมูลอ้างอิงข้อผิดพลาด
ส่วนนี้อธิบายโค้ดข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่แสดงผลและตัวแปรข้อผิดพลาดที่ Edge กำหนดเมื่อนโยบายนี้ทริกเกอร์ข้อผิดพลาด ข้อมูลนี้เป็นสิ่งสำคัญที่ต้องทราบหากคุณกำลังกำหนดกฎข้อผิดพลาดเพื่อจัดการกับข้อผิดพลาด ดูข้อมูลเพิ่มเติมได้ที่สิ่งที่คุณต้องทราบเกี่ยวกับข้อผิดพลาดของนโยบายและการจัดการข้อผิดพลาด
ข้อผิดพลาดเกี่ยวกับรันไทม์
ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อนโยบายทำงาน
| รหัสข้อผิดพลาด | สถานะ HTTP | สาเหตุ | แก้ไข |
|---|---|---|---|
flow.SharedFlowNotFound |
500 | ไม่มีโฟลว์ที่แชร์ หรือมีโฟลว์ที่แชร์อยู่แต่ไม่ได้ใช้งาน | build |
ข้อผิดพลาดในการทำให้ใช้งานได้
ไม่มีข้อมูล
หัวข้อที่เกี่ยวข้อง
- การสร้างโฟลว์ที่แชร์: โฟลว์ที่แชร์ ที่นำกลับมาใช้ใหม่ได้
- การดำเนินการโฟลว์ที่แชร์ในพร็อกซีหลายรายการ: การแนบโฟลว์ที่แชร์โดยใช้ Flowhook