สิ่งที่คุณต้องทราบเกี่ยวกับข้อผิดพลาดของนโยบาย

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

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

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

เกี่ยวกับการตอบกลับข้อผิดพลาดนโยบายเริ่มต้น

เมื่อนโยบายแสดงข้อผิดพลาด Edge จะเข้าสู่ขั้นตอนการแสดงข้อผิดพลาดและสร้างข้อความแสดงข้อผิดพลาดทันที ข้อความที่ระบบสร้างขึ้นนี้เป็นออบเจ็กต์ JSON ที่มีข้อมูล 2 รายการ ได้แก่ errorcode และ faultstring

เช่น

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

เรามาแยกโครงสร้างข้อความแสดงข้อผิดพลาดนี้อย่างรวดเร็วกัน

errorcode ประกอบด้วยคำนำหน้าและชื่อข้อผิดพลาด ดังนี้ [prefix].[error_name] ในตัวอย่างข้างต้น "steps.extractvariables" คือคำนำหน้าและ SourceMessageNotAvailable คือชื่อข้อผิดพลาด ส่วนนำหน้าจะบอกประเภทนโยบายที่ทำให้เกิดข้อผิดพลาด ในตัวอย่างด้านบน คุณจะทราบได้ว่านโยบายการดึงข้อมูลตัวแปรสร้างข้อผิดพลาดและชื่อข้อผิดพลาดคือ SourceMessageNotAvailable

faultstring จะมีคําอธิบายข้อผิดพลาด โดยปกติสตริงข้อผิดพลาดจะมีคำแนะนำที่จะช่วยให้คุณพบปัญหาที่เจาะจงที่ทำให้เกิดข้อผิดพลาด เช่น ชื่อของนโยบาย ชื่อของตัวแปรที่ยังไม่ได้แก้ไข หรืออะไรก็ตามที่ทำให้เกิดข้อผิดพลาด ตัวอย่างเช่น ในข้อความแสดงข้อผิดพลาดข้างต้น "foo" คือชื่อตัวแปรข้อความที่ยังไม่ได้รับการแก้ไขซึ่งอ้างอิงในนโยบาย และ "ParseJsonResponse" คือชื่อนโยบายที่ทริกเกอร์ข้อผิดพลาด

ตัวแปรที่เฉพาะต่อข้อผิดพลาดของนโยบาย

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

ตัวแปร fault.name

เมื่อนโยบายทำให้เกิดข้อผิดพลาด ระบบจะตั้งค่าตัวแปรโฟลว์ fault.name เป็นส่วน error_name ของรหัสข้อผิดพลาด (ตามที่อธิบายไว้ในส่วนก่อนหน้า) การประเมินตัวแปรนี้เพื่อเรียกใช้กฎข้อบกพร่องแบบมีเงื่อนไขนั้นเป็นเรื่องปกติ

ต่อไปนี้คือตัวอย่างกฎข้อผิดพลาดที่ทดสอบค่าของ fault.name

<faultrule name="VariableOfNonMsgType"<>/faultrule><FaultRule name="Source Message Not Available Fault">
    <Step>
        <Name>AM-CustomErrorMessage</Name>
        <Condition>(fault.name Matches "SourceMessageNotAvailable") </Condition>
    </Step>
</FaultRule>

สิ่งที่ควรทราบคือเมื่อนโยบายทริกเกอร์ข้อผิดพลาด ระบบจะตั้งค่าตัวแปร fault.name เป็นชื่อข้อผิดพลาดเสมอ

ตัวแปร [prefix].[policy_name].failed

นอกเหนือจาก fault.name ตัวแปรอื่นที่นักพัฒนาแอปมักจะตรวจสอบคือแฟล็ก [prefix].[policy_name].failed ซึ่งตั้งค่าเป็น "จริง" หรือ "เท็จ" เมื่อบังคับใช้นโยบาย ในกฎความผิดพลาด คุณจะต้องตรวจสอบเพื่อดูว่าค่าเป็น true เมื่อใด กล่าวคือ เพื่อตรวจสอบว่าเกิดข้อผิดพลาดขึ้นหรือไม่ วิธีสร้างเงื่อนไขที่ตรวจสอบ Flag [prefix].[policy_name].failed มีดังนี้ หากต้องการตรวจสอบตัวแปรนี้อย่างถูกต้อง คุณจำเป็นต้องทราบ 2 สิ่งต่อไปนี้

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

ลองดูตัวอย่างกฎข้อผิดพลาดอีกข้อเพื่อแสดงตัวอย่าง สังเกตว่าชื่อตัวแปร [prefix].[policy_name].failed สร้างขึ้นอย่างไรในเงื่อนไขภายนอก ในกรณีนี้ คำนำหน้าคือ extractvariables และชื่อนโยบายคือ ParseJsonResponse ในกรณีนี้ กฎข้อผิดพลาดจะทำงานต่อเมื่อตัวแปรนี้เป็นจริงเท่านั้น และนี่คือเคล็ดลับ เนื่องจากกฎข้อผิดพลาดอาจมีหลายขั้นตอน รูปแบบนี้จึงเป็นวิธีที่ดีในการจัดระเบียบกฎข้อผิดพลาดออกเป็นบล็อกต่างๆ

<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="Extract Variable Faults">
    <Step>
        <Name>AM-CustomErrorMessage</Name>
        <Condition>(fault.name Matches "SourceMessageNotAvailable") </Condition>
    </Step>
    <Condition>(extractvariables.ParseJsonResponse.failed = true) </Condition>
</FaultRule>

เกี่ยวกับตัวแปร error และ message

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

error.[error_component] = [value]

เช่น

error.message = "request message is not available for ExtractVariable: ParseJsonResponse นิ้ว

and

error.status.code = "500"

ตัวแปร message พร้อมใช้งานในโฟลว์ข้อผิดพลาดด้วย และใช้เพื่อวัตถุประสงค์ที่คล้ายกันกับตัวแปร error ได้ ตัวแปรข้อความมีความพิเศษเนื่องจากจะอิงตามบริบท ในขั้นตอนการส่งคำขอ ตัวแปรนี้จะทํางานเหมือนตัวแปรคําขอ และในขั้นตอนการตอบกลับ ตัวแปรนี้จะใช้เพื่อรับ/ตั้งค่าค่าการตอบกลับได้ หากต้องการทราบข้อมูลเพิ่มเติม โปรดดูกรณีการใช้งานสำหรับตัวแปรข้อความ

ดูข้อมูลเกี่ยวกับตัวแปร Edge ทั้งหมด รวมถึง error และ message ได้ที่ข้อมูลอ้างอิงเกี่ยวกับตัวแปร