คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X ข้อมูล
ใช้นโยบาย Flow callout เพื่อเรียกใช้โฟลว์ที่แชร์จากพร็อกซี API หรือโฟลว์อื่นที่แชร์
ในขั้นตอนการทำงานที่แชร์กันนี้ คุณจะสร้างลำดับขั้นตอนที่สามารถใช้ซ้ำได้ในรันไทม์จากหลายๆ ที่ ขั้นตอนเหล่านี้จะใช้เป็นนโยบาย เช่น ภายในพร็อกซี API นโยบาย Flow callout ให้คุณเรียกใช้โฟลว์ที่แชร์จากพร็อกซี API และโฟลว์อื่นๆ ที่แชร์ โดยจะทำงานเหมือนการเรียกใช้ฟังก์ชันในภาษาโปรแกรมแบบดั้งเดิม
- ตัวอย่างเช่น สมมติว่าคุณได้สร้างขั้นตอนที่แชร์ด้วยฟีเจอร์การรักษาความปลอดภัย เช่น การยืนยันคีย์ API, การตรวจสอบโทเค็น OAuth และการปกป้องนิพจน์ทั่วไป ขั้นตอนที่ใช้ร่วมกันนี้แสดงถึงรูปแบบการตรวจสอบคำขอขาเข้า เมื่อใช้นโยบาย Flow callout คุณสามารถเรียกใช้โฟลว์ที่แชร์นั้นจากพร็อกซี API หลายรายการ
- คุณสามารถเรียกใช้ขั้นตอนที่แชร์จากอีกขั้นตอนหนึ่งได้โดยใช้นโยบาย Flow callout จากภายในขั้นตอนที่แชร์
ลองฟัง
ยืนยันคีย์ API ในขั้นตอนที่แชร์
ในตัวอย่างนี้ ระบบจะใช้ขั้นตอนที่แชร์เพื่อทำงานทั่วไปที่เกี่ยวข้องกับความปลอดภัย ขั้นตอนที่แชร์จะตรวจสอบคีย์ API ในหน้านี้ พร็อกซี API และขั้นตอนที่แชร์อื่นๆ จะใช้นโยบาย Flowต้องระบุ เพื่อเรียกเข้าสู่ขั้นตอนที่แชร์นี้ได้
คำจำกัดความของโฟลว์ที่แชร์ต่อไปนี้มีนโยบาย Verify-API-Key
ที่จะทำงานเมื่อมีการเรียกใช้โฟลว์ที่แชร์จากนโยบาย Flowที่แตกต่างกัน ในพร็อกซี 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>
นโยบาย FlowFeed ต่อไปนี้ซึ่งใช้ในพร็อกซี 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>
ส่งพารามิเตอร์ไปยังขั้นตอนที่แชร์
ตัวอย่างนี้แสดงวิธีส่งพารามิเตอร์จากนโยบาย Flow callout ไปยังขั้นตอนที่แชร์ ในที่นี้ นโยบาย Flow Dataflow จะเรียกโฟลว์ที่แชร์ซึ่งออกแบบมาเพื่อเรียกใช้ฟังก์ชันการจัดการสตริงทั่วไป ขั้นตอนที่แชร์ประกอบด้วย JavaScript ที่เชื่อมอินพุตของอินพุต ตัวพิมพ์เล็กกับอินพุต หรือทั้ง 2 อย่าง นโยบาย Flowต้องระบุพารามิเตอร์ที่ระบุอินพุตสตริง เอาต์พุต และสิ่งที่ต้องทำกับอินพุต
นโยบาย FlowText ของ
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
ซึ่งจะทำงานเมื่อมีการเรียกใช้โฟลว์ที่แชร์จากนโยบาย Flowต้องระบุ<?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 จะทำงานจากนโยบาย JavaScript
SharedStringFunctions
สคริปต์นี้ดึงค่าจากตัวแปรที่สร้างขึ้นจากองค์ประกอบParameter
ของนโยบาย Flowต้องระบุ// 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 ไปยังโฟลว์ที่แชร์ จากนั้นไปที่นโยบาย Flow callout ในพร็อกซี API ต้นทาง
การอ้างอิงองค์ประกอบ
องค์ประกอบและแอตทริบิวต์ที่คุณกำหนดค่าในนโยบายนี้ได้มีดังนี้
<FlowCallout async="false" continueOnError="false" enabled="true" name="Flow-Callout-1"> <DisplayName>Custom label used in UI</DisplayName> <SharedFlowBundle>thereferencedsharedflowbundle</SharedFlowBundle> </FlowCallout>
แอตทริบิวต์ <Flow callout>
<FlowCallout async="false" continueOnError="false" enabled="true" name="Flow-Callout-1">
ตารางต่อไปนี้อธิบายแอตทริบิวต์ที่ใช้ร่วมกันในองค์ประกอบระดับบนสุดของนโยบายทั้งหมด
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ |
---|---|---|---|
name |
ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ (ไม่บังคับ) ใช้องค์ประกอบ |
ไม่มีข้อมูล | จำเป็น |
continueOnError |
ตั้งค่าเป็น ตั้งค่าเป็น |
false | ไม่บังคับ |
enabled |
ตั้งค่าเป็น ตั้งค่าเป็น |
จริง | ไม่บังคับ |
async |
แอตทริบิวต์นี้เลิกใช้งานแล้ว |
false | เลิกใช้ |
องค์ประกอบ <DisplayName>
ใช้เพิ่มเติมจากแอตทริบิวต์ name
เพื่อติดป้ายกำกับนโยบายในเครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติที่แตกต่างออกไป
<DisplayName>Policy Display Name</DisplayName>
ค่าเริ่มต้น |
ไม่มีข้อมูล หากคุณไม่ใส่องค์ประกอบนี้ ระบบจะใช้ค่าของแอตทริบิวต์ |
---|---|
การมีบุคคลอยู่ | ไม่บังคับ |
Type | สตริง |
องค์ประกอบ <SharedFlowBundle>
ระบุชื่อขั้นตอนที่แชร์เพื่อเรียก ค่าขององค์ประกอบนี้ควรเหมือนกับค่าของแอตทริบิวต์ชื่อองค์ประกอบ SharedFlowBundle เป้าหมาย
<SharedFlowBundle/>
ในตัวอย่างที่ง่ายที่สุด คุณตั้งชื่อขั้นตอนที่แชร์ที่เรียกเป็นค่าสำหรับองค์ประกอบนี้ กล่าวคือ ค่าขององค์ประกอบนี้ต้องเหมือนกับค่าแอตทริบิวต์ name
ของโฟลว์ที่แชร์
<SharedFlowBundle>Shared-Flow-Name</SharedFlowBundle>
ค่าเริ่มต้น | ไม่มีข้อมูล |
การปรากฏ |
ต้องระบุ |
ประเภท | ไม่มีข้อมูล |
Attributes
ไม่มี
องค์ประกอบ <Parameters>
ระบุพารามิเตอร์และค่า (หรือแหล่งที่มาของค่า) ที่จะส่งผ่านเป็นตัวแปรไปยังขั้นตอนที่แชร์ซึ่งเรียกใช้โดยนโยบายนี้
เมื่อใช้พารามิเตอร์ คุณจะระบุค่า (หรือตัวแปรที่มีค่า) ที่ควรส่งไปยังขั้นตอนที่แชร์ที่นโยบายเรียกใช้ได้ แนวคิดนี้คล้ายกับการระบุพารามิเตอร์ในการเรียกใช้ฟังก์ชัน เช่นเดียวกับพารามิเตอร์ฟังก์ชัน ค่าของพารามิเตอร์ Flowที่แตกต่างกัน อาจแตกต่างกันไปตามบริบทของการเรียกโฟลว์ที่แชร์
พารามิเตอร์ Flower จะแสดงในระหว่างการดำเนินการของขั้นตอนที่แชร์เท่านั้น
ไวยากรณ์
คุณสามารถใช้องค์ประกอบนี้กับรูปแบบไวยากรณ์ใดก็ได้ต่อไปนี้ โปรดทราบว่าในกรณีที่คุณใช้ค่าลิเทอรัล รูปแบบของค่าที่คุณระบุจะขึ้นอยู่กับโค้ดที่ใช้ค่าดังกล่าว
<!- 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>
ตัวอย่าง
พารามิเตอร์ที่ส่งนโยบาย Flowส่วนขยายไฮไลต์ 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>
ค่าเริ่มต้น | ไม่มีข้อมูล |
การปรากฏ |
ต้องระบุ |
ประเภท | ไม่มีข้อมูล |
Attributes
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | Type |
---|---|---|---|---|
ชื่อ | ชื่อของตัวแปรรันไทม์ที่จะสร้างด้วยพารามิเตอร์นี้ | ไม่มี | ต้องระบุ | สตริง |
อ้างอิง |
ตัวแปรที่จะเก็บค่าที่จะใช้ในช่วงรันไทม์ ข้ามแอตทริบิวต์นี้หากคุณกำลังระบุค่าลิเทอรัลที่จะใช้ |
ไม่มี | ไม่บังคับ | สตริง |
value | ค่าที่จะใช้ในตัวแปรรันไทม์ที่สร้างขึ้นด้วยพารามิเตอร์นี้ ข้ามแอตทริบิวต์นี้หากคุณระบุชื่อตัวแปรที่ควรเป็นแหล่งที่มาของค่า | ไม่มี | ไม่บังคับ | สตริง |
องค์ประกอบ <Parameters>
ระบุชุดองค์ประกอบ <Parameter> เพื่อส่งเป็นตัวแปรไปยังขั้นตอนที่แชร์ซึ่งเรียกใช้โดยนโยบายนี้
ไวยากรณ์
<Parameters> <Parameter name="parameter-name" value='parameter-value' /> </Parameters>
ค่าเริ่มต้น | ไม่มีข้อมูล |
การปรากฏ |
ไม่บังคับ |
ประเภท | ไม่มีข้อมูล |
Attributes
ไม่มี
สคีมา
ตัวแปรโฟลว์
ตัวแปรโฟลว์จะเปิดใช้ลักษณะการทำงานแบบไดนามิกของนโยบายและโฟลว์ในระหว่างรันไทม์ โดยอิงตามส่วนหัว HTTP, เนื้อหาข้อความ หรือบริบทโฟลว์ ดูข้อมูลเพิ่มเติมเกี่ยวกับตัวแปรโฟลว์ได้ที่ข้อมูลอ้างอิงตัวแปร
ตัวแปร | คำอธิบาย |
---|---|
|
ขอบเขต: ระหว่างการดำเนินการโฟลว์ที่แชร์ ค่าของแอตทริบิวต์ชื่อของขั้นตอนที่แชร์ |
|
ขอบเขต: ระหว่างการดำเนินการของโฟลว์ที่แชร์ซึ่งแนบอยู่กับ Flow hook ชื่อของ Flow hook |
การอ้างอิงข้อผิดพลาด
ส่วนนี้อธิบายโค้ดข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่แสดงผลและตัวแปรข้อผิดพลาดที่ Edge กำหนดเมื่อนโยบายนี้ทริกเกอร์ข้อผิดพลาด ข้อมูลนี้เป็นสิ่งสำคัญที่ต้องทราบหากคุณกำลังกำหนดกฎข้อผิดพลาดเพื่อจัดการกับข้อผิดพลาด ดูข้อมูลเพิ่มเติมได้ที่สิ่งที่คุณต้องทราบเกี่ยวกับข้อผิดพลาดของนโยบายและการจัดการข้อผิดพลาด
ข้อผิดพลาดเกี่ยวกับรันไทม์
ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อนโยบายทำงาน
รหัสข้อผิดพลาด | สถานะ HTTP | สาเหตุ | แก้ไข |
---|---|---|---|
flow.SharedFlowNotFound |
500 | ไม่มีโฟลว์ที่แชร์ หรือมีโฟลว์ที่แชร์อยู่แต่ไม่ได้ใช้งาน | build |
ข้อผิดพลาดในการทำให้ใช้งานได้
ไม่มีข้อมูล
หัวข้อที่เกี่ยวข้อง
- การสร้างขั้นตอนที่แชร์: ขั้นตอนที่แชร์ซึ่งนำมาใช้ใหม่ได้
- การดำเนินการโฟลว์ที่แชร์ผ่านพร็อกซีหลายรายการ: การแนบโฟลว์ที่แชร์โดยใช้ Flow hook