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

คุณกำลังดูเอกสารประกอบของ 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 (จริง) หรือไม่ ซึ่งหมายถึงว่าเกิดข้อผิดพลาดขึ้นหรือไม่ วิธีสร้างเงื่อนไขที่ตรวจสอบแฟล็ก [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 นิ้ว

และ

error.status.code = "500"

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

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