คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ
Apigee X info
อะไร
นโยบาย ExtractVariables จะดึงเนื้อหาจากคำขอหรือการตอบกลับ และตั้งค่าของ ตัวแปรเป็นเนื้อหานั้น คุณสามารถแยกส่วนใดก็ได้ของข้อความ ซึ่งรวมถึงส่วนหัว เส้นทาง URI เพย์โหลด JSON/XML พารามิเตอร์แบบฟอร์ม และพารามิเตอร์การค้นหา นโยบายนี้ทำงานโดยใช้รูปแบบข้อความกับเนื้อหาของข้อความ และเมื่อพบรายการที่ตรงกัน จะตั้งค่าตัวแปรด้วยเนื้อหาของข้อความที่ระบุ
แม้ว่าคุณมักจะใช้นโยบายนี้เพื่อดึงข้อมูลจากข้อความคำขอหรือการตอบกลับ แต่คุณก็สามารถใช้เพื่อดึงข้อมูลจากแหล่งอื่นๆ ได้เช่นกัน ซึ่งรวมถึงเอนทิตีที่สร้างขึ้นโดยนโยบาย AccessEntity, ออบเจ็กต์ XML หรือออบเจ็กต์ JSON
หลังจากแยกเนื้อหาข้อความที่ระบุแล้ว คุณจะอ้างอิงตัวแปรในนโยบายอื่นๆ เป็นส่วนหนึ่งของการประมวลผลคำขอและการตอบกลับได้
วิดีโอ
ดูข้อมูลเพิ่มเติมเกี่ยวกับนโยบาย ExtractVariables ได้ในวิดีโอต่อไปนี้
| วิดีโอ | คำอธิบาย |
|---|---|
| แยกตัวแปร จากเพย์โหลด XML | แยกตัวแปรจากเพย์โหลด XML โดยใช้นโยบาย Extract Variable |
| ดึงตัวแปร จากเพย์โหลด JSON | แยกตัวแปรจากเพย์โหลด JSON โดยใช้นโยบาย Extract Variable |
| แยกตัวแปร จากพารามิเตอร์ | ดึงตัวแปรจากพารามิเตอร์ เช่น พารามิเตอร์การค้นหา ส่วนหัว แบบฟอร์ม หรือ URI |
| แยกตัวแปร จากพารามิเตอร์แบบหลายค่า | แยกตัวแปรจากพารามิเตอร์ที่มีหลายค่า |
| ดึงตัวแปร จากพารามิเตอร์การค้นหา (Edge แบบคลาสสิก) | แยกตัวแปรจากพารามิเตอร์การค้นหาโดยใช้ UI ของ Edge แบบคลาสสิก |
| ดึงตัวแปร จากเพย์โหลด XML หรือ JSON (Edge แบบคลาสสิก) | ดึงตัวแปรจากเพย์โหลด XML หรือ JSON โดยใช้ Classic Edge UI |
ตัวอย่าง
ตัวอย่างโค้ดนโยบายเหล่านี้แสดงวิธีแยกตัวแปรจากอาร์ติแฟกต์ประเภทต่อไปนี้
GitHub
ลิงก์เหล่านี้ชี้ไปยังตัวอย่างพร็อกซี API ที่ใช้งานได้ซึ่งคุณสามารถทําให้ใช้งานได้และเรียกใช้ใน Edge โดยพร็อกซีเหล่านี้ ใช้ ExtractVariables และอยู่ในที่เก็บ api-platform-samples ของ Apigee บน GitHub ไฟล์ README จะอธิบายวิธีใช้ ExtractVariables ในแต่ละกรณี รวมถึงวิธีติดตั้งใช้งานและ เรียกใช้ตัวอย่างแต่ละรายการ
- ตัวอย่างการแยก และกำหนดตัวแปร (แยกข้อมูลจากข้อความ 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> จะบอกนโยบาย
ExtractVariables ให้ดึงข้อมูลจากเส้นทาง URI องค์ประกอบ
<Pattern> ระบุรูปแบบที่จะใช้กับเส้นทาง URI ระบบจะถือว่ารูปแบบ
เป็นเทมเพลตอย่างง่าย โดยมีเครื่องหมายปีกกาที่ระบุส่วนต่างๆ
ของเส้นทาง URI
ชื่อของตัวแปรที่จะตั้งค่าจะกำหนดโดยค่าที่ระบุในองค์ประกอบ
<VariablePrefix> รวมถึงค่าที่อยู่ในวงเล็บปีกกา {}
ในองค์ประกอบ <Pattern> ค่าทั้ง 2 ค่าจะเชื่อมต่อกันด้วยจุด
ส่งผลให้ชื่อตัวแปรเป็น urirequest.id เป็นต้น หากไม่มีองค์ประกอบ
<VariablePrefix> ชื่อตัวแปรจะเป็นเพียงค่า
ที่อยู่ในเครื่องหมายปีกกา
ลองพิจารณาโค้ดนโยบายตัวอย่างด้านบนที่ทำงานร่วมกับคำขอขาเข้าต่อไปนี้
GET http://org1-test.apigee.net/svc1/accounts/12797282
สมมติว่า Basepath สำหรับพร็อกซี API คือ /svc1 เมื่อ Apigee Edge ใช้โค้ดนโยบาย ExtractVariables ด้านบนกับคำขอขาเข้านี้ ระบบจะตั้งค่าตัวแปร
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 ใช้โค้ดนโยบาย ExtractVariables ด้านบนกับคำขอขาเข้านี้
ระบบจะตั้งค่าตัวแปร 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" หลายอินสแตนซ์ หากต้องการอ้างอิงพารามิเตอร์การค้นหาเหล่านี้ในนโยบาย ExtractVariables คุณ ต้องใช้ดัชนี โดยอินสแตนซ์แรกของพารามิเตอร์การค้นหาจะไม่มีดัชนี อินสแตนซ์ที่ 2 จะอยู่ที่ ดัชนี 2 อินสแตนซ์ที่ 3 จะอยู่ที่ดัชนี 3 เป็นต้น
ลองพิจารณาโค้ดนโยบายตัวอย่างด้านบนที่ทำงานร่วมกับคำขอขาเข้าต่อไปนี้
GET http://org1-test.apigee.net/weather?w=Boston&w=Chicago
เมื่อ Apigee Edge ใช้โค้ดนโยบาย ExtractVariables ด้านบนกับคำขอขาเข้านี้
ระบบจะตั้งค่าตัวแปร 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 ของคุณใช้โทเค็น Bearer ของ OAuth v2.0 พิจารณาโค้ดนโยบายตัวอย่างด้านบน
ที่ทำงานกับคำขอที่มีโทเค็น OAuth v2.0 ซึ่งมีส่วนหัวดังนี้
Authorization: Bearer TU08xptfFfeM7aS0xHqlxTgEAdAM.
ในฐานะผู้ออกแบบ API สมมติว่าคุณต้องการใช้ค่าโทเค็น (แต่ไม่ใช่ทั้งส่วนหัว) เป็นคีย์ในการค้นหาแคช คุณสามารถใช้โค้ดนโยบาย ExtractVariables ด้านบนเพื่อ แยกโทเค็นได้
เมื่อ Apigee Edge ใช้โค้ดนโยบาย ExtractVariables ด้านบนกับส่วนหัวนี้ ระบบจะ
ตั้งค่าตัวแปร 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 ใช้โค้ดนโยบาย ExtractVariables ด้านบนกับข้อความ JSON นี้ ระบบจะ
ตั้งค่าตัวแปร 2 รายการ ได้แก่ geocoderesponse.latitude และ
geocoderesponse.longitude ตัวแปรทั้ง 2 รายการใช้คำนำหน้าตัวแปรเดียวกันคือ
geocoderesponse ส่วนต่อท้ายของตัวแปรเหล่านี้จะระบุอย่างชัดเจนโดยแอตทริบิวต์ name ขององค์ประกอบ <Variable>
ตัวแปร geocoderesponse.latitude จะรับค่า
37.42291810 ตัวแปร geocoderesponse.longitude จะรับค่า
-122.08542120
ตอนนี้คุณเข้าถึงตัวแปร geocoderesponse.latitude ใน
พร็อกซีได้แล้ว ตัวอย่างเช่น นโยบาย AssignMessage ต่อไปนี้จะคัดลอกไปยังส่วนหัวชื่อ "latitude"
ในการตอบกลับ
<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 ใช้โค้ดนโยบาย ExtractVariables ด้านบนกับข้อความ 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>
เกี่ยวกับนโยบาย ExtractVariables
นักพัฒนา API สร้างพร็อกซี API ที่ทำงานแตกต่างกันตามเนื้อหาของข้อความ รวมถึงส่วนหัว เส้นทาง URI เพย์โหลด และพารามิเตอร์การค้นหา โดยพร็อกซีมักจะดึงข้อมูลบางส่วน ของเนื้อหานี้เพื่อใช้ในข้อความเงื่อนไข ใช้นโยบาย ExtractVariables เพื่อดำเนินการนี้
เมื่อกำหนดนโยบาย ExtractVariables คุณจะเลือกทำสิ่งต่อไปนี้ได้
- ชื่อของตัวแปรที่จะตั้งค่า
- แหล่งที่มาของตัวแปร
- จำนวนตัวแปรที่จะแยกและตั้งค่า
เมื่อดำเนินการ นโยบายจะใช้รูปแบบข้อความกับเนื้อหา และเมื่อพบรายการที่ตรงกัน จะกำหนด ค่าของตัวแปรที่กำหนดด้วยเนื้อหา จากนั้นนโยบายและโค้ดอื่นๆ จะใช้ตัวแปรเหล่านั้นเพื่อเปิดใช้ลักษณะการทำงานแบบไดนามิกหรือส่งข้อมูลธุรกิจไปยัง Edge API Analytics ได้
ดูวิธีใช้ ExtractVariables เพื่อสร้างรายงานข้อมูลวิเคราะห์ที่อิงตามเนื้อหาได้ที่ วิเคราะห์ เนื้อหาข้อความ API โดยใช้ข้อมูลวิเคราะห์ที่กําหนดเอง
ขอบเขต
ตัวแปรที่ตั้งค่าด้วยนโยบาย ExtractVariables จะมีขอบเขตเป็นส่วนกลาง กล่าวคือ หลังจากที่นโยบาย ExtractVariables กําหนดตัวแปรใหม่แล้ว คุณจะเข้าถึงตัวแปรนั้นจากนโยบายหรือโค้ดใดก็ได้ในทุกขั้นตอนของโฟลว์ (ที่ดําเนินการหลังจากนโยบาย ExtractVariables) ซึ่งรวมถึง
- PreFlow: ProxyEndpoint และ TargetEndpoint (คำขอและการตอบกลับ)
- PostFlow: ProxyEndpoint และ TargetEndpoint (คำขอและการตอบกลับ)
- PostClientFlow: ProxyEndpoint (การตอบกลับเท่านั้น โดยใช้นโยบาย การบันทึกข้อความ)
- Error Flows
เกี่ยวกับการจับคู่และการสร้างตัวแปร
นโยบาย ExtractVariables จะดึงข้อมูลจากคำขอหรือการตอบกลับและเขียนข้อมูลนั้นลงในตัวแปร สำหรับข้อมูลแต่ละประเภทที่คุณสามารถแยกได้ เช่น เส้นทาง URI หรือข้อมูล XML คุณต้องระบุรูปแบบที่จะจับคู่และชื่อของตัวแปรที่ใช้เก็บข้อมูลที่แยกออกมา
อย่างไรก็ตาม วิธีการทำงานของการจับคู่รูปแบบจะขึ้นอยู่กับแหล่งที่มาของการแยก ส่วนต่อไปนี้จะอธิบายข้อมูล 2 หมวดหมู่พื้นฐานที่คุณดึงออกมาได้
การจับคู่เส้นทาง URI, พารามิเตอร์การค้นหา, ส่วนหัว, พารามิเตอร์แบบฟอร์ม และตัวแปร
เมื่อดึงข้อมูลจากเส้นทาง URI, พารามิเตอร์การค้นหา, ส่วนหัว, พารามิเตอร์แบบฟอร์ม และตัวแปร คุณจะใช้แท็ก <Pattern> เพื่อระบุรูปแบบอย่างน้อย 1 รายการที่จะจับคู่ ตัวอย่างเช่น ตัวอย่างนโยบายต่อไปนี้แสดงรูปแบบที่ตรงกันรายการเดียวสำหรับ เส้นทาง 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 เป็นค่าใดก็ตามที่ปรากฏใน proxy.pathsuffix หลังจาก "/a/" ตัวอย่างเช่น สมมติว่าเส้นทางฐานสำหรับ API Proxy คือ /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 Proxy ที่มีเส้นทางฐานเป็น /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
หากต้องการอ้างอิงพารามิเตอร์การค้นหาเหล่านี้ในนโยบาย ExtractVariables คุณต้องใช้ดัชนี โดยที่อินสแตนซ์แรกของพารามิเตอร์การค้นหาจะไม่มีดัชนี อินสแตนซ์ที่ 2 จะอยู่ที่ดัชนี 2 อินสแตนซ์ที่ 3 จะอยู่ที่ดัชนี 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>รูปแบบแรกจะตรงกับคำขอที่มีคำต่อท้ายของเส้นทาง (ส่วนของเส้นทาง URI ที่ตามหลังเส้นทางฐาน) เช่น "/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"
หากค่าที่ส่งไปยังนโยบาย ExtractVariables มีสัญลักษณ์พิเศษ เช่น "{" ให้ใช้อักขระ "%" เพื่อกำหนดเป็นอักขระหลีก ตัวอย่างต่อไปนี้จะหลีกเลี่ยงอักขระ "{" และ "}" ในรูปแบบเนื่องจากใช้เป็นอักขระลิเทอรัลในค่าของพารามิเตอร์การค้นหา
<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 ระบบจะไม่สร้างตัวแปรที่เกี่ยวข้อง
ตัวอย่างต่อไปนี้แสดงนโยบาย ExtractVariables ที่สร้างตัวแปร 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> เป็น
true ในนโยบายที่อ้างอิงตัวแปรเพื่อกำหนดค่านโยบายให้ถือว่า
ตัวแปรที่แก้ไขไม่ได้เป็นสตริงว่าง (ค่าว่าง)
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
การอ้างอิงองค์ประกอบ
การอ้างอิงองค์ประกอบจะอธิบายองค์ประกอบและแอตทริบิวต์ของนโยบาย ExtractVariables
<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>
แอตทริบิวต์ <ExtractVariables>
<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
ตารางต่อไปนี้อธิบายแอตทริบิวต์ทั่วไปในองค์ประกอบระดับบนสุดของนโยบายทั้งหมด
| แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ |
|---|---|---|---|
name |
ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ (ไม่บังคับ) ใช้องค์ประกอบ |
ไม่มี | ต้องระบุ |
continueOnError |
ตั้งค่าเป็น ตั้งค่าเป็น |
เท็จ | ไม่บังคับ |
enabled |
ตั้งค่าเป็น ตั้งค่าเป็น |
จริง | ไม่บังคับ |
async |
แอตทริบิวต์นี้เลิกใช้งานแล้ว |
เท็จ | เลิกใช้ |
<DisplayName> องค์ประกอบ
ใช้เพิ่มเติมจากแอตทริบิวต์ name เพื่อติดป้ายกำกับนโยบายใน
เครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน
<DisplayName>Policy Display Name</DisplayName>
| ค่าเริ่มต้น |
ไม่มี หากไม่ใส่องค์ประกอบนี้ ค่าของแอตทริบิวต์ |
|---|---|
| การมีบุคคลอยู่ | ไม่บังคับ |
| ประเภท | สตริง |
องค์ประกอบ <Source>
(ไม่บังคับ) ระบุตัวแปรที่จะแยกวิเคราะห์ ค่าของ
<Source> จะเป็น message โดยค่าเริ่มต้น ค่า message
จะขึ้นอยู่กับบริบท ในโฟลว์คำขอ message จะเปลี่ยนเป็นข้อความคำขอ ใน
โฟลว์การตอบกลับ message จะเปลี่ยนเป็นข้อความตอบกลับ
แม้ว่าคุณมักจะใช้นโยบายนี้เพื่อดึงข้อมูลจากข้อความคำขอหรือการตอบกลับ แต่คุณก็สามารถใช้เพื่อดึงข้อมูลจากตัวแปรใดก็ได้ เช่น คุณสามารถใช้เพื่อดึงข้อมูลจากเอนทิตีที่สร้างขึ้นโดยนโยบาย AccessEntity จากข้อมูลที่นโยบาย
การเรียกใช้บริการส่งคืน หรือดึงข้อมูลจากออบเจ็กต์ XML หรือ JSON
หาก<Source>ไม่สามารถแก้ไขได้ หรือแก้ไขเป็นประเภทที่ไม่ใช่ข้อความ
นโยบายจะไม่ตอบสนอง
<Source clearPayload="true|false">request</Source>
| ค่าเริ่มต้น: | ข้อความ |
| การแสดงตน: | ไม่บังคับ |
| ประเภท: | สตริง |
Attributes
| แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | ประเภท |
|---|---|---|---|---|
| clearPayload |
ตั้งค่าเป็น true หากต้องการล้างเพย์โหลดที่ระบุใน
<Source> หลังจากแยกข้อมูลจากเพย์โหลด |
เท็จ |
ไม่บังคับ | บูลีน |
องค์ประกอบ <VariablePrefix>
(ไม่บังคับ) ระบบจะสร้างชื่อตัวแปรที่สมบูรณ์โดยการรวม
<VariablePrefix> จุด และชื่อที่คุณกําหนดใน {วงเล็บปีกกา} ในองค์ประกอบ
<Pattern> หรือองค์ประกอบ <Variable> ตัวอย่างเช่น
myprefix.id, myprefix.dbncode หรือ myprefix.oauthtoken.
<VariablePrefix>myprefix</VariablePrefix>
เช่น สมมติว่าค่าของชื่อคือ "user"
- หากไม่ได้ระบุ
<VariablePrefix>ระบบจะกำหนดค่าที่แยกออกมาให้กับตัวแปรชื่อuser - หากระบุ
<VariablePrefix>เป็น myprefix ระบบจะกำหนดค่าที่ดึงมาให้กับตัวแปรชื่อmyprefix.user
| ค่าเริ่มต้น: | ไม่มี |
| การแสดงตน: | ไม่บังคับ |
| ประเภท: | สตริง |
องค์ประกอบ <IgnoreUnresolvedVariables>
(ไม่บังคับ) ตั้งค่าเป็น true เพื่อถือว่าตัวแปรที่แก้ไม่ได้เป็นสตริงว่าง
(null) ตั้งค่าเป็น false หากต้องการให้นโยบายแสดงข้อผิดพลาดเมื่อตัวแปรที่อ้างอิง
ใดๆ แก้ไขไม่ได้
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
| ค่าเริ่มต้น: | เท็จ |
| การแสดงตน: | ไม่บังคับ |
| ประเภท: | บูลีน |
หากการอ้างอิง XPath ไม่ได้รับการแก้ไขใน <XMLPayload> นโยบายจะแสดงข้อผิดพลาดต่อไปนี้
{ "fault":{ "faultstring":"Unresolved xpath path in policy policy_name.", "detail":{ "errorcode":"steps.extractvariables.InvalidXPath" } } }
องค์ประกอบ <URIPath>
(ไม่บังคับ แต่ดูข้อมูลเพิ่มเติมได้ที่แถวสถานะในตารางด้านล่าง) แยกค่า จาก proxy.pathsuffix ของข้อความต้นทางของคำขอ เส้นทางที่ใช้กับ รูปแบบคือ proxy.pathsuffix ซึ่งไม่มี basepath สำหรับ API Proxy หาก ข้อความต้นทางเปลี่ยนเป็นประเภทข้อความการตอบกลับ องค์ประกอบนี้จะไม่ทำอะไร
<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
| แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | ประเภท |
|---|---|---|---|---|
| ignoreCase | ระบุให้ไม่สนใจตัวพิมพ์เล็กหรือใหญ่เมื่อจับคู่รูปแบบ |
เท็จ |
ไม่บังคับ | บูลีน |
องค์ประกอบ <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
| แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | ประเภท |
|---|---|---|---|---|
| name | ระบุชื่อพารามิเตอร์การค้นหา หากพารามิเตอร์การค้นหาหลายรายการมีชื่อเดียวกัน ให้ใช้การอ้างอิงที่จัดทำดัชนี โดยที่อินสแตนซ์แรกของพารามิเตอร์การค้นหาจะไม่มีดัชนี อินสแตนซ์ที่ 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
| แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | ประเภท |
|---|---|---|---|---|
| name | ระบุชื่อของส่วนหัวที่คุณดึงค่าออกมา หากส่วนหัวหลายรายการมีชื่อเดียวกัน ให้ใช้การอ้างอิงที่จัดทำดัชนี โดยที่อินสแตนซ์แรกของส่วนหัวจะไม่มีดัชนี อินสแตนซ์ที่ 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
| แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | ประเภท |
|---|---|---|---|---|
| name | ชื่อพารามิเตอร์แบบฟอร์มที่คุณดึงค่าออกมา |
ไม่มี |
ต้องระบุ | สตริง |
องค์ประกอบ <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
| แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | ประเภท |
|---|---|---|---|---|
| name | ชื่อของตัวแปรที่จะดึงค่า |
ไม่มี |
ต้องระบุ | สตริง |
องค์ประกอบ <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
| แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | ประเภท |
|---|---|---|---|---|
| name |
ระบุชื่อของตัวแปรที่จะกำหนดค่าที่แยกออกมา ให้ |
name |
ต้องระบุ | สตริง |
| ประเภท | ระบุประเภทข้อมูลของค่าตัวแปร | ไม่มี | ไม่บังคับ |
สตริง ซึ่งมีให้เลือกดังนี้
|
องค์ประกอบ <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
| แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | ประเภท |
|---|---|---|---|---|
stopPayloadProcessing |
ตั้งค่าเป็น |
เท็จ |
ไม่บังคับ | บูลีน |
<XMLPayload>/<Namespaces> element
(ไม่บังคับ) ระบุเนมสเปซที่จะใช้ในการประเมิน 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
| แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | ประเภท |
|---|---|---|---|---|
prefix |
คำนำหน้าเนมสเปซ |
ไม่มี |
ต้องระบุ | สตริง |
องค์ประกอบ <XMLPayload>/<Variable>
(ไม่บังคับ) ระบุตัวแปรที่จะกำหนดค่าที่แยกออกมา
<Variable name="name" type="boolean"> <XPath>/test/example</XPath> </Variable>
| ค่าเริ่มต้น: | ไม่มี |
| การแสดงตน: | ไม่บังคับ |
| ประเภท: | ไม่มี |
Attributes
| แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | ประเภท |
|---|---|---|---|---|
| name |
ระบุชื่อของตัวแปรที่จะกำหนดค่าที่แยกออกมา ให้ |
name |
ต้องระบุ | สตริง |
| ประเภท | ระบุประเภทข้อมูลของค่าตัวแปร | บูลีน | ไม่บังคับ |
สตริง ซึ่งมีให้เลือกดังนี้
|
องค์ประกอบ <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
คือnodeset
แต่แปลงนิพจน์เป็น Nodeset ไม่ได้ ซึ่งทำให้การทำให้พร็อกซี 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 โดยใช้ข้อมูลวิเคราะห์ที่กําหนดเอง