คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X ข้อมูล
อะไร
นโยบาย ExtractVariant จะแยกเนื้อหาจากคำขอหรือการตอบกลับ และกำหนดค่าของตัวแปรเป็นเนื้อหานั้น คุณดึงข้อมูลบางส่วนของข้อความได้ เช่น ส่วนหัว, เส้นทาง URI, เพย์โหลด JSON/XML, พารามิเตอร์ของฟอร์ม และพารามิเตอร์การค้นหา นโยบายทำงานโดยใช้รูปแบบข้อความกับเนื้อหาข้อความ และเมื่อพบการจับคู่ที่ตรงกันจะตั้งค่าตัวแปรด้วยเนื้อหาข้อความที่ระบุ
แม้ว่าคุณจะใช้นโยบายนี้เพื่อดึงข้อมูลจากคําขอหรือข้อความตอบกลับอยู่บ่อยครั้ง แต่คุณจะใช้นโยบายนี้เพื่อดึงข้อมูลจากแหล่งที่มาอื่นๆ ได้ด้วย รวมถึงเอนทิตีที่สร้างโดยนโยบาย AccessEntity, ออบเจ็กต์ XML หรือออบเจ็กต์ JSON
หลังจากดึงเนื้อหาข้อความที่ระบุแล้ว คุณจะอ้างอิงตัวแปรในนโยบายอื่นๆ เพื่อเป็นส่วนหนึ่งของการประมวลผลคำขอและการตอบกลับได้
วิดีโอ
ดูวิดีโอต่อไปนี้เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับนโยบาย ExtractVariable
วิดีโอ | คำอธิบาย |
---|---|
แยกตัวแปรจากเพย์โหลด XML | แยกตัวแปรจากเพย์โหลด XML โดยใช้นโยบายการแยกตัวแปร |
แยกตัวแปรจากเพย์โหลด JSON | แยกตัวแปรจากเพย์โหลด JSON โดยใช้นโยบายการแยกตัวแปร |
ดึงตัวแปรจากพารามิเตอร์ | ดึงข้อมูลตัวแปรจากพารามิเตอร์ เช่น พารามิเตอร์การค้นหา ส่วนหัว แบบฟอร์ม หรือ URI |
ดึงตัวแปรจากพารามิเตอร์หลายค่า | แยกตัวแปรจากพารามิเตอร์หลายค่า |
แยกตัวแปรจากพารามิเตอร์การค้นหา (คลาสสิก Edge) | ดึงตัวแปรจากพารามิเตอร์การค้นหาโดยใช้ UI ของ แบบคลาสสิก |
แยกตัวแปรจากเพย์โหลด XML หรือ JSON (คลาสสิก Edge) | แยกตัวแปรจากเพย์โหลด XML หรือ JSON โดยใช้ UI ของ Classic Edge |
ลองฟัง
ตัวอย่างโค้ดนโยบายเหล่านี้แสดงวิธีแยกตัวแปรจากอาร์ติแฟกต์ประเภทต่อไปนี้
GitHub
ลิงก์เหล่านี้จะชี้ไปยังตัวอย่างพร็อกซี API ที่ใช้งานได้ ซึ่งคุณจะทำให้และเรียกใช้บน Edge ได้ โดยเครื่องมือดังกล่าวใช้ ExtractVariant และอยู่ในที่เก็บ api-platform-sample ของ Apigee ใน GitHub README อธิบายวิธีใช้ ExtractVariant ในแต่ละกรณี และวิธีใช้งานและเรียกใช้ตัวอย่างแต่ละรายการ
- แยกและกำหนดตัวอย่างตัวแปร (ดึงข้อมูลจากข้อความ JSON และ XML)
- เข้าถึงตัวอย่างเอนทิตี
- ตัวอย่างการใส่เลขหน้าและการแคช
- เปลี่ยนเส้นทางตัวอย่าง URL เป้าหมาย
- ตัวอย่างแมชอัปองค์ประกอบของนโยบาย
URI
<ExtractVariables name="ExtractVariables-1"> <DisplayName>Extract a portion of the url path</DisplayName> <Source>request</Source> <URIPath> <Pattern ignoreCase="true">/accounts/{id}</Pattern> </URIPath> <VariablePrefix>urirequest</VariablePrefix> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </ExtractVariables>
ลองดูโค้ดนโยบายตัวอย่างด้านบน องค์ประกอบ <URIPath>
จะบอกนโยบาย ExtractVariant เพื่อดึงข้อมูลจากเส้นทาง URI องค์ประกอบ <Pattern>
ระบุรูปแบบที่จะใช้กับเส้นทาง URI รูปแบบนี้ถือเป็นเทมเพลตแบบง่ายที่มีวงเล็บปีกกาแสดงถึงส่วนที่แตกต่างกันของเส้นทาง URI
ชื่อของตัวแปรที่จะตั้งค่าจะกำหนดโดยค่าที่ระบุในองค์ประกอบ <VariablePrefix>
รวมถึงค่าที่อยู่ในวงเล็บปีกกา {} ในองค์ประกอบ <Pattern>
ค่าทั้ง 2 ค่าจะต่อกันด้วยจุดเชื่อมต่อ จึงทำให้เป็นชื่อตัวแปรเป็น urirequest.id
เป็นต้น หากไม่มีองค์ประกอบ <VariablePrefix>
ชื่อตัวแปรจะเป็นเพียงค่าที่อยู่ในวงเล็บปีกกาเท่านั้น
ลองดูตัวอย่างโค้ดนโยบายด้านบนซึ่งทำงานกับคำขอที่เข้ามาใหม่ต่อไปนี้
GET http://org1-test.apigee.net/svc1/accounts/12797282
สมมติว่าเส้นทางพื้นฐานสำหรับพร็อกซี API คือ /svc1
เมื่อ Apigee Edge นำโค้ดนโยบาย ExtractVariant ด้านบนไปใช้กับคำขอที่เข้ามาใหม่ ระบบจะตั้งค่าตัวแปร urirequest.id
เป็น 12797282
หลังจากที่ Apigee Edge ใช้งานนโยบายแล้ว นโยบายหรือโค้ดที่ตามมาในขั้นตอนการประมวลผลจะอ้างอิงตัวแปรชื่อ urirequest.id
เพื่อรับค่าสตริง 12797282
ตัวอย่างเช่น นโยบาย AssignMessage ต่อไปนี้จะฝังค่าของตัวแปรนั้นลงในเพย์โหลดของข้อความคำขอใหม่
<AssignMessage async="false" continueOnError="false" enabled="true" name="AssignPayload"> <DisplayName>AssignPayload</DisplayName> <Set> <Payload contentType="text/xml"> <IdExtractedFromURI>{urirequest.id}</IdExtractedFromURI> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="true" transport="http" type="request">newRequest</AssignTo> </AssignMessage>
พารามิเตอร์การค้นหา
<ExtractVariables name="ExtractVariables-2"> <DisplayName>Extract a value from a query parameter</DisplayName> <Source>request</Source> <QueryParam name="code"> <Pattern ignoreCase="true">DBN{dbncode}</Pattern> </QueryParam> <VariablePrefix>queryinfo</VariablePrefix> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </ExtractVariables>
ลองดูตัวอย่างโค้ดนโยบายด้านบนซึ่งทำงานกับคำขอที่เข้ามาใหม่ต่อไปนี้
GET http://org1-test.apigee.net/accounts/12797282?code=DBN88271
เมื่อ Apigee Edge นำโค้ดนโยบาย ExtractVariant ด้านบนไปใช้กับคำขอที่เข้ามาใหม่ โดยจะตั้งค่าตัวแปร queryinfo.dbncode
เป็น 88271
หลังจากที่ Apigee Edge ใช้งานนโยบายแล้ว นโยบายหรือโค้ดที่ตามมาในขั้นตอนการประมวลผลจะอ้างอิงตัวแปรชื่อ queryinfo.dbncode
เพื่อรับค่าสตริง 88271
ขณะนี้คุณเข้าถึงตัวแปร queryinfo.dbncode
ในพร็อกซีได้แล้ว
ตัวอย่างเช่น นโยบาย AssignMessage ต่อไปนี้จะคัดลอกไปยังเพย์โหลดของคำขอ
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetQP</DisplayName> <Set> <Payload contentType="text/xml"> <ExtractQP>{queryinfo.dbncode}</ExtractQP> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
หลายพารามิเตอร์
<ExtractVariables name="ExtractVariables-2"> <DisplayName>Extract a value from a query parameter</DisplayName> <Source>request</Source> <QueryParam name="w"> <Pattern ignoreCase="true">{firstWeather}</Pattern> </QueryParam> <QueryParam name="w.2"> <Pattern ignoreCase="true">{secondWeather}</Pattern> </QueryParam> <VariablePrefix>queryinfo</VariablePrefix> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </ExtractVariables>
สมมติว่าการออกแบบ API ช่วยให้คุณระบุพารามิเตอร์การค้นหาหลายรายการได้ในชื่อเดียวกัน คุณใช้นโยบายนี้เพื่อดึงค่าของพารามิเตอร์การค้นหา "w" หลายอินสแตนซ์ได้ หากต้องการอ้างอิงพารามิเตอร์การค้นหาเหล่านี้ในนโยบาย ExtractVariable คุณจะต้องใช้ดัชนีที่อินสแตนซ์แรกของพารามิเตอร์การค้นหาไม่มีดัชนี พารามิเตอร์ที่ 2 อยู่ที่ดัชนี 2 ตัวที่ 3 อยู่ที่ดัชนี 3 เป็นต้น
ลองดูตัวอย่างโค้ดนโยบายด้านบนซึ่งทำงานกับคำขอที่เข้ามาใหม่ต่อไปนี้
GET http://org1-test.apigee.net/weather?w=Boston&w=Chicago
เมื่อ Apigee Edge นำโค้ดนโยบาย ExtractVariant ด้านบนไปใช้กับคำขอที่เข้ามาใหม่ โดยจะตั้งค่าตัวแปร queryinfo.firstWeather
เป็น Boston
และตัวแปร queryInfo.secondWeather
เป็น Chicago
ขณะนี้คุณเข้าถึงตัวแปร queryinfo.firstWeather
และ queryinfo.secondWeather ในพร็อกซีได้แล้ว ตัวอย่างเช่น นโยบาย AssignMessage ต่อไปนี้จะคัดลอกไปยังเพย์โหลดของคำขอ
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetQP</DisplayName> <Set> <Payload contentType="text/xml"> <ExtractQP1>{queryinfo.firstWeather}</ExtractQP1> <ExtractQP2>{queryinfo.secondWeather}</ExtractQP2> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
ส่วนหัว
<ExtractVariables name='ExtractVariable-OauthToken'> <Source>request</Source> <Header name="Authorization"> <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern> </Header> <VariablePrefix>clientrequest</VariablePrefix> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </ExtractVariables>
สมมติว่า API ของคุณใช้โทเค็นสำหรับผู้ถือ OAuth v2.0 ลองใช้โค้ดนโยบายตัวอย่างด้านบนกับคำขอที่มีโทเค็น OAuth v2.0 ซึ่งมีส่วนหัวดังนี้ Authorization: Bearer TU08xptfFfeM7aS0xHqlxTgEAdAM.
ในฐานะผู้ออกแบบ API สมมติว่าคุณต้องการใช้ค่าโทเค็น (ไม่ใช่ส่วนหัวทั้งหมด) เป็นคีย์ในการค้นหาแคช คุณสามารถใช้โค้ดนโยบาย ExtractVariant ด้านบนเพื่อดึงข้อมูลโทเค็นได้
เมื่อ Apigee Edge นำโค้ดนโยบาย ExtractVariant ด้านบนไปใช้กับส่วนหัวนี้ ซึ่งจะตั้งค่าตัวแปร clientrequest.oauthtoken
เป็น TU08xptfFfeM7aS0xHqlxTgEAdAM
ตอนนี้คุณเข้าถึงตัวแปร clientrequest.oauthtoken
ในพร็อกซีได้แล้ว ตัวอย่างเช่น นโยบาย AssignMessage ต่อไปนี้จะคัดลอกไปยังเพย์โหลดของคำขอ
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetHeader</DisplayName> <Set> <Payload contentType="text/xml"> <ExtractHeader>{clientrequest.oauthtoken}</ExtractHeader> </Payload> </Set> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
JSON
<ExtractVariables name="ExtractVariables-3"> <Source>response</Source> <JSONPayload> <Variable name="latitude" type="float"> <JSONPath>$.results[0].geometry.location.lat</JSONPath> </Variable> <Variable name="longitude" type="float"> <JSONPath>$.results[0].geometry.location.lng</JSONPath> </Variable> </JSONPayload> <VariablePrefix>geocoderesponse</VariablePrefix> </ExtractVariables>
<JSONPayload>
$
ลองพิจารณาเปย์โหลดการตอบสนอง JSON ต่อไปนี้
{ "results": [{ "geometry": { "location": { "lat": 37.42291810, "lng": -122.08542120 }, "location_type": "ROOFTOP", "viewport": { "northeast": { "lat": 37.42426708029149, "lng": -122.0840722197085 }, "southwest": { "lat": 37.42156911970850, "lng": -122.0867701802915 } } } }] }
เมื่อ Apigee Edge นำโค้ดนโยบาย ExtractVariant ด้านบนไปใช้กับข้อความ JSON นี้ ซึ่งจะตั้งค่าตัวแปร 2 รายการ ได้แก่ geocoderesponse.latitude
และ geocoderesponse.longitude
ตัวแปรทั้ง 2 รายการใช้คํานําหน้าตัวแปรเดียวกันคือ geocoderesponse
มีการระบุคำต่อท้ายสำหรับตัวแปรเหล่านี้อย่างชัดแจ้งโดยแอตทริบิวต์ name
ขององค์ประกอบ <Variable>
ตัวแปร geocoderesponse.latitude
จะได้รับค่า 37.42291810
ตัวแปร geocoderesponse.longitude
จะได้รับค่า -122.08542120
ตอนนี้คุณเข้าถึงตัวแปร geocoderesponse.latitude
ในพร็อกซีได้แล้ว เช่น นโยบาย AssignMessage ต่อไปนี้จะคัดลอกข้อความไปยังส่วนหัวชื่อ "ละติจูด" ในการตอบกลับ
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetJSONVar</DisplayName> <Add> <Headers> <Header name="latitude">{geocoderesponse.latitude}</Header> </Headers> </Add> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="response"/> </AssignMessage>
XML
<ExtractVariables name="ExtractVariables-4"> <Source>response</Source> <XMLPayload> <Namespaces> <Namespace prefix="dir">urn:43BFF88D-D204-4427-B6BA-140AF393142F</Namespace> </Namespaces> <Variable name="travelmode" type="string"> <XPath>/dir:Directions/dir:route/dir:leg/dir:step/@mode</XPath> </Variable> <Variable name="duration" type="string"> <XPath>/dir:Directions/dir:route/dir:leg/dir:step/dir:duration/dir:value</XPath> </Variable> <Variable name="timeunit" type="string"> <XPath>/dir:Directions/dir:route/dir:leg/dir:step/dir:duration/dir:text</XPath> </Variable> </XMLPayload> <VariablePrefix>directionsresponse</VariablePrefix> </ExtractVariables>
<XMLPayload>
โปรดพิจารณาเพย์โหลดการตอบสนอง XML ต่อไปนี้
<Directions xmlns="urn:43BFF88D-D204-4427-B6BA-140AF393142F"> <status>OK</status> <route> <summary>I-40 W</summary> <leg> <step mode="DRIVING"> <start_location> <lat>41.8507300</lat> <lng>-87.6512600</lng> </start_location> <end_location> <lat>41.8525800</lat> <lng>-87.6514100</lng> </end_location> <duration> <value>19</value> <text>minutes</text> </duration> </step> </leg> </route> </Directions>
เมื่อ Apigee Edge นำโค้ดนโยบาย ExtractVariable ด้านบนไปใช้กับข้อความ XML นี้ ซึ่งจะตั้งค่าตัวแปร 3 รายการ ได้แก่ directionsresponse.travelmode,
directionsresponse.duration
และ directionsresponse.timeunit
ตัวแปรทั้งหมดใช้คำนำหน้าตัวแปรเดียวกันคือ directionsresponse
คำต่อท้ายของตัวแปรเหล่านี้มีการระบุไว้อย่างชัดแจ้งโดยแอตทริบิวต์ name
ขององค์ประกอบ <Variable>
ตัวแปร directionsresponse.travelmode
จะได้รับค่า DRIVING
ตัวแปร directionsresponse.duration
จะได้รับค่า 19
ตัวแปร directionsresponse.timeunit
จะได้รับค่า minutes
ตอนนี้คุณเข้าถึงตัวแปร directionresponse.travelmode
ในพร็อกซีได้แล้ว ตัวอย่างเช่น นโยบาย AssignMessage ต่อไปนี้จะคัดลอกไปยังส่วนหัวชื่อ "tmode" ในการตอบกลับ
<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath"> <DisplayName>GetXMLVar</DisplayName> <Add> <Headers> <Header name="tmode">{directionsresponse.travelmode}</Header> </Headers> </Add> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
เกี่ยวกับนโยบาย ExtractVariant
นักพัฒนา API สร้างพร็อกซี API ที่มีลักษณะการทำงานแตกต่างกันไปตามเนื้อหาของข้อความ ซึ่งรวมถึงส่วนหัว, เส้นทาง URI, เพย์โหลด และพารามิเตอร์การค้นหา พร็อกซีจะดึงเนื้อหาบางส่วนออกมาเพื่อใช้ในคำสั่งเงื่อนไข หากต้องการดำเนินการดังกล่าว ให้ใช้นโยบาย ExtractVariable
เมื่อกำหนดนโยบาย ExtractVariable ให้เลือกตัวเลือกดังนี้
- ชื่อตัวแปรที่จะตั้งค่า
- แหล่งที่มาของตัวแปร
- จำนวนตัวแปรที่จะดึงและตั้งค่า
เมื่อดำเนินการ นโยบายจะใช้รูปแบบข้อความกับเนื้อหา และเมื่อพบการจับคู่ที่ตรงกัน ระบบจะตั้งค่าตัวแปรที่กำหนดกับเนื้อหา จากนั้นนโยบายและโค้ดอื่นๆ จะสามารถใช้ตัวแปรเหล่านั้นเพื่อเปิดใช้ลักษณะการทำงานแบบไดนามิกหรือส่งข้อมูลธุรกิจไปยังการวิเคราะห์ Edge API
หากต้องการดูวิธีใช้ ExtractVariable เพื่อสร้างรายงาน Analytics ที่อิงตามเนื้อหาได้ที่ วิเคราะห์เนื้อหาข้อความ API โดยใช้การวิเคราะห์ที่กำหนดเอง
ขอบเขต
ตัวแปรที่ตั้งค่าด้วยนโยบาย ExtractVariant จะมีขอบเขตส่วนกลาง กล่าวคือ หลังจากที่นโยบาย ExtractVariable กำหนดตัวแปรใหม่ คุณจะเข้าถึงตัวแปรนั้นจากนโยบายหรือโค้ดใดก็ได้ในขั้นตอนใดๆ ของโฟลว์ (ซึ่งทำงานหลังนโยบาย ExtractVariable) ซึ่งรวมถึง
- PreFlow: ProxyEndpoint และ TargetEndpoint (คําขอและการตอบกลับ)
- PostFlow: ProxyEndpoint และ TargetEndpoint (คําขอและการตอบกลับ)
- PostClientFlow: ProxyEndpoint (การตอบสนองเท่านั้น โดยใช้นโยบายการบันทึกข้อความ)
- ขั้นตอนข้อผิดพลาด
เกี่ยวกับการจับคู่และการสร้างตัวแปร
นโยบาย ExtractVariable จะดึงข้อมูลจากคำขอหรือการตอบกลับแล้วเขียนข้อมูลดังกล่าวลงในตัวแปร สำหรับข้อมูลแต่ละประเภทที่ดึงได้ เช่น เส้นทาง URI หรือข้อมูล XML คุณจะต้องระบุรูปแบบที่จะจับคู่และชื่อของตัวแปรที่ใช้เก็บข้อมูลที่ดึงมา
อย่างไรก็ตาม วิธีการทำงานของการจับคู่รูปแบบจะขึ้นอยู่กับแหล่งที่มาของการดึงข้อมูล ส่วนต่อไปนี้จะอธิบายหมวดหมู่ข้อมูลพื้นฐาน 2 หมวดหมู่ที่คุณดึงออกได้
การจับคู่เส้นทาง URI, พารามิเตอร์การค้นหา, ส่วนหัว, พารามิเตอร์ของฟอร์ม และตัวแปร
เมื่อดึงข้อมูลจากเส้นทาง URI, พารามิเตอร์การค้นหา, ส่วนหัว, พารามิเตอร์ของฟอร์ม และตัวแปร ให้ใช้แท็ก <Pattern> เพื่อระบุรูปแบบที่จะจับคู่ เช่น ตัวอย่างนโยบายต่อไปนี้แสดงรูปแบบที่ตรงกันเพียงรายการเดียวสำหรับเส้นทาง URI
<ExtractVariables name="ExtractVariables-1"> <Source>request</Source> <URIPath> <Pattern ignoreCase="true">/a/{pathSeg}</Pattern> </URIPath> <VariablePrefix>urirequest</VariablePrefix> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </ExtractVariables>
ในตัวอย่างนี้ ตัวแปร urirequest.pathSeg มีการตั้งค่าเป็นอะไรก็ได้ที่ปรากฏในพร็อกซี.pathsuffix หลัง "/a/" ตัวอย่างเช่น สมมติว่าเส้นทางฐานสำหรับพร็อกซี API คือ /basepath/v1 หากมีคำขอขาเข้าไปยัง http://myCo.com/basepath/v1/a/b ระบบจะตั้งค่าตัวแปรเป็น "b"
การระบุรูปแบบหลายรายการ
คุณสามารถระบุรูปแบบจำนวนมากที่จะจับคู่ โดยสอดคล้องกับแท็ก <Pattern> โดยที่
- ระบบจะทดสอบรูปแบบทั้งหมดเพื่อหาการจับคู่
- หากไม่มีรูปแบบที่ตรงกัน นโยบายจะไม่ดำเนินการใดๆ และจะไม่สร้างตัวแปร
- หากมีรูปแบบที่ตรงกันมากกว่า 1 รูปแบบ ระบบจะใช้รูปแบบที่มีกลุ่มเส้นทางยาวที่สุดสำหรับการแยก
- หากรูปแบบที่ตรงกัน 2 รูปแบบมีกลุ่มเส้นทางที่ยาวที่สุดเหมือนกัน ระบบจะใช้รูปแบบที่ระบุก่อนในนโยบายสำหรับการดึงข้อมูล
ในตัวอย่างถัดไป คุณสร้างนโยบายที่มีรูปแบบที่ตรงกัน 3 รูปแบบสำหรับเส้นทาง URI ดังนี้
<ExtractVariables name="ExtractVariables-1"> <Source>request</Source> <URIPath> <Pattern ignoreCase="true">/a/{pathSeg}</Pattern> <Pattern ignoreCase="true">/a/b/{pathSeg}</Pattern> <Pattern ignoreCase="true">/a/b/c/{pathSeg}</Pattern> </URIPath> <VariablePrefix>urirequest</VariablePrefix> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </ExtractVariables>
สมมติว่าสำหรับพร็อกซี API ที่มีเส้นทางฐานเป็น /basepath/v1 URL คำขอขาเข้าไปยังพร็อกซี API มีลักษณะดังนี้
http://myCo.com/basepath/v1/a/b
ในตัวอย่างนี้ รูปแบบแรกตรงกับ URI และตัวแปร urirequest.pathSeg ตั้งค่าเป็น "b"
หาก URL ของคำขอคือ:
http://myCo.com/basepath/v1/a/b/c/d
...รูปแบบที่ 3 จะตรงกับตัวแปร urirequest.pathSeg ที่ตั้งค่าเป็น "d"
การระบุรูปแบบด้วยตัวแปรหลายรายการ
คุณสามารถระบุตัวแปรได้หลายรายการในรูปแบบที่ตรงกัน เช่น คุณระบุรูปแบบการจับคู่ที่มีตัวแปร 2 รายการดังนี้
<ExtractVariables name="ExtractVariables-1"> <Source>request</Source> <URIPath> <Pattern ignoreCase="true">/a/{pathSeg}</Pattern> <Pattern ignoreCase="true">/a/b/{pathSeg}</Pattern> <Pattern ignoreCase="true">/a/{pathSeg1}/c/{pathSeg2}</Pattern> </URIPath> <VariablePrefix>urirequest</VariablePrefix> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </ExtractVariables>
สมมติให้พร็อกซี API มีเส้นทางฐานเป็น /basepath/v1 สำหรับ URL คำขอขาเข้าอีกครั้งดังนี้
http://myCo.com/basepath/v1/a/b/c/d
...ตัวแปร urirequest.pathSeg1 ตั้งค่าเป็น "b" และตัวแปร urirequest.pathSeg2 ตั้งค่าเป็น "d"
การจับคู่อินสแตนซ์หลายรายการในรูปแบบ
นอกจากนี้ คุณยังจับคู่รูปแบบในกรณีที่มีหลายรายการที่มีชื่อเดียวกันได้ เช่น คุณสร้างคำขอที่มีพารามิเตอร์การค้นหาหลายรายการหรือมีส่วนหัวหลายรายการที่มีชื่อเดียวกันได้ คำขอต่อไปนี้มีพารามิเตอร์การค้นหา 2 รายการชื่อ "w":
http://myCo.com/basepath/v1/a/b/c/d?w=1&w=2
การอ้างอิงพารามิเตอร์การค้นหาเหล่านี้ในนโยบาย ExtractVariable คือการที่คุณใช้ดัชนีโดยที่อินสแตนซ์แรกของพารามิเตอร์การค้นหาไม่มีดัชนี อินสแตนซ์ที่ 2 อยู่ที่ดัชนี 2 พารามิเตอร์ที่ 2 อยู่ที่ดัชนี 3 เป็นต้น ตัวอย่างเช่น นโยบายต่อไปนี้จะแยกค่าของพารามิเตอร์การค้นหาที่ 2 ชื่อ "w" ในคำขอ
<ExtractVariables name="ExtractVariables-1"> <Source>request</Source> <QueryParam name="w.2"> <Pattern ignoreCase="true">{secondW}</Pattern> </QueryParam> <VariablePrefix>urirequest</VariablePrefix> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> </ExtractVariables>
ตัวแปร urirequest.secondW ถูกตั้งค่าเป็น "2" หากไม่มีพารามิเตอร์การค้นหาที่ 2 ในคําขอ ตัวแปร urirequest.secondW จะว่างเปล่า ใช้การจัดทำดัชนีเมื่อใดก็ตามที่มีหลายรายการที่ใช้ชื่อเดียวกันในคำขอ
การใช้สัญลักษณ์พิเศษในลาย
เมื่อจับคู่เส้นทาง URI แล้ว คุณจะใช้อักขระไวลด์การ์ด "*" และ "**" ในรูปแบบได้ดังนี้
- "*" ตรงกับส่วนใดก็ได้ของเส้นทาง
- "**" ตรงกับส่วนต่างๆ ของเส้นทาง
ตัวอย่างเช่น คุณต้องระบุรูปแบบให้กับองค์ประกอบ <URIPath> ดังที่แสดงด้านล่าง
<URIPath> <Pattern ignoreCase="true">/a/*/{id}</Pattern> <Pattern ignoreCase="true">/a/**/{id}</Pattern> </URIPath>
รูปแบบแรกจะจับคู่คำขอที่มี pathuffix (ส่วนของเส้นทาง URI ที่ตามหลัง Basepath) เช่น "/a/b/c", "/a/foo/bar" เป็นต้น รูปแบบที่ 2 จะจับคู่จำนวนส่วนของเส้นทางที่อยู่หลัง "/a/" เช่น "/a/foo/bar/baz/c" รวมทั้ง "/a/b/c" และ ".a/foo/bar"
เมื่อระบุรูปแบบให้กับพารามิเตอร์การค้นหา ส่วนหัว และพารามิเตอร์ของฟอร์ม อักขระ "*" จะระบุให้จับคู่กับอักขระจำนวนเท่าใดก็ได้ ตัวอย่างเช่น เมื่อจับคู่ส่วนหัว ให้ระบุรูปแบบเป็น
*;charset={encoding}
รูปแบบนี้ตรงกับค่า "text/xml;charset=UTF-16" และ "application/xml;charset=ASCII"
หากค่าที่ส่งไปยังนโยบาย ExtractVariant มีสัญลักษณ์พิเศษ เช่น "{" ให้ใช้อักขระ "%" เพื่อ Escape ตัวอย่างต่อไปนี้ใช้อักขระหลีก "{" และ "}" ในรูปแบบเนื่องจากใช้เป็นอักขระตามตัวอักษรในค่าของพารามิเตอร์การค้นหา
<QueryParam> <Pattern ignoreCase="true">%{user%} {name}</Pattern> </QueryParam>
ในตัวอย่างนี้ รูปแบบจะตรงกับค่า "{user} Steve" แต่ไม่ตรงกับค่า "user Steve"
JSON และ XML ที่ตรงกัน
เมื่อดึงข้อมูลจาก JSON และ XML คุณต้องระบุแท็ก <Variable> อย่างน้อย 1 รายการในนโยบาย แท็ก <Variable> ระบุชื่อตัวแปรปลายทางที่เก็บข้อมูลที่ดึงข้อมูล และ JsonPath (JSON) หรือ XPATH (XML) สําหรับข้อมูลที่ดึง
แท็ก <Variable> ทั้งหมดในนโยบายจะได้รับการประเมินเพื่อให้คุณป้อนข้อมูลตัวแปรหลายรายการจากนโยบายเดียวได้ หากแท็ก <Variable> ไม่ได้ประเมิน กับช่องที่ถูกต้องใน JSON หรือ XML ระบบจะไม่สร้างตัวแปรที่เกี่ยวข้อง
ตัวอย่างต่อไปนี้แสดงนโยบาย ExtractVariant ที่เติมตัวแปร 2 รายการจากเนื้อหา JSON ของการตอบกลับ
<ExtractVariables name="ExtractVariables-3"> <Source>response</Source> <JSONPayload> <Variable name="latitude" type="float"> <JSONPath>$.results[0].geometry.location.lat</JSONPath> </Variable> <Variable name="longitude" type="float"> <JSONPath>$.results[0].geometry.location.lng</JSONPath> </Variable> </JSONPayload> <VariablePrefix>geocoderesponse</VariablePrefix> </ExtractVariables>
เขียนไปยังตัวแปรเดียวกันในหลายตำแหน่ง
โปรดระมัดระวังเมื่อเลือกชื่อตัวแปรที่จะตั้งค่า นโยบายจะดำเนินการตามลำดับตั้งแต่รูปแบบการดึงข้อมูลครั้งแรกไปจนถึงรูปแบบสุดท้าย หากนโยบายเขียนค่าจากหลายตำแหน่งไปยังตัวแปรเดียวกัน การเขียนสุดท้ายในนโยบายจะกำหนดค่าของตัวแปร (นี่คือสิ่งที่คุณต้องการ)
เช่น คุณต้องการแยกค่าโทเค็นที่ส่งได้ในพารามิเตอร์การค้นหาหรือในส่วนหัวดังที่แสดงด้านล่าง
<!-- If token only in query param, the query param determines the value. If token is found in both the query param and header, header sets value. --> <QueryParam name="token"> <Pattern ignoreCase="true">{tokenValue}</Pattern> </QueryParam> <!-- Overwrite tokenValue even if it was found in query parameter. --> <Header name="Token"> <Pattern ignoreCase="true">{tokenValue}</Pattern> </Header>
การควบคุมสิ่งที่จะเกิดขึ้นเมื่อไม่มีการจับคู่
หากรูปแบบไม่ตรงกัน ระบบจะไม่สร้างตัวแปรที่เกี่ยวข้อง ดังนั้นหากมีนโยบายอื่นอ้างอิงตัวแปร ก็อาจเกิดข้อผิดพลาดได้
ตัวเลือกหนึ่งคือการตั้งค่า <IgnoreUnresolvedVariables>
เป็น "จริง" ในนโยบายที่อ้างอิงตัวแปรเพื่อกำหนดค่านโยบายให้ถือว่าตัวแปรที่แปลงไม่ได้เป็นสตริงว่าง (Null) ดังนี้
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
การอ้างอิงองค์ประกอบ
การอ้างอิงองค์ประกอบจะอธิบายองค์ประกอบและแอตทริบิวต์ของนโยบาย ExtractVariant
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1"> <DisplayName>Extract Variables 1</DisplayName> <Source clearPayload="true|false">request</Source> <VariablePrefix>myprefix</VariablePrefix> <IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables> <URIPath> <Pattern ignoreCase="false">/accounts/{id}</Pattern> </URIPath> <QueryParam name="code"> <Pattern ignoreCase="true">DBN{dbncode}</Pattern> </QueryParam> <Header name="Authorization"> <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern> </Header> <FormParam name="greeting"> <Pattern>hello {user}</Pattern> </FormParam> <Variable name="request.content"> <Pattern>hello {user}</Pattern> </Variable> <JSONPayload> <Variable name="name"> <JSONPath>{example}</JSONPath> </Variable> </JSONPayload> <XMLPayload stopPayloadProcessing="false"> <Namespaces/> <Variable name="name" type="boolean"> <XPath>/test/example</XPath> </Variable> </XMLPayload> </ExtractVariables>
แอตทริบิวต์ <ExtractVariable>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
ตารางต่อไปนี้อธิบายแอตทริบิวต์ที่ใช้ร่วมกันในองค์ประกอบระดับบนสุดของนโยบายทั้งหมด
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ |
---|---|---|---|
name |
ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ (ไม่บังคับ) ใช้องค์ประกอบ |
ไม่มีข้อมูล | จำเป็น |
continueOnError |
ตั้งค่าเป็น ตั้งค่าเป็น |
false | ไม่บังคับ |
enabled |
ตั้งค่าเป็น ตั้งค่าเป็น |
จริง | ไม่บังคับ |
async |
แอตทริบิวต์นี้เลิกใช้งานแล้ว |
false | เลิกใช้ |
องค์ประกอบ <DisplayName>
ใช้เพิ่มเติมจากแอตทริบิวต์ name
เพื่อติดป้ายกำกับนโยบายในเครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติที่แตกต่างออกไป
<DisplayName>Policy Display Name</DisplayName>
ค่าเริ่มต้น |
ไม่มีข้อมูล หากคุณไม่ใส่องค์ประกอบนี้ ระบบจะใช้ค่าของแอตทริบิวต์ |
---|---|
การมีบุคคลอยู่ | ไม่บังคับ |
Type | สตริง |
องค์ประกอบ <Source>
(ไม่บังคับ) ระบุตัวแปรที่จะแยกวิเคราะห์ ค่าของ <Source>
จะมีค่าเริ่มต้นเป็น message
ค่า message
คำนึงถึงบริบท ในขั้นตอนการส่งคำขอ message
จะแปลค่าข้อความคำขอ ในขั้นตอนการตอบกลับ message
จะแก้ไขเป็นข้อความตอบกลับ
แม้ว่าคุณจะใช้นโยบายนี้เพื่อดึงข้อมูลจากคําขอหรือข้อความตอบกลับบ่อยครั้ง แต่คุณจะใช้นโยบายนี้เพื่อดึงข้อมูลจากตัวแปรใดก็ได้ ตัวอย่างเช่น คุณอาจใช้เพื่อดึงข้อมูลจากเอนทิตีที่สร้างโดยนโยบาย AccessEntity จากข้อมูลที่นโยบายคำขอราคาเสนอบริการแสดงผล หรือดึงข้อมูลจากออบเจ็กต์ XML หรือ JSON
หากแก้ไข <Source>
ไม่ได้ หรือแปลงเป็นประเภทที่ไม่ใช่ข้อความ
นโยบายจะไม่ตอบกลับ
<Source clearPayload="true|false">request</Source>
ค่าเริ่มต้น: | ข้อความ |
สถานที่ตั้ง: | ไม่บังคับ |
ประเภท: | สตริง |
Attributes
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | Type |
---|---|---|---|---|
clearPayload |
ตั้งค่าเป็น true หากต้องการล้างเพย์โหลดที่ระบุใน <Source> หลังจากที่ดึงข้อมูลจากเพย์โหลดแล้ว |
false |
ไม่บังคับ | บูลีน |
องค์ประกอบ <VariablePrefix>
(ไม่บังคับ) สร้างชื่อตัวแปรที่สมบูรณ์ด้วยการรวม <VariablePrefix>
, จุด และชื่อที่คุณกำหนดใน {วงเล็บปีกกา} ในองค์ประกอบ <Pattern>
หรือองค์ประกอบ <Variable> เช่น myprefix.id
, myprefix.dbncode
หรือ myprefix.oauthtoken.
<VariablePrefix>myprefix</VariablePrefix>
ตัวอย่างเช่น สมมติว่าค่าของชื่อคือ "ผู้ใช้"
- หากไม่ได้ระบุ
<VariablePrefix>
ระบบจะกำหนดค่าที่ดึงมาให้กับตัวแปรชื่อuser
- หากระบุ
<VariablePrefix>
เป็น myprefix ระบบจะกำหนดค่าที่แยกออกมาให้กับตัวแปรชื่อmyprefix.user
ค่าเริ่มต้น: | ไม่มีข้อมูล |
สถานที่ตั้ง: | ไม่บังคับ |
ประเภท: | สตริง |
องค์ประกอบ < ignoreUnresolvedVariable>
(ไม่บังคับ) ตั้งค่าเป็น true
เพื่อทำให้ตัวแปรที่แปลงไม่ได้เป็นสตริงว่าง (Null) ตั้งค่าเป็น false
หากต้องการให้นโยบายแสดงข้อผิดพลาดเมื่อแก้ไขตัวแปรที่อ้างอิงไม่ได้
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
ค่าเริ่มต้น: | เท็จ |
สถานที่ตั้ง: | ไม่บังคับ |
ประเภท: | บูลีน |
หากการอ้างอิง XPath ไม่ได้รับการแก้ไขใน <XMLPayload>
นโยบายจะแสดงข้อผิดพลาดต่อไปนี้
{ "fault":{ "faultstring":"Unresolved xpath path in policy policy_name.", "detail":{ "errorcode":"steps.extractvariables.InvalidXPath" } } }
อีลิเมนต์ <URIPath>
(ไม่บังคับ แต่ดูข้อมูลเพิ่มเติมได้ที่แถว "การแสดงข้อมูล" ในตารางด้านล่าง) ดึงค่าจากพร็อกซี.pathsuffix ของข้อความต้นทางคําขอ เส้นทางที่ใช้กับรูปแบบคือ protocol.pathsuffix ซึ่งไม่รวม Basepath สำหรับพร็อกซี API หากข้อความต้นฉบับเปลี่ยนเป็นการตอบกลับประเภทข้อความ องค์ประกอบนี้จะไม่ดําเนินการใดๆ
<URIPath> <Pattern ignoreCase="false">/accounts/{id}</Pattern> </URIPath>
คุณสามารถใช้องค์ประกอบ <Pattern> หลายรายการดังนี้
<URIPath> <Pattern ignoreCase="false">/accounts/{id}</Pattern> <Pattern ignoreCase="false">/accounts/{id}/transactions/{index}</Pattern> </URIPath>
ค่าเริ่มต้น: | ไม่มีข้อมูล |
สถานที่ตั้ง: | ไม่บังคับ อย่างไรก็ตาม คุณต้องใส่ข้อมูลต่อไปนี้อย่างน้อย 1 รายการ
<URIPath> , <QueryParam> , <Header> ,
<FormParam> , <JSONPayload> หรือ
<XMLPayload>. |
ประเภท: | ไม่มีข้อมูล |
Attributes
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | Type |
---|---|---|---|---|
ignoreCase | ระบุเพื่อละเว้นตัวพิมพ์เล็กและใหญ่เมื่อจับคู่รูปแบบ |
false |
ไม่บังคับ | บูลีน |
องค์ประกอบ <QueryParam>
(ไม่บังคับ แต่ดูข้อมูลเพิ่มเติมได้ที่แถว "การแสดงข้อมูล" ในตารางด้านล่าง) ดึงค่าจากพารามิเตอร์การค้นหาที่ระบุของข้อความต้นทางคําขอ หากข้อความต้นฉบับเปลี่ยนเป็นการตอบกลับประเภทข้อความ องค์ประกอบนี้จะไม่ดำเนินการใดๆ
<QueryParam name="code"> <Pattern ignoreCase="true">DBN{dbncode}</Pattern> </QueryParam>
หากพารามิเตอร์การค้นหาหลายรายการมีชื่อเดียวกัน ให้ใช้ดัชนีเพื่ออ้างอิงพารามิเตอร์ ดังนี้
<QueryParam name="w.2"> <Pattern ignoreCase="true">{secondW}</Pattern> </QueryParam>
ค่าเริ่มต้น: | ไม่มีข้อมูล |
สถานที่ตั้ง: | ไม่บังคับ อย่างไรก็ตาม คุณต้องใส่ข้อมูลต่อไปนี้อย่างน้อย 1 รายการ
<URIPath> , <QueryParam> , <Header> ,
<FormParam> , <JSONPayload> หรือ
<XMLPayload>. |
ประเภท: | ไม่มีข้อมูล |
Attributes
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | Type |
---|---|---|---|---|
ชื่อ | ระบุชื่อของพารามิเตอร์การค้นหา หากพารามิเตอร์การค้นหาหลายรายการมีชื่อเดียวกัน ให้ใช้การอ้างอิงที่จัดทำดัชนี ซึ่งอินสแตนซ์แรกของพารามิเตอร์การค้นหาไม่มีดัชนี พารามิเตอร์ที่ 2 อยู่ที่ดัชนี 2 พารามิเตอร์ที่ 3 ที่ดัชนี 3 เป็นต้น |
ไม่มีข้อมูล |
จำเป็น | สตริง |
องค์ประกอบ <Header>
(ไม่บังคับ แต่ดูข้อมูลเพิ่มเติมได้ที่แถว "การแสดงข้อมูล" ในตารางด้านล่าง) ดึงค่าจากส่วนหัว HTTP ที่ระบุของข้อความคำขอหรือการตอบกลับที่ระบุ หากส่วนหัวหลายรายการมีชื่อเดียวกัน ระบบจะจัดเก็บค่าของส่วนหัวไว้ในอาร์เรย์
<!-- The name is the actual header name. --> <Header name="Authorization"> <!-- Provide a name for your new custom variable here. --> <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern> </Header>
หากส่วนหัวหลายรายการมีชื่อเดียวกัน ให้ใช้ดัชนีเพื่ออ้างอิงส่วนหัวแต่ละรายการในอาร์เรย์ ดังนี้
<Header name="myHeader.2"> <Pattern ignoreCase="true">{secondHeader}</Pattern> </Header>
หรือรายการต่อไปนี้เพื่อแสดงส่วนหัวทั้งหมดในอาร์เรย์
<Header name="myHeader.values"> <Pattern ignoreCase="true">{myHeaders}</Pattern> </Header>
ค่าเริ่มต้น: | ไม่มีข้อมูล |
สถานที่ตั้ง: | ไม่บังคับ อย่างไรก็ตาม คุณต้องใส่ข้อมูลต่อไปนี้อย่างน้อย 1 รายการ
<URIPath> , <QueryParam> , <Header> ,
<FormParam> , <JSONPayload> หรือ
<XMLPayload>. |
ประเภท: | ไม่มีข้อมูล |
Attributes
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | Type |
---|---|---|---|---|
ชื่อ | ระบุชื่อส่วนหัวที่ใช้ดึงค่า หากส่วนหัวหลายรายการมีชื่อเดียวกัน ให้ใช้การอ้างอิงที่จัดทำดัชนีซึ่งอินสแตนซ์แรกของส่วนหัวไม่มีดัชนี ส่วนหัวที่ 2 อยู่ที่ดัชนี 2 ส่วนหัวที่ 3 ที่ดัชนี 3 ฯลฯ ใช้ .values เพื่อรับส่วนหัวทั้งหมดในอาร์เรย์ |
ไม่มีข้อมูล |
จำเป็น | สตริง |
องค์ประกอบ <FormParam>
(ไม่บังคับ แต่ดูข้อมูลเพิ่มเติมได้ที่แถว "การแสดงข้อมูล" ในตารางด้านล่าง) ดึงค่าจากพารามิเตอร์รูปแบบที่ระบุของข้อความคำขอหรือการตอบกลับที่ระบุ แยกพารามิเตอร์แบบฟอร์มได้เฉพาะเมื่อส่วนหัว Content-Type
ของข้อความที่ระบุคือ application/x-www-form-urlencoded
<FormParam name="greeting"> <Pattern>hello {user}</Pattern> </FormParam>
ค่าเริ่มต้น: | ไม่มีข้อมูล |
สถานที่ตั้ง: | ไม่บังคับ อย่างไรก็ตาม คุณต้องใส่ข้อมูลต่อไปนี้อย่างน้อย 1 รายการ
<URIPath> , <QueryParam> , <Header> ,
<FormParam> , <JSONPayload> หรือ
<XMLPayload>. |
ประเภท: | ไม่มีข้อมูล |
Attributes
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | Type |
---|---|---|---|---|
ชื่อ | ชื่อพารามิเตอร์ของแบบฟอร์มที่คุณดึงค่าออกมา |
ไม่มีข้อมูล |
จำเป็น | สตริง |
องค์ประกอบ <Variable>
(ไม่บังคับ แต่ดูข้อมูลเพิ่มเติมได้ที่แถว "การแสดงข้อมูล" ในตารางด้านล่าง) ระบุชื่อของตัวแปรที่จะดึงค่า
<Variable name="myVar"> <Pattern>hello {user}</Pattern> </Variable>
วิธีแยกค่า 2 ค่าจากตัวแปร
<Variable name="myVar"> <Pattern>hello {firstName} {lastName}</Pattern> </Variable>
ค่าเริ่มต้น: | ไม่มีข้อมูล |
สถานที่ตั้ง: | ไม่บังคับ อย่างไรก็ตาม คุณต้องใส่ข้อมูลต่อไปนี้อย่างน้อย 1 รายการ
<URIPath> , <QueryParam> , <Header> ,
<FormParam> , <JSONPayload> หรือ
<XMLPayload>. |
ประเภท: | ไม่มีข้อมูล |
Attributes
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | Type |
---|---|---|---|---|
ชื่อ | ชื่อของตัวแปรที่จะดึงค่า |
ไม่มีข้อมูล |
จำเป็น | สตริง |
องค์ประกอบ <JSONPayload>
(ไม่บังคับ แต่ดูข้อมูลเพิ่มเติมได้ที่แถว "การแสดงข้อมูล" ในตารางด้านล่าง) ระบุข้อความในรูปแบบ JSON ที่จะแยกค่าของตัวแปร การดึงข้อมูล JSON จะดำเนินการเมื่อส่วนหัว Content-Type ของข้อความคือ application/json เท่านั้น
<JSONPayload> <Variable name="name" type="string"> <JSONPath>{example}</JSONPath> </Variable> </JSONPayload>
ค่าเริ่มต้น: | ไม่มีข้อมูล |
สถานที่ตั้ง: | ไม่บังคับ อย่างไรก็ตาม คุณต้องใส่ข้อมูลต่อไปนี้อย่างน้อย 1 รายการ
<URIPath> , <QueryParam> , <Header> ,
<FormParam> , <JSONPayload> หรือ
<XMLPayload>. |
ประเภท: | ไม่มีข้อมูล |
องค์ประกอบ <JSONPayload>/<Variable>
(ต้องระบุภายในองค์ประกอบ JSONPayload) ระบุตัวแปรที่มีการกำหนดค่าที่ดึงข้อมูล คุณใส่แท็ก <Variable> หลายแท็กในองค์ประกอบ <JSONPayload> เพื่อเติมค่าตัวแปรหลายรายการได้
<Variable name="name" type="string"> <JSONPath>{example}</JSONPath> </Variable>
ค่าเริ่มต้น: | ไม่มีข้อมูล |
สถานที่ตั้ง: | ต้องระบุภายในองค์ประกอบ JSONPayload |
ประเภท: | ไม่มีข้อมูล |
Attributes
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | Type |
---|---|---|---|---|
ชื่อ |
ระบุชื่อของตัวแปรที่ระบบจะกำหนดค่าที่ดึงข้อมูล |
ชื่อ |
จำเป็น | สตริง |
ประเภท | ระบุประเภทข้อมูลของค่าตัวแปร | ไม่มีข้อมูล | ไม่บังคับ |
สตริง ซึ่งมีให้เลือกดังนี้
|
องค์ประกอบ <JSONPayload>/<Variable>/<JSONPath>
(ต้องระบุภายในองค์ประกอบ JSONPayload:Variable) ระบุเส้นทาง JSON ที่ใช้ดึงค่าจากข้อความในรูปแบบ JSON
<Variable name="name"> <JSONPath>$.rss.channel.title</JSONPath> </Variable>
ค่าเริ่มต้น: | ไม่มีข้อมูล |
สถานที่ตั้ง: | จำเป็น |
ประเภท: | สตริง |
องค์ประกอบ <XMLPayload>
(ไม่บังคับ แต่ดูข้อมูลเพิ่มเติมได้ที่แถว "การแสดงข้อมูล" ในตารางด้านล่าง) ระบุข้อความในรูปแบบ XML ที่จะดึงค่าของตัวแปร เพย์โหลด XML จะแยกออกมาเฉพาะเมื่อส่วนหัว Content-Type
ของข้อความคือ text/xml
, application/xml
หรือ application/*+xml
<XMLPayload stopPayloadProcessing="false"> <Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> <Namespace prefix="gmail">http://mail.google.com</Namespace> </Namespaces> <Variable name="name" type="boolean"> <XPath>/apigee:test/apigee:example</XPath> </Variable> </XMLPayload>
ค่าเริ่มต้น: | ไม่มีข้อมูล |
สถานที่ตั้ง: | ไม่บังคับ อย่างไรก็ตาม คุณต้องใส่ข้อมูลต่อไปนี้อย่างน้อย 1 รายการ
<URIPath> , <QueryParam> , <Header> ,
<FormParam> , <JSONPayload> หรือ
<XMLPayload>. |
ประเภท: | ไม่มีข้อมูล |
Attributes
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | Type |
---|---|---|---|---|
stopPayloadProcessing |
ตั้งค่าเป็น |
false |
ไม่บังคับ | บูลีน |
องค์ประกอบ <XMLPayload>/<Namespaces>
(ไม่บังคับ) ระบุเนมสเปซที่จะใช้ในการประเมิน XPath หากใช้เนมสเปซในนิพจน์ XPath คุณต้องประกาศเนมสเปซที่นี่ ดังที่แสดงในตัวอย่างต่อไปนี้
<XMLPayload stopPayloadProcessing="false"> <Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> <Namespace prefix="gmail">http://mail.google.com</Namespace> </Namespaces> <Variable name="legName" type="string"> <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</XPath> </Variable> </XMLPayload>
หากคุณไม่ได้ใช้เนมสเปซในนิพจน์ XPath คุณจะละเว้นหรือแสดงความคิดเห็นในองค์ประกอบ <Namespaces>
ได้ตามตัวอย่างต่อไปนี้
<XMLPayload stopPayloadProcessing="false"> <!-- <Namespaces/> --> <Variable name="legName" type="string"> <XPath>/Directions/route/leg/name</XPath> </Variable> </XMLPayload>
ค่าเริ่มต้น: | ไม่มีข้อมูล |
สถานที่ตั้ง: | ไม่บังคับ |
ประเภท: | สตริง |
Attributes
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | Type |
---|---|---|---|---|
prefix |
คำนำหน้าเนมสเปซ |
ไม่มีข้อมูล |
จำเป็น | สตริง |
องค์ประกอบ <XMLPayload>/<Variable>
(ไม่บังคับ) ระบุตัวแปรที่จะกําหนดค่าที่ดึงข้อมูล
<Variable name="name" type="boolean"> <XPath>/test/example</XPath> </Variable>
ค่าเริ่มต้น: | ไม่มีข้อมูล |
สถานที่ตั้ง: | ไม่บังคับ |
ประเภท: | ไม่มีข้อมูล |
Attributes
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | Type |
---|---|---|---|---|
ชื่อ |
ระบุชื่อของตัวแปรที่ระบบจะกำหนดค่าที่ดึงข้อมูล |
ชื่อ |
จำเป็น | สตริง |
ประเภท | ระบุประเภทข้อมูลของค่าตัวแปร | บูลีน | ไม่บังคับ |
สตริง ซึ่งมีให้เลือกดังนี้
|
องค์ประกอบ <XMLPayload>/<Variable>/<XPath>
(ต้องระบุภายในองค์ประกอบ XMLPayload:Variable) ระบุ XPath ที่กำหนดไว้สำหรับตัวแปร รองรับเฉพาะนิพจน์ XPath 1.0 เท่านั้น
<Variable name="name" type="boolean"> <XPath>/test/example</XPath> </Variable>
ตัวอย่างที่มีเนมสเปซ หากใช้เนมสเปซในนิพจน์ XPath คุณต้องประกาศเนมสเปซในส่วน <XMLPayload><Namespaces>
ของนโยบาย
<Variable name="name" type="boolean"> <XPath>/foo:test/foo:example</XPath> </Variable>
ค่าเริ่มต้น: | ไม่มีข้อมูล |
สถานที่ตั้ง: | จำเป็น |
ประเภท: | สตริง |
การอ้างอิงข้อผิดพลาด
ส่วนนี้จะอธิบายโค้ดข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่แสดงผลและตัวแปรข้อผิดพลาดที่ Edge กําหนดเมื่อนโยบายนี้ทําให้เกิดข้อผิดพลาด ข้อมูลนี้เป็นสิ่งสำคัญที่ต้องทราบหากคุณกำลังกำหนดกฎข้อผิดพลาดเพื่อจัดการกับข้อผิดพลาด ดูข้อมูลเพิ่มเติมได้ที่สิ่งที่คุณต้องทราบเกี่ยวกับข้อผิดพลาดของนโยบายและการจัดการข้อผิดพลาด
ข้อผิดพลาดเกี่ยวกับรันไทม์
ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อนโยบายทำงาน
รหัสข้อผิดพลาด | สถานะ HTTP | สาเหตุ | แก้ไข |
---|---|---|---|
steps.extractvariables.ExecutionFailed |
500 |
ข้อผิดพลาดนี้เกิดขึ้นเมื่อ
|
build |
steps.extractvariables.ImmutableVariable |
500 | ตัวแปรที่ใช้ในนโยบายจะเปลี่ยนแปลงไม่ได้ นโยบายตั้งค่าตัวแปรนี้ไม่ได้ | |
steps.extractvariables.InvalidJSONPath |
500 | ข้อผิดพลาดนี้เกิดขึ้นหากใช้เส้นทาง JSON ที่ไม่ถูกต้องในองค์ประกอบ JSONPath ของนโยบาย เช่น หากเพย์โหลด JSON ไม่มีออบเจ็กต์ Name แต่คุณระบุ Name เป็นเส้นทางในนโยบาย ก็จะเกิดข้อผิดพลาดนี้ |
build |
steps.extractvariables.JsonPathParsingFailure |
500 | ข้อผิดพลาดนี้เกิดขึ้นเมื่อนโยบายแยกวิเคราะห์เส้นทาง JSON และดึงข้อมูลจากตัวแปรโฟลว์ที่ระบุในองค์ประกอบ Source ไม่ได้ โดยปกติแล้ว เหตุการณ์นี้จะเกิดขึ้นหากไม่มีตัวแปรโฟลว์ที่ระบุในองค์ประกอบ Source ในโฟลว์ปัจจุบัน |
build |
steps.extractvariables.SetVariableFailed |
500 | ข้อผิดพลาดนี้เกิดขึ้นหากนโยบายกำหนดค่าเป็นตัวแปรไม่ได้ ข้อผิดพลาดมักเกิดขึ้นหากคุณพยายามกำหนดค่าให้กับตัวแปรหลายตัวที่มีชื่อขึ้นต้นด้วยคำเดียวกันในรูปแบบที่คั่นด้วยจุดที่ซ้อนกัน | build |
steps.extractvariables.SourceMessageNotAvailable |
500 | ข้อผิดพลาดนี้เกิดขึ้นหากตัวแปรข้อความที่ระบุในองค์ประกอบ Source ของนโยบายมีลักษณะดังนี้
|
build |
steps.extractvariables.UnableToCast |
500 | ข้อผิดพลาดนี้เกิดขึ้นหากนโยบายแคสต์ค่าที่ดึงข้อมูลไปยังตัวแปรไม่ได้ โดยปกติกรณีนี้จะเกิดขึ้นหากคุณพยายามตั้งค่าของข้อมูลประเภทหนึ่งเป็นตัวแปรของข้อมูลอีกประเภทหนึ่ง | build |
ข้อผิดพลาดในการทำให้ใช้งานได้
ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อคุณใช้พร็อกซีที่มีนโยบายนี้
ชื่อข้อผิดพลาด | สาเหตุ | แก้ไข |
---|---|---|
NothingToExtract |
หากนโยบายไม่มีองค์ประกอบ URIPath , QueryParam , Header , FormParam , XMLPayload หรือ JSONPayload จะทำให้ใช้งานพร็อกซี API ไม่สำเร็จ เพราะไม่มีข้อมูลให้ดึงข้อมูล |
build |
NONEmptyPrefixMappedToEmptyURI |
ข้อผิดพลาดนี้เกิดขึ้นหากนโยบายมีคำนำหน้าที่กำหนดไว้ในองค์ประกอบ Namespace ภายใต้องค์ประกอบ XMLPayload แต่ไม่ได้กำหนด URI |
build |
DuplicatePrefix |
ข้อผิดพลาดนี้เกิดขึ้นหากนโยบายมีการกำหนดคำนำหน้าเดียวกันมากกว่า 1 ครั้งในองค์ประกอบ Namespace ภายใต้องค์ประกอบ XMLPayload |
build |
NoXPathsToEvaluate |
หากนโยบายไม่มีองค์ประกอบ XPath ภายในองค์ประกอบ XMLPayload จะทำให้ใช้งานพร็อกซี API ไม่สำเร็จด้วยข้อผิดพลาดนี้
|
build |
EmptyXPathExpression |
หากนโยบายมีนิพจน์ XPath ที่ว่างเปล่าภายในองค์ประกอบ XMLPayload การทำให้พร็อกซี API ใช้งานได้จะไม่สำเร็จ |
build |
NoJSONPathsToEvaluate |
หากนโยบายไม่มีองค์ประกอบ JSONPath ภายในองค์ประกอบ JSONPayload จะทำให้ใช้งานพร็อกซี API ไม่สำเร็จด้วยข้อผิดพลาดนี้ |
build |
EmptyJSONPathExpression |
หากนโยบายมีนิพจน์ XPath ที่ว่างเปล่าภายในองค์ประกอบ XMLPayload การทำให้พร็อกซี API ใช้งานได้จะไม่สำเร็จ |
build |
MissingName |
หากนโยบายไม่มีแอตทริบิวต์ name ในองค์ประกอบใดๆ ของนโยบาย เช่น QueryParam , Header , FormParam หรือ Variable เมื่อต้องระบุ จะทำให้การทำให้พร็อกซี API ใช้งานได้ไม่สำเร็จ |
build |
PatternWithoutVariable |
หากนโยบายไม่มีตัวแปรที่ระบุภายในองค์ประกอบ Pattern การทำให้พร็อกซี API ใช้งานได้จะไม่สำเร็จ องค์ประกอบ Pattern ต้องมีชื่อของตัวแปรที่จะจัดเก็บข้อมูลที่แยกออกมา |
build |
CannotBeConvertedToNodeset |
หากนโยบายมีนิพจน์ XPath ซึ่งประเภท Variable กำหนดเป็นโหนด แต่แปลงนิพจน์เป็นชุดโหนดไม่ได้ การทำให้พร็อกซี API ใช้งานได้จะไม่สำเร็จ |
build |
JSONPathCompilationFailed |
นโยบายคอมไพล์เส้นทาง JSON ที่ระบุไม่ได้ | |
InstantiationFailed |
ไม่สามารถสร้างอินสแตนซ์นโยบาย | |
XPathCompilationFailed |
หากคำนำหน้าหรือค่าที่ใช้ในองค์ประกอบ XPath ไม่ได้เป็นส่วนหนึ่งของเนมสเปซที่ประกาศในนโยบาย การทำให้พร็อกซี API ใช้งานได้จะไม่สำเร็จ |
build |
InvalidPattern |
หากคำจำกัดความองค์ประกอบ Pattern ไม่ถูกต้องในองค์ประกอบอย่างเช่น URIPath , QueryParam , Header , FormParam , XMLPayload หรือ JSONPayload ภายในนโยบาย จะทำให้การทำให้พร็อกซี API ใช้งานได้ไม่สำเร็จ
|
build |
ตัวแปรของข้อผิดพลาด
ระบบจะตั้งค่าตัวแปรเหล่านี้เมื่อนโยบายนี้ทริกเกอร์ข้อผิดพลาดขณะรันไทม์ ดูข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่คุณจำเป็นต้องทราบเกี่ยวกับข้อผิดพลาดของนโยบาย
ตัวแปร | สถานที่ | ตัวอย่าง |
---|---|---|
fault.name="fault_name" |
fault_name คือชื่อของข้อผิดพลาดตามที่แสดงในตารางข้อผิดพลาดรันไทม์ด้านบน ชื่อข้อผิดพลาดคือส่วนสุดท้ายของโค้ดข้อผิดพลาด | fault.name = "SourceMessageNotAvailable" |
extractvariables.policy_name.failed |
policy_name คือชื่อที่ผู้ใช้ระบุของนโยบายที่เป็นข้อผิดพลาด | extractvariables.EV-ParseJsonResponse.failed = true |
ตัวอย่างการตอบกลับข้อผิดพลาด
{ "fault":{ "detail":{ "errorcode":"steps.extractvariables.SourceMessageNotAvailable" }, "faultstring":"request message is not available for ExtractVariable: EV-ParseJsonResponse" } }
ตัวอย่างกฎข้อผิดพลาด
<FaultRule name="Extract Variable Faults"> <Step> <Name>AM-CustomErrorMessage</Name> <Condition>(fault.name = "SourceMessageNotAvailable") </Condition> </Step> <Condition>(extractvariables.EM-ParseJsonResponse.failed = true) </Condition> </FaultRule>
สคีมา
หัวข้อที่เกี่ยวข้อง
วิเคราะห์เนื้อหาข้อความ API โดยใช้ข้อมูลวิเคราะห์ที่กำหนดเอง