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

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X
ข้อมูล

อะไร

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

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

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

วิดีโอ

ดูวิดีโอต่อไปนี้เพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับนโยบาย ExtractVariable

วิดีโอ คำอธิบาย
แยกตัวแปรจากเพย์โหลด XML แยกตัวแปรจากเพย์โหลด XML โดยใช้นโยบายการแยกตัวแปร
แยกตัวแปรจากเพย์โหลด JSON แยกตัวแปรจากเพย์โหลด JSON โดยใช้นโยบายการแยกตัวแปร
ดึงตัวแปรจากพารามิเตอร์ ดึงข้อมูลตัวแปรจากพารามิเตอร์ เช่น พารามิเตอร์การค้นหา ส่วนหัว แบบฟอร์ม หรือ URI
ดึงตัวแปรจากพารามิเตอร์หลายค่า แยกตัวแปรจากพารามิเตอร์หลายค่า
แยกตัวแปรจากพารามิเตอร์การค้นหา (คลาสสิก Edge) ดึงตัวแปรจากพารามิเตอร์การค้นหาโดยใช้ UI ของ แบบคลาสสิก
แยกตัวแปรจากเพย์โหลด XML หรือ JSON (คลาสสิก Edge) แยกตัวแปรจากเพย์โหลด XML หรือ JSON โดยใช้ UI ของ Classic Edge

ลองฟัง

ตัวอย่างโค้ดนโยบายเหล่านี้แสดงวิธีแยกตัวแปรจากอาร์ติแฟกต์ประเภทต่อไปนี้

GitHub

ลิงก์เหล่านี้จะชี้ไปยังตัวอย่างพร็อกซี API ที่ใช้งานได้ ซึ่งคุณจะทำให้และเรียกใช้บน Edge ได้ โดยเครื่องมือดังกล่าวใช้ ExtractVariant และอยู่ในที่เก็บ api-platform-sample ของ Apigee ใน GitHub README อธิบายวิธีใช้ ExtractVariant ในแต่ละกรณี และวิธีใช้งานและเรียกใช้ตัวอย่างแต่ละรายการ

URI

<ExtractVariables name="ExtractVariables-1">
   <DisplayName>Extract a portion of the url path</DisplayName>
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/accounts/{id}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

ลองดูโค้ดนโยบายตัวอย่างด้านบน องค์ประกอบ <URIPath> จะบอกนโยบาย ExtractVariant เพื่อดึงข้อมูลจากเส้นทาง URI องค์ประกอบ <Pattern> ระบุรูปแบบที่จะใช้กับเส้นทาง URI รูปแบบนี้ถือเป็นเทมเพลตแบบง่ายที่มีวงเล็บปีกกาแสดงถึงส่วนที่แตกต่างกันของเส้นทาง URI

ชื่อของตัวแปรที่จะตั้งค่าจะกำหนดโดยค่าที่ระบุในองค์ประกอบ <VariablePrefix> รวมถึงค่าที่อยู่ในวงเล็บปีกกา {} ในองค์ประกอบ <Pattern> ค่าทั้ง 2 ค่าจะต่อกันด้วยจุดเชื่อมต่อ จึงทำให้เป็นชื่อตัวแปรเป็น urirequest.id เป็นต้น หากไม่มีองค์ประกอบ <VariablePrefix> ชื่อตัวแปรจะเป็นเพียงค่าที่อยู่ในวงเล็บปีกกาเท่านั้น

ลองดูตัวอย่างโค้ดนโยบายด้านบนซึ่งทำงานกับคำขอที่เข้ามาใหม่ต่อไปนี้

GET http://org1-test.apigee.net/svc1/accounts/12797282

สมมติว่าเส้นทางพื้นฐานสำหรับพร็อกซี API คือ /svc1 เมื่อ Apigee Edge นำโค้ดนโยบาย ExtractVariant ด้านบนไปใช้กับคำขอที่เข้ามาใหม่ ระบบจะตั้งค่าตัวแปร urirequest.id เป็น 12797282 หลังจากที่ Apigee Edge ใช้งานนโยบายแล้ว นโยบายหรือโค้ดที่ตามมาในขั้นตอนการประมวลผลจะอ้างอิงตัวแปรชื่อ urirequest.id เพื่อรับค่าสตริง 12797282

ตัวอย่างเช่น นโยบาย AssignMessage ต่อไปนี้จะฝังค่าของตัวแปรนั้นลงในเพย์โหลดของข้อความคำขอใหม่

<AssignMessage async="false" continueOnError="false" enabled="true" name="AssignPayload">
 <DisplayName>AssignPayload</DisplayName>
  <Set>
   <Payload contentType="text/xml">
    <IdExtractedFromURI>{urirequest.id}</IdExtractedFromURI>
   </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="true" transport="http" type="request">newRequest</AssignTo>
</AssignMessage>

พารามิเตอร์การค้นหา

<ExtractVariables name="ExtractVariables-2">
   <DisplayName>Extract a value from a query parameter</DisplayName>
   <Source>request</Source>
   <QueryParam name="code">
      <Pattern ignoreCase="true">DBN{dbncode}</Pattern>
   </QueryParam>
   <VariablePrefix>queryinfo</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

ลองดูตัวอย่างโค้ดนโยบายด้านบนซึ่งทำงานกับคำขอที่เข้ามาใหม่ต่อไปนี้

GET http://org1-test.apigee.net/accounts/12797282?code=DBN88271

เมื่อ Apigee Edge นำโค้ดนโยบาย ExtractVariant ด้านบนไปใช้กับคำขอที่เข้ามาใหม่ โดยจะตั้งค่าตัวแปร queryinfo.dbncode เป็น 88271 หลังจากที่ Apigee Edge ใช้งานนโยบายแล้ว นโยบายหรือโค้ดที่ตามมาในขั้นตอนการประมวลผลจะอ้างอิงตัวแปรชื่อ queryinfo.dbncode เพื่อรับค่าสตริง 88271

