นโยบายการดึงข้อมูล

คุณกำลังดูเอกสารประกอบ 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 ในแต่ละกรณี ตลอดจนวิธีทำให้ใช้งานได้และ เรียกใช้แต่ละตัวอย่าง

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, พารามิเตอร์การค้นหา, ส่วนหัว, พารามิเตอร์ของฟอร์ม และ ตัวแปรที่คุณใช้แท็ก &lt;Pattern&gt; เพื่อระบุอย่างน้อย 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"

การระบุหลายรูปแบบ

คุณระบุรูปแบบการจับคู่หลายรายการได้ โดยสอดคล้องกับแท็ก &lt;Pattern&gt; โดยที่

  • รูปแบบทั้งหมดได้รับการทดสอบเพื่อการจับคู่
  • หากไม่มีรูปแบบที่ตรงกัน นโยบายจะไม่ดำเนินการใดๆ และตัวแปรจะไม่ส่งผลใดๆ สร้าง แล้ว
  • ถ้ามีรูปแบบที่ตรงกันมากกว่าหนึ่งรูปแบบ รูปแบบที่มีส่วนของเส้นทางที่ยาวที่สุดจะถูกใช้สำหรับ การแยก
  • ถ้ารูปแบบที่ตรงกันสองรูปแบบมีส่วนของเส้นทางที่ยาวที่สุด รูปแบบที่ระบุเป็นอันดับแรกใน ระบบจะใช้นโยบายสำหรับการดึงข้อมูล

ในตัวอย่างถัดไป คุณสร้างนโยบายที่มีรูปแบบที่ตรงกัน 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 ได้ คุณสามารถใช้ "*" และ "**" อักขระไวลด์การ์ดในรูปแบบ โดยมี

  • "*" ตรงกับส่วนใดส่วนหนึ่งของเส้นทาง
  • "**" ตรงกับส่วนต่างๆ ของเส้นทาง

เช่น คุณระบุรูปแบบให้กับองค์ประกอบ &lt;URIPath&gt; ดังที่ปรากฏ ด้านล่าง

<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 คุณต้องระบุแท็ก &lt;Variable&gt; อย่างน้อย 1 รายการในนโยบาย แท็ก &lt;Variable&gt; ระบุ ชื่อของตัวแปรปลายทางที่จัดเก็บข้อมูลที่ดึงมา และ JsonPath (JSON) หรือ XPATH (XML) กับข้อมูลที่ดึงมา

แท็ก &lt;Variable&gt; ทั้งหมดในนโยบาย จะได้รับการประเมิน เพื่อให้คุณป้อนข้อมูลตัวแปรหลายรายการจากนโยบายเดียวได้ ถ้า แท็ก &lt;Variable&gt; ประเมินเป็นฟิลด์ที่ถูกต้องใน 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>

&lt;ExtractVariables&gt; แอตทริบิวต์

<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">

ตารางต่อไปนี้อธิบายแอตทริบิวต์ทั่วไปในองค์ประกอบระดับบนสุดของนโยบายทั้งหมด

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่
name

ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ name สามารถ ประกอบด้วยตัวอักษร ตัวเลข การเว้นวรรค ขีดกลางสั้น ขีดล่าง และจุด ค่านี้ไม่สามารถ เกิน 255 อักขระ

(ไม่บังคับ) ใช้องค์ประกอบ <DisplayName> เพื่อติดป้ายกำกับนโยบายใน เครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน

ไม่มี ต้องระบุ
continueOnError

ตั้งค่าเป็น false เพื่อแสดงผลข้อผิดพลาดเมื่อนโยบายล้มเหลว เป็นเรื่องปกติ พฤติกรรมสำหรับนโยบายส่วนใหญ่

ตั้งค่าเป็น true เพื่อให้ดำเนินการตามขั้นตอนได้อย่างต่อเนื่องแม้จะมีนโยบายแล้วก็ตาม ล้มเหลว

เท็จ ไม่บังคับ
enabled

ตั้งค่าเป็น true เพื่อบังคับใช้นโยบาย

ตั้งค่าเป็น false เพื่อปิดนโยบาย นโยบายจะไม่ บังคับใช้ แม้ว่าจะยังคงแนบกับขั้นตอน

จริง ไม่บังคับ
async

