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

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

อะไร

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

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

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

วิดีโอ

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

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

ตัวอย่าง

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

GitHub

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

URI

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

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

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

พิจารณาโค้ดนโยบายตัวอย่างด้านบนที่ทำงานร่วมกับคำขอขาเข้าต่อไปนี้

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

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

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

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

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

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

พิจารณาโค้ดนโยบายตัวอย่างด้านบนที่ทำงานร่วมกับคำขอขาเข้าต่อไปนี้

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

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

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

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

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

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

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

พิจารณาโค้ดนโยบายตัวอย่างด้านบนที่ทำงานร่วมกับคำขอขาเข้าต่อไปนี้

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

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

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

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

ส่วนหัว

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

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

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

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

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

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

JSON

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

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

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

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

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

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

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

XML

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

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

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

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

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

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

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

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

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

เมื่อกำหนดนโยบาย ExtractVariables คุณจะเลือกทำสิ่งต่อไปนี้ได้

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

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

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

ขอบเขต

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

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

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

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

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

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

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

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

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

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

คุณระบุรูปแบบหลายรายการเพื่อจับคู่ได้ ซึ่งสอดคล้องกับแท็ก <Pattern> โดยมีรายละเอียดดังนี้

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

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

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

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

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

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

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

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

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

การระบุรูปแบบที่มีตัวแปรหลายรายการ

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

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

สมมติอีกครั้งว่ามี API Proxy ที่มีเส้นทางฐานเป็น /basepath/v1 สำหรับคำขอขาเข้า URL:

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

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

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

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

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

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

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

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

การใช้สัญลักษณ์พิเศษในรูปแบบ

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

  • "*" ตรงกับกลุ่มใดก็ได้ของเส้นทาง
  • "**" ตรงกับหลายกลุ่มของเส้นทาง

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

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

รูปแบบแรกจะตรงกับคำขอที่มีคำต่อท้ายของเส้นทาง (ส่วนของเส้นทาง URI ที่ตามหลัง 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"

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

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

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

การจับคู่ JSON และ XML

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

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

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

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

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

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

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

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

<!-- Overwrite tokenValue even if it was found in query parameter. -->
<Header name="Token">
  <Pattern ignoreCase="true">{tokenValue}</Pattern>
</Header>

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

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

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

<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

เท็จ เลิกใช้

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

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

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

ไม่มี

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

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

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

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

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

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

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

Attributes

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

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

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

เท็จ

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

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

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

<VariablePrefix>myprefix</VariablePrefix>

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

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

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

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

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

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

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

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

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

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

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

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

Attributes

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

เท็จ

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

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

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

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

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

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

Attributes

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

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

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

ไม่มี

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

องค์ประกอบ <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> หลายแท็กลงในองค์ประกอบ <JSONPayload> เพื่อป้อนข้อมูล ตัวแปรหลายรายการ

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

Attributes

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

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

ชื่อ

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

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

  • สตริง
  • บูลีน
  • จำนวนเต็ม
  • ยาว
  • จำนวนลอยตัว
  • double
  • 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

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

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

เท็จ

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

<XMLPayload>/<Namespaces> element

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

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

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

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

Attributes

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

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

ไม่มี

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

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

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

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

Attributes

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

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

ชื่อ

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

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

  • สตริง
  • บูลีน
  • จำนวนเต็ม
  • ยาว
  • จำนวนลอยตัว
  • double
  • nodeset (แสดงผล XML Fragment)

องค์ประกอบ <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 คือnodeset แต่แปลงนิพจน์เป็น Nodeset ไม่ได้ ซึ่งทำให้การทำให้พร็อกซี 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 โดยใช้ข้อมูลวิเคราะห์ที่กําหนดเอง

ข้อมูลอ้างอิงเกี่ยวกับตัวแปร