ขณะนี้คุณเข้าถึงตัวแปร queryinfo.dbncode ในพร็อกซีได้แล้ว ตัวอย่างเช่น นโยบาย AssignMessage ต่อไปนี้จะคัดลอกไปยังเพย์โหลดของคำขอ

<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath">
 <DisplayName>GetQP</DisplayName>
  <Set>
   <Payload contentType="text/xml">
    <ExtractQP>{queryinfo.dbncode}</ExtractQP>
   </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

หลายพารามิเตอร์

<ExtractVariables name="ExtractVariables-2">
   <DisplayName>Extract a value from a query parameter</DisplayName>
   <Source>request</Source>
   <QueryParam name="w">
      <Pattern ignoreCase="true">{firstWeather}</Pattern>
   </QueryParam>
   <QueryParam name="w.2">
     <Pattern ignoreCase="true">{secondWeather}</Pattern>
   </QueryParam>
   <VariablePrefix>queryinfo</VariablePrefix>
 <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

สมมติว่าการออกแบบ API ช่วยให้คุณระบุพารามิเตอร์การค้นหาหลายรายการได้ในชื่อเดียวกัน คุณใช้นโยบายนี้เพื่อดึงค่าของพารามิเตอร์การค้นหา "w" หลายอินสแตนซ์ได้ หากต้องการอ้างอิงพารามิเตอร์การค้นหาเหล่านี้ในนโยบาย ExtractVariable คุณจะต้องใช้ดัชนีที่อินสแตนซ์แรกของพารามิเตอร์การค้นหาไม่มีดัชนี พารามิเตอร์ที่ 2 อยู่ที่ดัชนี 2 ตัวที่ 3 อยู่ที่ดัชนี 3 เป็นต้น

ลองดูตัวอย่างโค้ดนโยบายด้านบนซึ่งทำงานกับคำขอที่เข้ามาใหม่ต่อไปนี้

GET http://org1-test.apigee.net/weather?w=Boston&w=Chicago

เมื่อ Apigee Edge นำโค้ดนโยบาย ExtractVariant ด้านบนไปใช้กับคำขอที่เข้ามาใหม่ โดยจะตั้งค่าตัวแปร queryinfo.firstWeather เป็น Boston และตัวแปร queryInfo.secondWeather เป็น Chicago

ขณะนี้คุณเข้าถึงตัวแปร queryinfo.firstWeather และ queryinfo.secondWeather ในพร็อกซีได้แล้ว ตัวอย่างเช่น นโยบาย AssignMessage ต่อไปนี้จะคัดลอกไปยังเพย์โหลดของคำขอ

<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath">
 <DisplayName>GetQP</DisplayName>
  <Set>
   <Payload contentType="text/xml">
    <ExtractQP1>{queryinfo.firstWeather}</ExtractQP1>
    <ExtractQP2>{queryinfo.secondWeather}</ExtractQP2>
   </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

ส่วนหัว

<ExtractVariables name='ExtractVariable-OauthToken'>
  <Source>request</Source>
  <Header name="Authorization">
    <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern>
  </Header>
  <VariablePrefix>clientrequest</VariablePrefix>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

สมมติว่า API ของคุณใช้โทเค็นสำหรับผู้ถือ OAuth v2.0 ลองใช้โค้ดนโยบายตัวอย่างด้านบนกับคำขอที่มีโทเค็น OAuth v2.0 ซึ่งมีส่วนหัวดังนี้ Authorization: Bearer TU08xptfFfeM7aS0xHqlxTgEAdAM.

ในฐานะผู้ออกแบบ API สมมติว่าคุณต้องการใช้ค่าโทเค็น (ไม่ใช่ส่วนหัวทั้งหมด) เป็นคีย์ในการค้นหาแคช คุณสามารถใช้โค้ดนโยบาย ExtractVariant ด้านบนเพื่อดึงข้อมูลโทเค็นได้

เมื่อ Apigee Edge นำโค้ดนโยบาย ExtractVariant ด้านบนไปใช้กับส่วนหัวนี้ ซึ่งจะตั้งค่าตัวแปร clientrequest.oauthtoken เป็น TU08xptfFfeM7aS0xHqlxTgEAdAM

ตอนนี้คุณเข้าถึงตัวแปร clientrequest.oauthtoken ในพร็อกซีได้แล้ว ตัวอย่างเช่น นโยบาย AssignMessage ต่อไปนี้จะคัดลอกไปยังเพย์โหลดของคำขอ

<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath">
 <DisplayName>GetHeader</DisplayName>
  <Set>
   <Payload contentType="text/xml">
    <ExtractHeader>{clientrequest.oauthtoken}</ExtractHeader>
   </Payload>
  </Set>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

JSON

<ExtractVariables name="ExtractVariables-3">
   <Source>response</Source>
   <JSONPayload>
      <Variable name="latitude" type="float">
         <JSONPath>$.results[0].geometry.location.lat</JSONPath>
      </Variable>
      <Variable name="longitude" type="float">
         <JSONPath>$.results[0].geometry.location.lng</JSONPath>
      </Variable>
   </JSONPayload>
   <VariablePrefix>geocoderesponse</VariablePrefix>
</ExtractVariables>
<JSONPayload>$

ลองพิจารณาเปย์โหลดการตอบสนอง JSON ต่อไปนี้

{
  "results": [{
    "geometry": {
      "location": {
        "lat": 37.42291810,
        "lng": -122.08542120
      },
      "location_type": "ROOFTOP",
      "viewport": {
        "northeast": {
          "lat": 37.42426708029149,
          "lng": -122.0840722197085
        },
        "southwest": {
          "lat": 37.42156911970850,
          "lng": -122.0867701802915
        }
      }
    }
  }]
}