แอตทริบิวต์นี้เลิกใช้งานแล้ว

เท็จ เลิกใช้

&lt;DisplayName&gt; องค์ประกอบ

ใช้เพิ่มเติมจากแอตทริบิวต์ name เพื่อติดป้ายกำกับนโยบายใน เครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน

<DisplayName>Policy Display Name</DisplayName>
ค่าเริ่มต้น

ไม่มี

หากไม่ใส่องค์ประกอบนี้ ค่าของแอตทริบิวต์ name ของนโยบายจะเป็น

การมีบุคคลอยู่ ไม่บังคับ
ประเภท สตริง

&lt;Source&gt; องค์ประกอบ

(ไม่บังคับ) ระบุตัวแปรที่ต้องการแยกวิเคราะห์ ค่าของ <Source> จะมีค่าเริ่มต้นเป็น message ค่า message ขึ้นอยู่กับบริบท ในขั้นตอนคำขอ message จะแก้ไขเป็นข้อความคำขอ ใน โฟลว์การตอบกลับ message จะเปลี่ยนเป็นข้อความตอบกลับ

แม้ว่าคุณจะใช้นโยบายนี้เพื่อดึงข้อมูลจากคำขอหรือข้อความตอบกลับ แต่ก็มี สามารถใช้เพื่อดึงข้อมูลจากตัวแปรใดก็ได้ เช่น ใช้เพื่อดึงข้อมูล ข้อมูลจากเอนทิตีที่สร้างโดยนโยบาย AccessEntity จากข้อมูล ส่งคืนโดย บริการ นโยบายข้อความไฮไลต์ หรือดึงข้อมูลจากออบเจ็กต์ XML หรือ JSON

หากแก้ไข <Source> ไม่ได้หรือเปลี่ยนเป็นประเภทที่ไม่ใช่ข้อความไม่ได้ นโยบายก็จะไม่ตอบสนอง

<Source clearPayload="true|false">request</Source>
ค่าเริ่มต้น: ข้อความ
การตรวจหาบุคคล: ไม่บังคับ
ประเภท: สตริง

Attributes

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่ ประเภท
clearPayload

ตั้งค่าเป็น true หากต้องการล้างเพย์โหลดที่ระบุใน &lt;Source&gt; หลังจากดึงข้อมูล

ใช้ตัวเลือก <clearPayload> เฉพาะกรณีที่ข้อความต้นฉบับไม่ใช่ จำเป็นหลังจากดำเนินการ ExtractVariable การตั้งค่าเป็น true จะว่าง เพิ่มหน่วยความจำที่ข้อความใช้

เท็จ

ไม่บังคับ บูลีน

&lt;VariablePrefix&gt; องค์ประกอบ

(ไม่บังคับ) ชื่อตัวแปรที่สมบูรณ์สร้างขึ้นด้วยการรวม <VariablePrefix> จุด และชื่อที่คุณกำหนดใน {วงเล็บปีกกา} ในเครื่องหมาย องค์ประกอบ <Pattern> หรือองค์ประกอบ &lt;Variable&gt; ดังตัวอย่างต่อไปนี้ myprefix.id, myprefix.dbncode หรือ myprefix.oauthtoken.

<VariablePrefix>myprefix</VariablePrefix>

เช่น สมมติว่าค่าของชื่อคือ "user"

  • หากไม่ได้ระบุ <VariablePrefix> ค่าที่ดึงมาจะเป็น กำหนดให้กับตัวแปรชื่อ user
  • หากระบุ <VariablePrefix> เป็น myprefix ไฟล์ดึงข้อมูล มีการกำหนดให้กับตัวแปรชื่อ myprefix.user
ค่าเริ่มต้น: ไม่มี
การตรวจหาบุคคล: ไม่บังคับ
ประเภท: สตริง

&lt;IgnoreUnresolvedVariables&gt; องค์ประกอบ

(ไม่บังคับ) ตั้งค่าเป็น true เพื่อจัดการตัวแปรที่แก้ไขไม่ได้เสมือนเป็นสตริงว่าง (Null) ตั้งค่าเป็น false หากต้องการให้นโยบายแสดงข้อผิดพลาดเมื่อมีการอ้างอิง ไม่สามารถแก้ตัวแปร

