คุณกำลังดูเอกสารประกอบ Apigee Edge
ไปที่
เอกสารประกอบเกี่ยวกับ Apigee X. ข้อมูล
อะไร
นโยบาย ExtractVariable จะดึงเนื้อหาจากคำขอหรือการตอบกลับ แล้วกำหนดค่าของ ตัวแปรให้กับเนื้อหานั้น คุณสามารถดึงข้อมูลส่วนใดส่วนหนึ่งของข้อความได้ รวมถึงส่วนหัว, เส้นทาง URI, เพย์โหลด JSON/XML, ฟอร์ม และพารามิเตอร์การค้นหา นโยบายจะทำงานโดยใช้รูปแบบข้อความกับข้อความ และเนื้อหาข้อความ เมื่อพบการจับคู่ที่ตรงกัน ให้ตั้งค่าตัวแปรกับเนื้อหาข้อความที่ระบุ
แม้ว่าคุณจะใช้นโยบายนี้เพื่อดึงข้อมูลจากคำขอหรือข้อความตอบกลับ แต่ก็มี ยังสามารถใช้เพื่อดึงข้อมูลจากแหล่งที่มาอื่นๆ รวมถึงเอนทิตีที่สร้างโดย นโยบาย AccessEntity ออบเจ็กต์ XML หรือออบเจ็กต์ JSON
หลังจากแยกเนื้อหาข้อความที่ระบุ คุณสามารถอ้างอิงตัวแปรใน เพื่อเป็นส่วนหนึ่งของการประมวลผลคำขอและการตอบกลับ
วิดีโอ
ดูข้อมูลเพิ่มเติมเกี่ยวกับนโยบาย ExtractVariable ในวิดีโอต่อไปนี้
วิดีโอ | คำอธิบาย |
---|---|
ดึงข้อมูลตัวแปร จากเพย์โหลด XML | แยกตัวแปรจากเพย์โหลด XML โดยใช้นโยบายตัวแปรการดึงข้อมูล |
ดึงข้อมูลตัวแปร จากเพย์โหลด JSON | แยกตัวแปรจากเพย์โหลด JSON โดยใช้นโยบายตัวแปรการดึงข้อมูล |
ดึงข้อมูลตัวแปร จากพารามิเตอร์ | ดึงตัวแปรจากพารามิเตอร์ เช่น พารามิเตอร์การค้นหา ส่วนหัว แบบฟอร์ม หรือ URI |
ดึงข้อมูลตัวแปร จากพารามิเตอร์หลายค่า | ดึงตัวแปรจากพารามิเตอร์หลายค่า |
ดึงข้อมูลตัวแปร จากพารามิเตอร์การค้นหา (คลาสสิก Edge) | แยกตัวแปรจากพารามิเตอร์การค้นหาโดยใช้ Edge UI แบบคลาสสิก |
ดึงข้อมูลตัวแปร จากเพย์โหลด XML หรือ JSON (EDGE แบบคลาสสิก) | แยกตัวแปรจากเพย์โหลด XML หรือ JSON โดยใช้ Edge UI คลาสสิก |
ตัวอย่าง
ตัวอย่างโค้ดนโยบายเหล่านี้จะแสดงวิธีดึงตัวแปรจากประเภทต่อไปนี้ อาร์ติแฟกต์:
GitHub
ลิงก์เหล่านี้จะชี้ไปที่ตัวอย่างพร็อกซี API ที่ใช้งานได้ ซึ่งคุณทำให้ใช้งานได้และเรียกใช้บน Edge ได้ โฆษณาเหล่านี้ ใช้ ดึงข้อมูลตัวแปร และอยู่ในที่เก็บตัวอย่าง API ของ Apigee ใน GitHub README จะอธิบายวิธีการใช้ ExtractVariable ในแต่ละกรณี ตลอดจนวิธีทำให้ใช้งานได้และ เรียกใช้แต่ละตัวอย่าง
- แตกข้อมูล และกำหนดตัวอย่างตัวแปร (ดึงข้อมูลจากข้อความ 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>
จะบอก
นโยบาย ExtractVariable เพื่อดึงข้อมูลจากเส้นทาง URI
องค์ประกอบ <Pattern>
ระบุรูปแบบที่จะใช้กับเส้นทาง URI
รูปแบบ ถือว่าเป็นเทมเพลตที่เรียบง่าย โดยมีวงเล็บปีกกาแสดงถึงส่วนที่แตกต่างกัน
ของเส้นทาง URI
ชื่อของตัวแปรที่จะตั้งค่าจะกำหนดโดยค่าที่ระบุใน
องค์ประกอบ <VariablePrefix>
และค่าที่อยู่ในวงเล็บปีกกา {}
ในองค์ประกอบ <Pattern>
ค่าทั้ง 2 ค่าจะรวมกันด้วยจุดตัด
ซึ่งทำให้เป็นชื่อตัวแปร urirequest.id
เป็นต้น หากไม่มี
<VariablePrefix>
ชื่อตัวแปรจะเป็นแค่ค่า
ด้วยวงเล็บปีกกา
ลองดูตัวอย่างโค้ดนโยบายด้านบนที่ใช้กับคำขอที่เข้ามาใหม่ดังต่อไปนี้
GET http://org1-test.apigee.net/svc1/accounts/12797282
สมมติว่าเส้นทางพื้นฐานสำหรับพร็อกซี API คือ /svc1
เมื่อ Apigee Edge ใช้
โค้ดนโยบาย ExtractVariable ด้านบนมายังคําขอที่เข้ามาใหม่นี้ โดยจะกําหนดตัวแปร
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 นำโค้ดนโยบาย ExtractVariable ด้านบนไปใช้กับคำขอที่เข้ามาใหม่นี้
จะตั้งตัวแปร 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 ดัชนีที่ 3 ดัชนี 3 เป็นต้น
ลองดูตัวอย่างโค้ดนโยบายด้านบนที่ใช้กับคำขอที่เข้ามาใหม่ดังต่อไปนี้
GET http://org1-test.apigee.net/weather?w=Boston&w=Chicago
เมื่อ Apigee Edge นำโค้ดนโยบาย ExtractVariable ด้านบนไปใช้กับคำขอที่เข้ามาใหม่นี้
จะตั้งตัวแปร 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 สมมติว่าคุณต้องการใช้ค่าโทเค็น (ไม่ใช่ทั้งหมด เป็นคีย์ในการค้นหาแคช คุณสามารถใช้โค้ดนโยบาย ดึงข้อมูลตัวแปร ด้านบนเพื่อ แยกโทเค็น
เมื่อ Apigee Edge นำโค้ดนโยบาย ExtractVariable ด้านบนไปใช้กับส่วนหัวนี้
ตั้งตัวแปร 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 นำโค้ดนโยบาย ExtractVariable ด้านบนไปใช้กับข้อความ JSON นี้
ตั้งค่าตัวแปร 2 ตัวคือ geocoderesponse.latitude
และ
geocoderesponse.longitude
ตัวแปรทั้งสองใช้คำนำหน้าตัวแปรเดียวกันของ
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 นำโค้ดนโยบาย ExtractVariable ด้านบนไปใช้กับข้อความ XML นี้
ตั้งค่าตัวแปร 3 ตัว ได้แก่ directionsresponse.travelmode,
directionsresponse.duration
และ directionsresponse.timeunit
ทั้งหมด
ใช้คำนำหน้าตัวแปรเดียวกันของ directionsresponse
คำต่อท้ายสำหรับ
ตัวแปรเหล่านี้ถูกระบุอย่างชัดเจนโดยองค์ประกอบ <Variable>
name
ตัวแปร 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>
เกี่ยวกับนโยบาย ExtractVariable
นักพัฒนา API จะสร้างพร็อกซี API ที่ทำงานแตกต่างกันไปตามเนื้อหาของข้อความ รวมถึงส่วนหัว, เส้นทาง URI, เพย์โหลด และพารามิเตอร์การค้นหา บ่อยครั้งที่พร็อกซีจะแยกบางส่วน ของเนื้อหานี้เพื่อใช้ในคำสั่งตามเงื่อนไข ใช้นโยบาย ดึงข้อมูลตัวแปร เพื่อดำเนินการ นี้
เมื่อกำหนดนโยบาย ExtractVariable คุณสามารถเลือกได้ดังนี้
- ชื่อของตัวแปรที่จะตั้งค่า
- แหล่งที่มาของตัวแปร
- จำนวนตัวแปรที่จะแยกและตั้งค่า
เมื่อดำเนินการ นโยบายจะใช้รูปแบบข้อความกับเนื้อหา และจะกำหนดชุดรูปแบบ ค่าของตัวแปรที่กำหนดกับเนื้อหา จากนั้นนโยบายและโค้ดอื่นๆ จะสามารถใช้ ตัวแปรเหล่านั้นเพื่อเปิดใช้พฤติกรรมแบบไดนามิก หรือส่งข้อมูลธุรกิจไปยัง Edge API Analytics
หากต้องการดูวิธีใช้ ExtractVariable เพื่อสร้างรายงาน Analytics ที่ขับเคลื่อนด้วยเนื้อหา โปรดดู วิเคราะห์ เนื้อหาข้อความ API โดยใช้ข้อมูลวิเคราะห์ที่กำหนดเอง
ขอบเขต
ชุดตัวแปรที่มีนโยบาย ExtractVariable มีขอบเขตทั้งหมด นั่นก็คือ หลังจาก นโยบาย ExtractVariable จะกำหนดตัวแปรใหม่ คุณสามารถเข้าถึงตัวแปรนั้นจากนโยบายใดก็ได้หรือ โค้ดในขั้นตอนใดก็ได้ของโฟลว์ (ที่จะทำงานหลังนโยบาย ExtractVariable) ช่วงเวลานี้ ประกอบด้วย:
- PreFlow: ProxyEndpoint และ TargetEndpoint (คำขอและการตอบกลับ)
- PostFlow: ProxyEndpoint และ TargetEndpoint (คำขอและการตอบกลับ)
- PostClientFlow: ProxyEndpoint (เฉพาะการตอบกลับเท่านั้น โดยใช้เมธอด นโยบายการบันทึกข้อความ)
- โฟลว์ข้อผิดพลาด
เกี่ยวกับการจับคู่และการสร้างตัวแปร
นโยบาย ดึงข้อมูลตัวแปร จะดึงข้อมูลจากคำขอหรือการตอบกลับแล้วเขียนว่า ให้กับตัวแปร สำหรับข้อมูลแต่ละประเภทที่คุณดึงได้ เช่น เส้นทาง 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 เป็นอะไรก็ได้ที่ปรากฏในพร็อกซี.pathsuffix หลัง "/a/" ตัวอย่างเช่น สมมติว่าเส้นทางฐานสำหรับ พร็อกซี API ของคุณคือ /basepath/v1 มีคำขอขาเข้า ไปที่ http://myCo.com/basepath/v1/a/b ตัวแปรถูกตั้งค่าเป็น "b"
การระบุหลายรูปแบบ
คุณระบุรูปแบบการจับคู่หลายรายการได้ โดยสอดคล้องกับแท็ก <Pattern> โดยที่
- รูปแบบทั้งหมดได้รับการทดสอบเพื่อการจับคู่
- หากไม่มีรูปแบบที่ตรงกัน นโยบายจะไม่ดำเนินการใดๆ และตัวแปรจะไม่ส่งผลใดๆ สร้าง แล้ว
- ถ้ามีรูปแบบที่ตรงกันมากกว่าหนึ่งรูปแบบ รูปแบบที่มีส่วนของเส้นทางที่ยาวที่สุดจะถูกใช้สำหรับ การแยก
- ถ้ารูปแบบที่ตรงกันสองรูปแบบมีส่วนของเส้นทางที่ยาวที่สุด รูปแบบที่ระบุเป็นอันดับแรกใน ระบบจะใช้นโยบายสำหรับการดึงข้อมูล
ในตัวอย่างถัดไป คุณสร้างนโยบายที่มีรูปแบบที่ตรงกัน 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>
รูปแบบแรกจับคู่คำขอกับเส้นทาง (ส่วนของเส้นทาง 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"
หากค่าที่ส่งไปยังนโยบาย ดึงข้อมูลตัวแปร มีสัญลักษณ์พิเศษ เช่น "{" ให้ใช้ "%" ให้สามารถหลีกหนีไปได้ ตัวอย่างต่อไปนี้ใช้อักขระหลีกกับ "{" และ "}" อักขระ ในรูปแบบนี้เพราะใช้เป็นอักขระลิเทอรัลในค่าของข้อความค้นหา พารามิเตอร์:
<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 แล้ว ตัวแปรที่เกี่ยวข้องจะไม่ สร้าง แล้ว
ตัวอย่างต่อไปนี้แสดงนโยบาย ExtractVariable ที่ป้อนข้อมูลตัวแปร 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 ในนโยบายที่อ้างอิงตัวแปรเพื่อกำหนดค่านโยบายที่จะรับ
ตัวแปรที่แก้ไขไม่ได้ใดๆ เป็นสตริงว่างเปล่า (null):
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
การอ้างอิงองค์ประกอบ
การอ้างอิงองค์ประกอบจะอธิบายองค์ประกอบและแอตทริบิวต์ของ ExtractVariable
<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 ซึ่งจะไม่รวมเส้นทางฐานสำหรับพร็อกซี 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
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | ประเภท |
---|---|---|---|---|
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
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | ประเภท |
---|---|---|---|---|
ชื่อ | ระบุชื่อของพารามิเตอร์การค้นหา ถ้าพารามิเตอร์การค้นหาหลายรายการมี ชื่อเดียวกัน ใช้การอ้างอิงที่จัดทำดัชนี โดยที่อินสแตนซ์แรกของพารามิเตอร์การค้นหา ไม่มีดัชนี รายการที่ 2 อยู่ที่ดัชนี 2 รายการที่ 3 อยู่ที่ดัชนี 3 ฯลฯ |
ไม่มี |
ต้องระบุ | สตริง |
<Header> องค์ประกอบ
(ไม่บังคับ แต่โปรดดูข้อมูลเพิ่มเติมในแถว "สถานะ" ในตารางด้านล่าง) ดึงข้อมูลค่า จากส่วนหัว HTTP ของข้อความ request หรือ response ที่ระบุ ถ้าส่วนหัวหลายรายการมี โดยใช้ชื่อเดียวกัน ค่าของเมตริกก็จะเก็บไว้ในอาร์เรย์
<!-- 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
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | ประเภท |
---|---|---|---|---|
ชื่อ | ระบุชื่อของส่วนหัวที่คุณดึงค่าออกมา หากหลาย
ส่วนหัวมีชื่อเดียวกัน ใช้การอ้างอิงที่มีการจัดทำดัชนี โดยที่อินสแตนซ์แรกของ
ส่วนหัวไม่มีดัชนี ส่วนที่สองอยู่ที่ดัชนี 2 ส่วนที่สามอยู่ที่ดัชนี 3 เป็นต้น ใช้
.values เพื่อดูส่วนหัวทั้งหมดในอาร์เรย์ |
ไม่มี |
ต้องระบุ | สตริง |
<FormParam> องค์ประกอบ
(ไม่บังคับ แต่โปรดดูข้อมูลเพิ่มเติมในแถว "สถานะ" ในตารางด้านล่าง) ดึงข้อมูลค่า
จากพารามิเตอร์แบบฟอร์มที่ระบุของข้อความ request หรือ response ที่ระบุ พารามิเตอร์แบบฟอร์ม
สามารถดึงได้เฉพาะเมื่อส่วนหัว Content-Type
ของข้อความที่ระบุคือ
application/x-www-form-urlencoded
<FormParam name="greeting"> <Pattern>hello {user}</Pattern> </FormParam>
ค่าเริ่มต้น: | ไม่มี |
การตรวจหาบุคคล: | ไม่บังคับ อย่างไรก็ตาม คุณต้องรวมรายการต่อไปนี้อย่างน้อย 1 รายการ
<URIPath> <QueryParam> <Header>
<FormParam> , <JSONPayload> หรือ
<XMLPayload>. |
ประเภท: | ไม่มี |
Attributes
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | ประเภท |
---|---|---|---|---|
ชื่อ | ชื่อพารามิเตอร์ของแบบฟอร์มที่คุณดึงข้อมูลค่า |
ไม่มี |
ต้องระบุ | สตริง |
<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
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | ประเภท |
---|---|---|---|---|
ชื่อ | ชื่อของตัวแปรที่จะดึงค่าออกมา |
ไม่มี |
ต้องระบุ | สตริง |
<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> หลายแท็กในองค์ประกอบ <Variable> เพื่อป้อนข้อมูล ตัวแปรหลายตัว
<Variable name="name" type="string"> <JSONPath>{example}</JSONPath> </Variable>
ค่าเริ่มต้น: | ไม่มี |
การตรวจหาบุคคล: | ต้องระบุภายในองค์ประกอบ JSONPayload |
ประเภท: | ไม่มี |
Attributes
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | ประเภท |
---|---|---|---|---|
ชื่อ |
ระบุชื่อของตัวแปรที่จะใช้เป็นค่าดึงข้อมูล มอบหมายแล้ว |
ชื่อ |
ต้องระบุ | สตริง |
ประเภท | ระบุประเภทข้อมูลของค่าตัวแปร | ไม่มี | ไม่บังคับ |
สตริง ซึ่งมีให้เลือกดังนี้
|
<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> องค์ประกอบ
(ไม่บังคับ) ระบุเนมสเปซที่จะใช้ในการประเมินค่า XPath หากคุณกำลังใช้ Namespace ในนิพจน์ 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
แอตทริบิวต์ | คำอธิบาย | ค่าเริ่มต้น | การมีบุคคลอยู่ | ประเภท |
---|---|---|---|---|
ชื่อ |
ระบุชื่อของตัวแปรที่จะใช้เป็นค่าดึงข้อมูล มอบหมายแล้ว |
ชื่อ |
ต้องระบุ | สตริง |
ประเภท | ระบุประเภทข้อมูลของค่าตัวแปร | บูลีน | ไม่บังคับ |
สตริง ซึ่งมีให้เลือกดังนี้
|
<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 เนื้อหาข้อความโดยใช้ข้อมูลวิเคราะห์ที่กำหนดเอง