เมื่อ Apigee Edge นำโค้ดนโยบาย ExtractVariant ด้านบนไปใช้กับข้อความ JSON นี้ ซึ่งจะตั้งค่าตัวแปร 2 รายการ ได้แก่ geocoderesponse.latitude และ geocoderesponse.longitude ตัวแปรทั้ง 2 รายการใช้คํานําหน้าตัวแปรเดียวกันคือ geocoderesponse มีการระบุคำต่อท้ายสำหรับตัวแปรเหล่านี้อย่างชัดแจ้งโดยแอตทริบิวต์ name ขององค์ประกอบ <Variable>

ตัวแปร geocoderesponse.latitude จะได้รับค่า 37.42291810 ตัวแปร geocoderesponse.longitude จะได้รับค่า -122.08542120

ตอนนี้คุณเข้าถึงตัวแปร geocoderesponse.latitude ในพร็อกซีได้แล้ว เช่น นโยบาย AssignMessage ต่อไปนี้จะคัดลอกข้อความไปยังส่วนหัวชื่อ "ละติจูด" ในการตอบกลับ

<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath">
  <DisplayName>GetJSONVar</DisplayName>
  <Add>
    <Headers>
      <Header name="latitude">{geocoderesponse.latitude}</Header>
    </Headers>
  </Add> 
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="response"/> 
</AssignMessage>

XML

<ExtractVariables name="ExtractVariables-4">
   <Source>response</Source>
   <XMLPayload>
      <Namespaces>
         <Namespace prefix="dir">urn:43BFF88D-D204-4427-B6BA-140AF393142F</Namespace>
      </Namespaces>
      <Variable name="travelmode" type="string">
         <XPath>/dir:Directions/dir:route/dir:leg/dir:step/@mode</XPath>
      </Variable>
      <Variable name="duration" type="string">
         <XPath>/dir:Directions/dir:route/dir:leg/dir:step/dir:duration/dir:value</XPath>
      </Variable>
      <Variable name="timeunit" type="string">
         <XPath>/dir:Directions/dir:route/dir:leg/dir:step/dir:duration/dir:text</XPath>
      </Variable>
   </XMLPayload>
   <VariablePrefix>directionsresponse</VariablePrefix>
</ExtractVariables>
<XMLPayload>

โปรดพิจารณาเพย์โหลดการตอบสนอง XML ต่อไปนี้

<Directions xmlns="urn:43BFF88D-D204-4427-B6BA-140AF393142F">
   <status>OK</status>
   <route>
      <summary>I-40 W</summary>
      <leg>
         <step mode="DRIVING">
            <start_location>
               <lat>41.8507300</lat>
               <lng>-87.6512600</lng>
            </start_location>
            <end_location>
               <lat>41.8525800</lat>
               <lng>-87.6514100</lng>
            </end_location>
            <duration>
                <value>19</value>
                <text>minutes</text>
            </duration>
         </step>
      </leg>
   </route>
</Directions>

เมื่อ Apigee Edge นำโค้ดนโยบาย ExtractVariable ด้านบนไปใช้กับข้อความ XML นี้ ซึ่งจะตั้งค่าตัวแปร 3 รายการ ได้แก่ directionsresponse.travelmode, directionsresponse.duration และ directionsresponse.timeunit ตัวแปรทั้งหมดใช้คำนำหน้าตัวแปรเดียวกันคือ directionsresponse คำต่อท้ายของตัวแปรเหล่านี้มีการระบุไว้อย่างชัดแจ้งโดยแอตทริบิวต์ name ขององค์ประกอบ <Variable>

ตัวแปร directionsresponse.travelmode จะได้รับค่า DRIVING ตัวแปร directionsresponse.duration จะได้รับค่า 19 ตัวแปร directionsresponse.timeunit จะได้รับค่า minutes

ตอนนี้คุณเข้าถึงตัวแปร directionresponse.travelmode ในพร็อกซีได้แล้ว ตัวอย่างเช่น นโยบาย AssignMessage ต่อไปนี้จะคัดลอกไปยังส่วนหัวชื่อ "tmode" ในการตอบกลับ

<AssignMessage async="false" continueOnError="false" enabled="true" name="GetURIPath">
  <DisplayName>GetXMLVar</DisplayName>
  <Add>
    <Headers>
      <Header name="tmode">{directionsresponse.travelmode}</Header>
    </Headers>
  </Add>
  <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
  <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

เกี่ยวกับนโยบาย ExtractVariant

นักพัฒนา API สร้างพร็อกซี API ที่มีลักษณะการทำงานแตกต่างกันไปตามเนื้อหาของข้อความ ซึ่งรวมถึงส่วนหัว, เส้นทาง URI, เพย์โหลด และพารามิเตอร์การค้นหา พร็อกซีจะดึงเนื้อหาบางส่วนออกมาเพื่อใช้ในคำสั่งเงื่อนไข หากต้องการดำเนินการดังกล่าว ให้ใช้นโยบาย ExtractVariable

เมื่อกำหนดนโยบาย ExtractVariable ให้เลือกตัวเลือกดังนี้

  • ชื่อตัวแปรที่จะตั้งค่า
  • แหล่งที่มาของตัวแปร
  • จำนวนตัวแปรที่จะดึงและตั้งค่า

เมื่อดำเนินการ นโยบายจะใช้รูปแบบข้อความกับเนื้อหา และเมื่อพบการจับคู่ที่ตรงกัน ระบบจะตั้งค่าตัวแปรที่กำหนดกับเนื้อหา จากนั้นนโยบายและโค้ดอื่นๆ จะสามารถใช้ตัวแปรเหล่านั้นเพื่อเปิดใช้ลักษณะการทำงานแบบไดนามิกหรือส่งข้อมูลธุรกิจไปยังการวิเคราะห์ Edge API

หากต้องการดูวิธีใช้ ExtractVariable เพื่อสร้างรายงาน Analytics ที่อิงตามเนื้อหาได้ที่ วิเคราะห์เนื้อหาข้อความ API โดยใช้การวิเคราะห์ที่กำหนดเอง

ขอบเขต