<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
ค่าเริ่มต้น: เท็จ
การตรวจหาบุคคล: ไม่บังคับ
ประเภท: บูลีน

หากไม่มีการอ้างอิง XPath ใน <XMLPayload> นโยบายจะส่ง ข้อผิดพลาดต่อไปนี้

{
   "fault":{
      "faultstring":"Unresolved xpath path in policy policy_name.",
      "detail":{
         "errorcode":"steps.extractvariables.InvalidXPath"
      }
   }
}

&lt;URIPath&gt; องค์ประกอบ

(ไม่บังคับ แต่โปรดดูข้อมูลเพิ่มเติมในแถว "การตรวจหาบุคคล" ในตารางด้านล่าง) ดึงข้อมูลค่า จากProxy.pathsuffix ของข้อความต้นฉบับคำขอ เส้นทางที่ใช้กับ รูปแบบคือProxy.pathsuffix ซึ่งจะไม่รวมเส้นทางฐานสำหรับพร็อกซี API ถ้า เมื่อข้อความต้นฉบับแก้ไขเป็นการตอบกลับประเภทข้อความแล้ว องค์ประกอบนี้จะไม่ดำเนินการใดๆ

<URIPath>
   <Pattern ignoreCase="false">/accounts/{id}</Pattern>
</URIPath>

คุณใช้องค์ประกอบ &lt;Pattern&gt; หลายรายการได้ดังนี้

<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 ระบุเพื่อไม่คำนึงถึงตัวพิมพ์ใหญ่/เล็กเมื่อตรงกับรูปแบบ

เท็จ

ไม่บังคับ บูลีน

&lt;QueryParam&gt; องค์ประกอบ

(ไม่บังคับ แต่โปรดดูข้อมูลเพิ่มเติมในแถว "สถานะ" ในตารางด้านล่าง) ดึงข้อมูลค่า จากพารามิเตอร์การค้นหาที่ระบุของข้อความแหล่งที่มาคําขอ หาก ข้อความต้นฉบับแก้ไขเป็นการตอบกลับประเภทข้อความแล้ว องค์ประกอบนี้จะ ไม่มี

<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 ฯลฯ

ไม่มี

ต้องระบุ สตริง

&lt;Header&gt; องค์ประกอบ

(ไม่บังคับ แต่โปรดดูข้อมูลเพิ่มเติมในแถว "สถานะ" ในตารางด้านล่าง) ดึงข้อมูลค่า จากส่วนหัว 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 เพื่อดูส่วนหัวทั้งหมดในอาร์เรย์

ไม่มี

ต้องระบุ สตริง

&lt;FormParam&gt; องค์ประกอบ

(ไม่บังคับ แต่โปรดดูข้อมูลเพิ่มเติมในแถว "การตรวจหาบุคคล" ในตารางด้านล่าง) ดึงข้อมูลค่า จากพารามิเตอร์แบบฟอร์มที่ระบุของข้อความ 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

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่ ประเภท
ชื่อ ชื่อพารามิเตอร์ของแบบฟอร์มที่คุณดึงข้อมูลค่า

ไม่มี

ต้องระบุ สตริง

&lt;Variable&gt; องค์ประกอบ

(ไม่บังคับ แต่โปรดดูข้อมูลเพิ่มเติมในแถว "การตรวจหาบุคคล" ในตารางด้านล่าง) ระบุ ชื่อของตัวแปรที่จะดึงค่าออกมา

<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

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่ ประเภท
ชื่อ ชื่อของตัวแปรที่จะดึงค่าออกมา

ไม่มี

ต้องระบุ สตริง

&lt;JSONPayload&gt; องค์ประกอบ

(ไม่บังคับ แต่โปรดดูข้อมูลเพิ่มเติมในแถว "การตรวจหาบุคคล" ในตารางด้านล่าง) ระบุ ข้อความรูปแบบ JSON ซึ่งจะดึงค่าของตัวแปรออกมา JSON การดึงข้อมูลจะทำได้ก็ต่อเมื่อส่วนหัว Content-Type ของข้อความเป็น application/json

<JSONPayload>
   <Variable name="name" type="string">
      <JSONPath>{example}</JSONPath>
   </Variable>