ตัวแปรที่ตั้งค่าด้วยนโยบาย ExtractVariant จะมีขอบเขตส่วนกลาง กล่าวคือ หลังจากที่นโยบาย ExtractVariable กำหนดตัวแปรใหม่ คุณจะเข้าถึงตัวแปรนั้นจากนโยบายหรือโค้ดใดก็ได้ในขั้นตอนใดๆ ของโฟลว์ (ซึ่งทำงานหลังนโยบาย ExtractVariable) ซึ่งรวมถึง

  • PreFlow: ProxyEndpoint และ TargetEndpoint (คําขอและการตอบกลับ)
  • PostFlow: ProxyEndpoint และ TargetEndpoint (คําขอและการตอบกลับ)
  • PostClientFlow: ProxyEndpoint (การตอบสนองเท่านั้น โดยใช้นโยบายการบันทึกข้อความ)
  • ขั้นตอนข้อผิดพลาด

เกี่ยวกับการจับคู่และการสร้างตัวแปร

นโยบาย ExtractVariable จะดึงข้อมูลจากคำขอหรือการตอบกลับแล้วเขียนข้อมูลดังกล่าวลงในตัวแปร สำหรับข้อมูลแต่ละประเภทที่ดึงได้ เช่น เส้นทาง URI หรือข้อมูล XML คุณจะต้องระบุรูปแบบที่จะจับคู่และชื่อของตัวแปรที่ใช้เก็บข้อมูลที่ดึงมา

อย่างไรก็ตาม วิธีการทำงานของการจับคู่รูปแบบจะขึ้นอยู่กับแหล่งที่มาของการดึงข้อมูล ส่วนต่อไปนี้จะอธิบายหมวดหมู่ข้อมูลพื้นฐาน 2 หมวดหมู่ที่คุณดึงออกได้

การจับคู่เส้นทาง URI, พารามิเตอร์การค้นหา, ส่วนหัว, พารามิเตอร์ของฟอร์ม และตัวแปร

เมื่อดึงข้อมูลจากเส้นทาง URI, พารามิเตอร์การค้นหา, ส่วนหัว, พารามิเตอร์ของฟอร์ม และตัวแปร ให้ใช้แท็ก <Pattern> เพื่อระบุรูปแบบที่จะจับคู่ เช่น ตัวอย่างนโยบายต่อไปนี้แสดงรูปแบบที่ตรงกันเพียงรายการเดียวสำหรับเส้นทาง URI

<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

ในตัวอย่างนี้ ตัวแปร urirequest.pathSeg มีการตั้งค่าเป็นอะไรก็ได้ที่ปรากฏในพร็อกซี.pathsuffix หลัง "/a/" ตัวอย่างเช่น สมมติว่าเส้นทางฐานสำหรับพร็อกซี API คือ /basepath/v1 หากมีคำขอขาเข้าไปยัง http://myCo.com/basepath/v1/a/b ระบบจะตั้งค่าตัวแปรเป็น "b"

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

คุณสามารถระบุรูปแบบจำนวนมากที่จะจับคู่ โดยสอดคล้องกับแท็ก <Pattern> โดยที่

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

ในตัวอย่างถัดไป คุณสร้างนโยบายที่มีรูปแบบที่ตรงกัน 3 รูปแบบสำหรับเส้นทาง URI ดังนี้

<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
      <Pattern ignoreCase="true">/a/b/{pathSeg}</Pattern>
      <Pattern ignoreCase="true">/a/b/c/{pathSeg}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

สมมติว่าสำหรับพร็อกซี API ที่มีเส้นทางฐานเป็น /basepath/v1 URL คำขอขาเข้าไปยังพร็อกซี API มีลักษณะดังนี้

http://myCo.com/basepath/v1/a/b

ในตัวอย่างนี้ รูปแบบแรกตรงกับ URI และตัวแปร urirequest.pathSeg ตั้งค่าเป็น "b"

หาก URL ของคำขอคือ:

http://myCo.com/basepath/v1/a/b/c/d

...รูปแบบที่ 3 จะตรงกับตัวแปร urirequest.pathSeg ที่ตั้งค่าเป็น "d"

การระบุรูปแบบด้วยตัวแปรหลายรายการ

คุณสามารถระบุตัวแปรได้หลายรายการในรูปแบบที่ตรงกัน เช่น คุณระบุรูปแบบการจับคู่ที่มีตัวแปร 2 รายการดังนี้

<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <URIPath>
      <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
      <Pattern ignoreCase="true">/a/b/{pathSeg}</Pattern>
      <Pattern ignoreCase="true">/a/{pathSeg1}/c/{pathSeg2}</Pattern>
   </URIPath>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

สมมติให้พร็อกซี API มีเส้นทางฐานเป็น /basepath/v1 สำหรับ URL คำขอขาเข้าอีกครั้งดังนี้

http://myCo.com/basepath/v1/a/b/c/d

...ตัวแปร urirequest.pathSeg1 ตั้งค่าเป็น "b" และตัวแปร urirequest.pathSeg2 ตั้งค่าเป็น "d"

การจับคู่อินสแตนซ์หลายรายการในรูปแบบ

นอกจากนี้ คุณยังจับคู่รูปแบบในกรณีที่มีหลายรายการที่มีชื่อเดียวกันได้ เช่น คุณสร้างคำขอที่มีพารามิเตอร์การค้นหาหลายรายการหรือมีส่วนหัวหลายรายการที่มีชื่อเดียวกันได้ คำขอต่อไปนี้มีพารามิเตอร์การค้นหา 2 รายการชื่อ "w":

http://myCo.com/basepath/v1/a/b/c/d?w=1&w=2

การอ้างอิงพารามิเตอร์การค้นหาเหล่านี้ในนโยบาย ExtractVariable คือการที่คุณใช้ดัชนีโดยที่อินสแตนซ์แรกของพารามิเตอร์การค้นหาไม่มีดัชนี อินสแตนซ์ที่ 2 อยู่ที่ดัชนี 2 พารามิเตอร์ที่ 2 อยู่ที่ดัชนี 3 เป็นต้น ตัวอย่างเช่น นโยบายต่อไปนี้จะแยกค่าของพารามิเตอร์การค้นหาที่ 2 ชื่อ "w" ในคำขอ

<ExtractVariables name="ExtractVariables-1">
   <Source>request</Source>
   <QueryParam name="w.2">
      <Pattern ignoreCase="true">{secondW}</Pattern>
   </QueryParam>
   <VariablePrefix>urirequest</VariablePrefix>
   <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
</ExtractVariables>

ตัวแปร urirequest.secondW ถูกตั้งค่าเป็น "2" หากไม่มีพารามิเตอร์การค้นหาที่ 2 ในคําขอ ตัวแปร urirequest.secondW จะว่างเปล่า ใช้การจัดทำดัชนีเมื่อใดก็ตามที่มีหลายรายการที่ใช้ชื่อเดียวกันในคำขอ

การใช้สัญลักษณ์พิเศษในลาย

เมื่อจับคู่เส้นทาง URI แล้ว คุณจะใช้อักขระไวลด์การ์ด "*" และ "**" ในรูปแบบได้ดังนี้

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

ตัวอย่างเช่น คุณต้องระบุรูปแบบให้กับองค์ประกอบ <URIPath> ดังที่แสดงด้านล่าง

<URIPath>
  <Pattern ignoreCase="true">/a/*/{id}</Pattern>
  <Pattern ignoreCase="true">/a/**/{id}</Pattern>
</URIPath>

รูปแบบแรกจะจับคู่คำขอที่มี pathuffix (ส่วนของเส้นทาง URI ที่ตามหลัง Basepath) เช่น "/a/b/c", "/a/foo/bar" เป็นต้น รูปแบบที่ 2 จะจับคู่จำนวนส่วนของเส้นทางที่อยู่หลัง "/a/" เช่น "/a/foo/bar/baz/c" รวมทั้ง "/a/b/c" และ ".a/foo/bar"

เมื่อระบุรูปแบบให้กับพารามิเตอร์การค้นหา ส่วนหัว และพารามิเตอร์ของฟอร์ม อักขระ "*" จะระบุให้จับคู่กับอักขระจำนวนเท่าใดก็ได้ ตัวอย่างเช่น เมื่อจับคู่ส่วนหัว ให้ระบุรูปแบบเป็น

*;charset={encoding}

รูปแบบนี้ตรงกับค่า "text/xml;charset=UTF-16" และ "application/xml;charset=ASCII"

หากค่าที่ส่งไปยังนโยบาย ExtractVariant มีสัญลักษณ์พิเศษ เช่น "{" ให้ใช้อักขระ "%" เพื่อ Escape ตัวอย่างต่อไปนี้ใช้อักขระหลีก "{" และ "}" ในรูปแบบเนื่องจากใช้เป็นอักขระตามตัวอักษรในค่าของพารามิเตอร์การค้นหา

<QueryParam>
  <Pattern ignoreCase="true">%{user%} {name}</Pattern>
</QueryParam>

ในตัวอย่างนี้ รูปแบบจะตรงกับค่า "{user} Steve" แต่ไม่ตรงกับค่า "user Steve"

JSON และ XML ที่ตรงกัน

เมื่อดึงข้อมูลจาก JSON และ XML คุณต้องระบุแท็ก <Variable> อย่างน้อย 1 รายการในนโยบาย แท็ก <Variable> ระบุชื่อตัวแปรปลายทางที่เก็บข้อมูลที่ดึงข้อมูล และ JsonPath (JSON) หรือ XPATH (XML) สําหรับข้อมูลที่ดึง

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

ตัวอย่างต่อไปนี้แสดงนโยบาย ExtractVariant ที่เติมตัวแปร 2 รายการจากเนื้อหา JSON ของการตอบกลับ

<ExtractVariables name="ExtractVariables-3">
   <Source>response</Source>
   <JSONPayload>
      <Variable name="latitude" type="float">
         <JSONPath>$.results[0].geometry.location.lat</JSONPath>
      </Variable>
      <Variable name="longitude" type="float">
         <JSONPath>$.results[0].geometry.location.lng</JSONPath>
      </Variable>
   </JSONPayload>
   <VariablePrefix>geocoderesponse</VariablePrefix>
</ExtractVariables>

เขียนไปยังตัวแปรเดียวกันในหลายตำแหน่ง

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

เช่น คุณต้องการแยกค่าโทเค็นที่ส่งได้ในพารามิเตอร์การค้นหาหรือในส่วนหัวดังที่แสดงด้านล่าง

<!-- If token only in query param, the query param determines the value. 
     If token is found in both the query param and header, header sets value. -->
<QueryParam name="token">
  <Pattern ignoreCase="true">{tokenValue}</Pattern>
</QueryParam>
 
<!-- Overwrite tokenValue even if it was found in query parameter. -->
<Header name="Token">
  <Pattern ignoreCase="true">{tokenValue}</Pattern>
</Header>

การควบคุมสิ่งที่จะเกิดขึ้นเมื่อไม่มีการจับคู่

หากรูปแบบไม่ตรงกัน ระบบจะไม่สร้างตัวแปรที่เกี่ยวข้อง ดังนั้นหากมีนโยบายอื่นอ้างอิงตัวแปร ก็อาจเกิดข้อผิดพลาดได้

ตัวเลือกหนึ่งคือการตั้งค่า <IgnoreUnresolvedVariables> เป็น "จริง" ในนโยบายที่อ้างอิงตัวแปรเพื่อกำหนดค่านโยบายให้ถือว่าตัวแปรที่แปลงไม่ได้เป็นสตริงว่าง (Null) ดังนี้

<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>

การอ้างอิงองค์ประกอบ

การอ้างอิงองค์ประกอบจะอธิบายองค์ประกอบและแอตทริบิวต์ของนโยบาย ExtractVariant

<ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract-Variables-1">
   <DisplayName>Extract Variables 1</DisplayName>
   <Source clearPayload="true|false">request</Source>
   <VariablePrefix>myprefix</VariablePrefix>
   <IgnoreUnresolvedVariables>true|false</IgnoreUnresolvedVariables>
   <URIPath>
      <Pattern ignoreCase="false">/accounts/{id}</Pattern>
   </URIPath>
   <QueryParam name="code">
      <Pattern ignoreCase="true">DBN{dbncode}</Pattern>
   </QueryParam>
   <Header name="Authorization">
      <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern>
   </Header>
   <FormParam name="greeting">
      <Pattern>hello {user}</Pattern>
   </FormParam>
   <Variable name="request.content">
       <Pattern>hello {user}</Pattern>
   </Variable>
   <JSONPayload>
      <Variable name="name">
         <JSONPath>{example}</JSONPath>
      </Variable>
   </JSONPayload>
   <XMLPayload stopPayloadProcessing="false">
      <Namespaces/>
      <Variable name="name" type="boolean">
         <XPath>/test/example</XPath>
      </Variable>
   </XMLPayload>
</ExtractVariables>

แอตทริบิวต์ <ExtractVariable>

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

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

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

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

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

ไม่มีข้อมูล จำเป็น
continueOnError

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

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

false ไม่บังคับ
enabled

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

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

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

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

false เลิกใช้

องค์ประกอบ <DisplayName>

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

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

ไม่มีข้อมูล

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

การมีบุคคลอยู่ ไม่บังคับ
Type สตริง

องค์ประกอบ <Source>

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

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

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

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

Attributes

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

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

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

false

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

องค์ประกอบ <VariablePrefix>

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

<VariablePrefix>myprefix</VariablePrefix>

ตัวอย่างเช่น สมมติว่าค่าของชื่อคือ "ผู้ใช้"

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

องค์ประกอบ < ignoreUnresolvedVariable>

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

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

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

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

อีลิเมนต์ <URIPath>

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

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

คุณสามารถใช้องค์ประกอบ <Pattern> หลายรายการดังนี้

<URIPath>
   <Pattern ignoreCase="false">/accounts/{id}</Pattern>
   <Pattern ignoreCase="false">/accounts/{id}/transactions/{index}</Pattern>
</URIPath>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: ไม่บังคับ อย่างไรก็ตาม คุณต้องใส่ข้อมูลต่อไปนี้อย่างน้อย 1 รายการ <URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> หรือ <XMLPayload>.
ประเภท: ไม่มีข้อมูล

Attributes

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่ Type
ignoreCase ระบุเพื่อละเว้นตัวพิมพ์เล็กและใหญ่เมื่อจับคู่รูปแบบ

false

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

องค์ประกอบ <QueryParam>

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

<QueryParam name="code">
   <Pattern ignoreCase="true">DBN{dbncode}</Pattern>
</QueryParam>

หากพารามิเตอร์การค้นหาหลายรายการมีชื่อเดียวกัน ให้ใช้ดัชนีเพื่ออ้างอิงพารามิเตอร์ ดังนี้

<QueryParam name="w.2">
   <Pattern ignoreCase="true">{secondW}</Pattern>
</QueryParam>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: ไม่บังคับ อย่างไรก็ตาม คุณต้องใส่ข้อมูลต่อไปนี้อย่างน้อย 1 รายการ <URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> หรือ <XMLPayload>.
ประเภท: ไม่มีข้อมูล

Attributes

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่ Type
ชื่อ ระบุชื่อของพารามิเตอร์การค้นหา หากพารามิเตอร์การค้นหาหลายรายการมีชื่อเดียวกัน ให้ใช้การอ้างอิงที่จัดทำดัชนี ซึ่งอินสแตนซ์แรกของพารามิเตอร์การค้นหาไม่มีดัชนี พารามิเตอร์ที่ 2 อยู่ที่ดัชนี 2 พารามิเตอร์ที่ 3 ที่ดัชนี 3 เป็นต้น

ไม่มีข้อมูล

จำเป็น สตริง

องค์ประกอบ <Header>

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

<!-- The name is the actual header name. -->
<Header name="Authorization">
<!-- Provide a name for your new custom variable here. -->
   <Pattern ignoreCase="false">Bearer {oauthtoken}</Pattern>
</Header>

หากส่วนหัวหลายรายการมีชื่อเดียวกัน ให้ใช้ดัชนีเพื่ออ้างอิงส่วนหัวแต่ละรายการในอาร์เรย์ ดังนี้

<Header name="myHeader.2">
   <Pattern ignoreCase="true">{secondHeader}</Pattern>
</Header>

หรือรายการต่อไปนี้เพื่อแสดงส่วนหัวทั้งหมดในอาร์เรย์

<Header name="myHeader.values">
   <Pattern ignoreCase="true">{myHeaders}</Pattern>
</Header>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: ไม่บังคับ อย่างไรก็ตาม คุณต้องใส่ข้อมูลต่อไปนี้อย่างน้อย 1 รายการ <URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> หรือ <XMLPayload>.
ประเภท: ไม่มีข้อมูล

Attributes

แอตทริบิวต์ คำอธิบาย ค่าเริ่มต้น การมีบุคคลอยู่ Type
ชื่อ ระบุชื่อส่วนหัวที่ใช้ดึงค่า หากส่วนหัวหลายรายการมีชื่อเดียวกัน ให้ใช้การอ้างอิงที่จัดทำดัชนีซึ่งอินสแตนซ์แรกของส่วนหัวไม่มีดัชนี ส่วนหัวที่ 2 อยู่ที่ดัชนี 2 ส่วนหัวที่ 3 ที่ดัชนี 3 ฯลฯ ใช้ .values เพื่อรับส่วนหัวทั้งหมดในอาร์เรย์

ไม่มีข้อมูล

จำเป็น สตริง

องค์ประกอบ <FormParam>

(ไม่บังคับ แต่ดูข้อมูลเพิ่มเติมได้ที่แถว "การแสดงข้อมูล" ในตารางด้านล่าง) ดึงค่าจากพารามิเตอร์รูปแบบที่ระบุของข้อความคำขอหรือการตอบกลับที่ระบุ แยกพารามิเตอร์แบบฟอร์มได้เฉพาะเมื่อส่วนหัว Content-Type ของข้อความที่ระบุคือ application/x-www-form-urlencoded