</JSONPayload>
ค่าเริ่มต้น: ไม่มี
การตรวจหาบุคคล: ไม่บังคับ อย่างไรก็ตาม คุณต้องรวมรายการต่อไปนี้อย่างน้อย 1 รายการ <URIPath> <QueryParam> <Header> <FormParam>, <JSONPayload> หรือ <XMLPayload>.
ประเภท: ไม่มี

&lt;JSONPayload&gt;/&lt;Variable&gt; องค์ประกอบ

(ต้องระบุภายในองค์ประกอบ JSONPayload) ระบุตัวแปรที่ค่าที่ดึงมาคือ มอบหมายแล้ว คุณสามารถใส่แท็ก &lt;Variable&gt; หลายแท็กในองค์ประกอบ &lt;Variable&gt; เพื่อป้อนข้อมูล ตัวแปรหลายตัว

<Variable name="name" type="string">
   <JSONPath>{example}</JSONPath>
</Variable>
ค่าเริ่มต้น: ไม่มี
การตรวจหาบุคคล: ต้องระบุภายในองค์ประกอบ JSONPayload
ประเภท: ไม่มี

Attributes

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่ ประเภท
ชื่อ

ระบุชื่อของตัวแปรที่จะใช้เป็นค่าดึงข้อมูล มอบหมายแล้ว

ชื่อ

ต้องระบุ สตริง
ประเภท ระบุประเภทข้อมูลของค่าตัวแปร ไม่มี ไม่บังคับ

สตริง ซึ่งมีให้เลือกดังนี้

  • สตริง
  • boolean
  • จำนวนเต็ม
  • ยาว
  • จำนวนลอยตัว
  • double
  • Nodeset (แสดงส่วนย่อย JSON)

&lt;JSONPayload&gt;/&lt;Variable&gt;/&lt;JSONPath&gt; องค์ประกอบ

(ต้องระบุภายในองค์ประกอบ JSONPayload:Variable) ระบุเส้นทาง JSON ที่ใช้ดึงข้อมูล จากข้อความรูปแบบ JSON

<Variable name="name">
   <JSONPath>$.rss.channel.title</JSONPath>
</Variable>
ค่าเริ่มต้น: ไม่มี
การตรวจหาบุคคล: ต้องระบุ
ประเภท: สตริง

&lt;XMLPayload&gt; องค์ประกอบ

(ไม่บังคับ แต่โปรดดูข้อมูลเพิ่มเติมในแถว "การตรวจหาบุคคล" ในตารางด้านล่าง) ระบุ ข้อความรูปแบบ 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

ตั้งค่าเป็น true เพื่อหยุดการประเมิน XPath หลังจากป้อนข้อมูลตัวแปร 1 รายการแล้ว ซึ่งหมายความว่านโยบายจะป้อนข้อมูลตัวแปรเพียงรายการเดียว

เท็จ

ไม่บังคับ บูลีน

&lt;XMLPayload&gt;/&lt;Namespaces&gt; องค์ประกอบ

(ไม่บังคับ) ระบุเนมสเปซที่จะใช้ในการประเมินค่า 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

คำนำหน้าเนมสเปซ

ไม่มี

ต้องระบุ สตริง

&lt;XMLPayload&gt;/&lt;Variable&gt; องค์ประกอบ

(ไม่บังคับ) ระบุตัวแปรที่จะกำหนดค่าดึงข้อมูล

<Variable name="name" type="boolean">
   <XPath>/test/example</XPath>
</Variable>
ค่าเริ่มต้น: ไม่มี
การตรวจหาบุคคล: ไม่บังคับ
ประเภท: ไม่มี

Attributes

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่ ประเภท
ชื่อ

ระบุชื่อของตัวแปรที่จะใช้เป็นค่าดึงข้อมูล มอบหมายแล้ว

ชื่อ

ต้องระบุ สตริง
ประเภท ระบุประเภทข้อมูลของค่าตัวแปร บูลีน ไม่บังคับ

สตริง ซึ่งมีให้เลือกดังนี้

  • สตริง
  • boolean
  • จำนวนเต็ม
  • ยาว
  • จำนวนลอยตัว
  • double
  • Nodeset (แสดงส่วนย่อย XML)

&lt;XMLPayload&gt;/&lt;Variable&gt;/&lt;XPath&gt; องค์ประกอบ