<FormParam name="greeting">
    <Pattern>hello {user}</Pattern>
</FormParam>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: ไม่บังคับ อย่างไรก็ตาม คุณต้องใส่ข้อมูลต่อไปนี้อย่างน้อย 1 รายการ <URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> หรือ <XMLPayload>.
ประเภท: ไม่มีข้อมูล

Attributes

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

ไม่มีข้อมูล

จำเป็น สตริง

องค์ประกอบ <Variable>

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

<Variable name="myVar">
    <Pattern>hello {user}</Pattern>
</Variable>

วิธีแยกค่า 2 ค่าจากตัวแปร

<Variable name="myVar">
   <Pattern>hello {firstName} {lastName}</Pattern>
</Variable>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: ไม่บังคับ อย่างไรก็ตาม คุณต้องใส่ข้อมูลต่อไปนี้อย่างน้อย 1 รายการ <URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> หรือ <XMLPayload>.
ประเภท: ไม่มีข้อมูล

Attributes

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

ไม่มีข้อมูล

จำเป็น สตริง

องค์ประกอบ <JSONPayload>

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

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

องค์ประกอบ <JSONPayload>/<Variable>

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

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

Attributes

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

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

ชื่อ

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

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

  • สตริง
  • boolean
  • จำนวนเต็ม
  • long
  • float
  • คู่
  • Nodeset (แสดงส่วนย่อย JSON)

องค์ประกอบ <JSONPayload>/<Variable>/<JSONPath>

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

<Variable name="name">
   <JSONPath>$.rss.channel.title</JSONPath>
</Variable>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: จำเป็น
ประเภท: สตริง

องค์ประกอบ <XMLPayload>

(ไม่บังคับ แต่ดูข้อมูลเพิ่มเติมได้ที่แถว "การแสดงข้อมูล" ในตารางด้านล่าง) ระบุข้อความในรูปแบบ XML ที่จะดึงค่าของตัวแปร เพย์โหลด XML จะแยกออกมาเฉพาะเมื่อส่วนหัว Content-Type ของข้อความคือ text/xml, application/xml หรือ application/*+xml

<XMLPayload stopPayloadProcessing="false">
  <Namespaces>
     <Namespace prefix="apigee">http://www.apigee.com</Namespace>
     <Namespace prefix="gmail">http://mail.google.com</Namespace>
  </Namespaces>
  <Variable name="name" type="boolean">
     <XPath>/apigee:test/apigee:example</XPath>
  </Variable>
</XMLPayload>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: ไม่บังคับ อย่างไรก็ตาม คุณต้องใส่ข้อมูลต่อไปนี้อย่างน้อย 1 รายการ <URIPath>, <QueryParam>, <Header>, <FormParam>, <JSONPayload> หรือ <XMLPayload>.
ประเภท: ไม่มีข้อมูล

Attributes

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

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

false

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

องค์ประกอบ <XMLPayload>/<Namespaces>

(ไม่บังคับ) ระบุเนมสเปซที่จะใช้ในการประเมิน XPath หากใช้เนมสเปซในนิพจน์ XPath คุณต้องประกาศเนมสเปซที่นี่ ดังที่แสดงในตัวอย่างต่อไปนี้

<XMLPayload stopPayloadProcessing="false">
  <Namespaces>
     <Namespace prefix="apigee">http://www.apigee.com</Namespace>
     <Namespace prefix="gmail">http://mail.google.com</Namespace>
  </Namespaces>
  <Variable name="legName" type="string">
    <XPath>/apigee:Directions/apigee:route/apigee:leg/apigee:name</XPath>
  </Variable>
</XMLPayload>

หากคุณไม่ได้ใช้เนมสเปซในนิพจน์ XPath คุณจะละเว้นหรือแสดงความคิดเห็นในองค์ประกอบ <Namespaces> ได้ตามตัวอย่างต่อไปนี้

<XMLPayload stopPayloadProcessing="false">
  <!-- <Namespaces/> -->
  <Variable name="legName" type="string">
    <XPath>/Directions/route/leg/name</XPath>
  </Variable>
</XMLPayload>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: ไม่บังคับ
ประเภท: สตริง

Attributes

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

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

ไม่มีข้อมูล

จำเป็น สตริง

องค์ประกอบ <XMLPayload>/<Variable>

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

<Variable name="name" type="boolean">
   <XPath>/test/example</XPath>
</Variable>
ค่าเริ่มต้น: ไม่มีข้อมูล
สถานที่ตั้ง: ไม่บังคับ
ประเภท: ไม่มีข้อมูล

Attributes

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

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

ชื่อ

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

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

  • สตริง
  • boolean
  • จำนวนเต็ม
  • long
  • float
  • คู่
  • Nodeset (แสดงส่วนย่อย XML)

องค์ประกอบ <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

ข้อผิดพลาดนี้เกิดขึ้นเมื่อ

  • เพย์โหลดอินพุต (JSON, XML) ว่างเปล่า
  • อินพุต (JSON, XML ฯลฯ) ที่ส่งไปยังนโยบายไม่ถูกต้องหรือผิดรูปแบบ
steps.extractvariables.ImmutableVariable 500 ตัวแปรที่ใช้ในนโยบายจะเปลี่ยนแปลงไม่ได้ นโยบายตั้งค่าตัวแปรนี้ไม่ได้
steps.extractvariables.InvalidJSONPath 500 ข้อผิดพลาดนี้เกิดขึ้นหากใช้เส้นทาง JSON ที่ไม่ถูกต้องในองค์ประกอบ JSONPath ของนโยบาย เช่น หากเพย์โหลด JSON ไม่มีออบเจ็กต์ Name แต่คุณระบุ Name เป็นเส้นทางในนโยบาย ก็จะเกิดข้อผิดพลาดนี้
steps.extractvariables.JsonPathParsingFailure 500 ข้อผิดพลาดนี้เกิดขึ้นเมื่อนโยบายแยกวิเคราะห์เส้นทาง JSON และดึงข้อมูลจากตัวแปรโฟลว์ที่ระบุในองค์ประกอบ Source ไม่ได้ โดยปกติแล้ว เหตุการณ์นี้จะเกิดขึ้นหากไม่มีตัวแปรโฟลว์ที่ระบุในองค์ประกอบ Source ในโฟลว์ปัจจุบัน
steps.extractvariables.SetVariableFailed 500 ข้อผิดพลาดนี้เกิดขึ้นหากนโยบายกำหนดค่าเป็นตัวแปรไม่ได้ ข้อผิดพลาดมักเกิดขึ้นหากคุณพยายามกำหนดค่าให้กับตัวแปรหลายตัวที่มีชื่อขึ้นต้นด้วยคำเดียวกันในรูปแบบที่คั่นด้วยจุดที่ซ้อนกัน
steps.extractvariables.SourceMessageNotAvailable 500 ข้อผิดพลาดนี้เกิดขึ้นหากตัวแปรข้อความที่ระบุในองค์ประกอบ Source ของนโยบายมีลักษณะดังนี้
  • อยู่นอกขอบเขต (ใช้ไม่ได้ในขั้นตอนเฉพาะเจาะจงที่มีการใช้นโยบาย) หรือ
  • แก้ไขไม่ได้ (ไม่ได้กำหนดไว้)
steps.extractvariables.UnableToCast 500 ข้อผิดพลาดนี้เกิดขึ้นหากนโยบายแคสต์ค่าที่ดึงข้อมูลไปยังตัวแปรไม่ได้ โดยปกติกรณีนี้จะเกิดขึ้นหากคุณพยายามตั้งค่าของข้อมูลประเภทหนึ่งเป็นตัวแปรของข้อมูลอีกประเภทหนึ่ง

ข้อผิดพลาดในการทำให้ใช้งานได้

ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อคุณใช้พร็อกซีที่มีนโยบายนี้

ชื่อข้อผิดพลาด สาเหตุ แก้ไข
NothingToExtract หากนโยบายไม่มีองค์ประกอบ URIPath, QueryParam, Header, FormParam, XMLPayload หรือ JSONPayload จะทำให้ใช้งานพร็อกซี API ไม่สำเร็จ เพราะไม่มีข้อมูลให้ดึงข้อมูล
NONEmptyPrefixMappedToEmptyURI ข้อผิดพลาดนี้เกิดขึ้นหากนโยบายมีคำนำหน้าที่กำหนดไว้ในองค์ประกอบ Namespace ภายใต้องค์ประกอบ XMLPayload แต่ไม่ได้กำหนด URI
DuplicatePrefix ข้อผิดพลาดนี้เกิดขึ้นหากนโยบายมีการกำหนดคำนำหน้าเดียวกันมากกว่า 1 ครั้งในองค์ประกอบ Namespace ภายใต้องค์ประกอบ XMLPayload
NoXPathsToEvaluate หากนโยบายไม่มีองค์ประกอบ XPath ภายในองค์ประกอบ XMLPayload จะทำให้ใช้งานพร็อกซี API ไม่สำเร็จด้วยข้อผิดพลาดนี้
EmptyXPathExpression หากนโยบายมีนิพจน์ XPath ที่ว่างเปล่าภายในองค์ประกอบ XMLPayload การทำให้พร็อกซี API ใช้งานได้จะไม่สำเร็จ
NoJSONPathsToEvaluate หากนโยบายไม่มีองค์ประกอบ JSONPath ภายในองค์ประกอบ JSONPayload จะทำให้ใช้งานพร็อกซี API ไม่สำเร็จด้วยข้อผิดพลาดนี้
EmptyJSONPathExpression หากนโยบายมีนิพจน์ XPath ที่ว่างเปล่าภายในองค์ประกอบ XMLPayload การทำให้พร็อกซี API ใช้งานได้จะไม่สำเร็จ
MissingName หากนโยบายไม่มีแอตทริบิวต์ name ในองค์ประกอบใดๆ ของนโยบาย เช่น QueryParam, Header, FormParam หรือ Variable เมื่อต้องระบุ จะทำให้การทำให้พร็อกซี API ใช้งานได้ไม่สำเร็จ
PatternWithoutVariable หากนโยบายไม่มีตัวแปรที่ระบุภายในองค์ประกอบ Pattern การทำให้พร็อกซี API ใช้งานได้จะไม่สำเร็จ องค์ประกอบ Pattern ต้องมีชื่อของตัวแปรที่จะจัดเก็บข้อมูลที่แยกออกมา
CannotBeConvertedToNodeset หากนโยบายมีนิพจน์ XPath ซึ่งประเภท Variable กำหนดเป็นโหนด แต่แปลงนิพจน์เป็นชุดโหนดไม่ได้ การทำให้พร็อกซี API ใช้งานได้จะไม่สำเร็จ
JSONPathCompilationFailed นโยบายคอมไพล์เส้นทาง JSON ที่ระบุไม่ได้
InstantiationFailed ไม่สามารถสร้างอินสแตนซ์นโยบาย
XPathCompilationFailed หากคำนำหน้าหรือค่าที่ใช้ในองค์ประกอบ XPath ไม่ได้เป็นส่วนหนึ่งของเนมสเปซที่ประกาศในนโยบาย การทำให้พร็อกซี API ใช้งานได้จะไม่สำเร็จ
InvalidPattern หากคำจำกัดความองค์ประกอบ Pattern ไม่ถูกต้องในองค์ประกอบอย่างเช่น URIPath, QueryParam, Header, FormParam, XMLPayload หรือ JSONPayload ภายในนโยบาย จะทำให้การทำให้พร็อกซี API ใช้งานได้ไม่สำเร็จ

ตัวแปรของข้อผิดพลาด

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

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

การอ้างอิงตัวแปร