(ต้องระบุภายในองค์ประกอบ 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>
ค่าเริ่มต้น: ไม่มี
การตรวจหาบุคคล: ต้องระบุ
ประเภท: สตริง

ข้อมูลอ้างอิงข้อผิดพลาด

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause Fix
steps.extractvariables.ExecutionFailed 500

This error occurs when:

  • The input payload (JSON, XML) is empty.
  • The input (JSON, XML, etc) passed to the policy is invalid or malformed.
steps.extractvariables.ImmutableVariable 500 A variable used in the policy is immutable. The policy was unable to set this variable.
steps.extractvariables.InvalidJSONPath 500 This error occurs if an invalid JSON path is used in the JSONPath element of the policy. For example, if a JSON payload does not have the object Name, but you specify Name as the path in the policy, then this error occurs.
steps.extractvariables.JsonPathParsingFailure 500 This error occurs when the policy is unable to parse a JSON path and extract data from the flow variable specified in Source element. Typically this happens if the flow variable specified in the Source element does not exist in the current flow.
steps.extractvariables.SetVariableFailed 500 This error occurs if the policy could not set the value to a variable. The error generally happens if you try to assign values to multiple variables whose names start with the same words in a nested dot-separated format.
steps.extractvariables.SourceMessageNotAvailable 500 This error occurs if the message variable specified in the Source element of the policy is either:
  • Out of scope (not available in the specific flow where the policy is being executed) or
  • Can't be resolved (is not defined)
steps.extractvariables.UnableToCast 500 This error occurs if the policy was unable to cast the extracted value to a variable. Typically this happens if you attempt to set the value of one data type to a variable of another data type.

Deployment errors

These errors can occur when you deploy a proxy containing this policy.

Error name Cause Fix
NothingToExtract If the policy does not have any of the elements URIPath, QueryParam, Header, FormParam, XMLPayload, or JSONPayload, the deployment of the API Proxy fails, because there's nothing to extract.
NONEmptyPrefixMappedToEmptyURI This error occurs if the policy has a prefix defined in the Namespace element under the XMLPayload element, but no URI is defined.
DuplicatePrefix This error occurs if the policy has the same prefix defined more than once in the Namespace element under the XMLPayload element.
NoXPathsToEvaluate If the policy does not have the XPath element within the XMLPayload element, then the deployment of the API proxy fails with this error.
EmptyXPathExpression If the policy has an empty XPath expression within the XMLPayload element, then the deployment of the API proxy fails.
NoJSONPathsToEvaluate If the policy does not have the JSONPath element within the JSONPayload element, then the deployment of the API proxy fails with this error.
EmptyJSONPathExpression If the policy has an empty XPath expression within the XMLPayload element, then the deployment of the API proxy fails.
MissingName If the policy does not have the name attribute in any of the policy elements like QueryParam, Header, FormParam or Variable, where it is required, then the deployment of the API proxy fails.
PatternWithoutVariable If the policy does not have a variable specified within the Pattern element, then the deployment of the API proxy fails. The Pattern element requires the name of the variable in which extracted data will be stored.
CannotBeConvertedToNodeset If the policy has an XPath expression where the Variable type is defined as nodeset, but the expression cannot be converted to nodeset, then the deployment of the API proxy fails.
JSONPathCompilationFailed The policy could not compile a specified JSON Path.
InstantiationFailed The policy could not be instantiated.
XPathCompilationFailed If the prefix or the value used in the XPath element is not part of any of the declared namespaces in the policy, then the deployment of the API proxy fails.
InvalidPattern If the Pattern element definition is invalid in any of the elements like URIPath, QueryParam, Header, FormParam, XMLPayload or JSONPayload within the policy, then the deployment of the API proxy fails.

Fault variables

These variables are set when this policy triggers an error at runtime. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name = "SourceMessageNotAvailable"
extractvariables.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. extractvariables.EV-ParseJsonResponse.failed = true

Example error response

{
   "fault":{
      "detail":{
         "errorcode":"steps.extractvariables.SourceMessageNotAvailable"
      },
      "faultstring":"request message is not available for ExtractVariable: EV-ParseJsonResponse"
   }
}

Example fault rule

<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 เนื้อหาข้อความโดยใช้ข้อมูลวิเคราะห์ที่กำหนดเอง

ข้อมูลอ้างอิงตัวแปร