Quantcast
Channel: cc :: somkiat
Viewing all articles
Browse latest Browse all 1997

Spring Boot :: รูปแบบของ error ด้วย ProblemDetail

$
0
0

นักพัฒนา RESTFul API ด้วย Spring Boot นั้นมักจะ return ข้อมูลที่ error กลับมา
ในรูปแบบที่หลากหลายแล้วแต่จะออกแบบไป
แต่หนึ่งในแนวทางที่น่าสนใจคือ ProblemDetail
ซึ่งมีรูปแบบตาม RFC 9457
ดังนั้นมาลองทำความรู้จักและใช้งานกันดู
เพื่อช่วยให้ error message เข้าใจได้ง่ายขึ้น

สิ่งที่ต้องเข้าใจก่อนคือ การจัดการ error ที่ไม่ดีเป็นดังนี้

  • Error ที่ส่งกลับไปไม่เป็นประโยชน์ เข้าใจยาก
  • สื่อสารกลับไปแบบผิด ๆ
  • ชอบซ่อน information ของ error ไว้มากเกินไป
  • ชอบส่ง stack trace กลับไปทั้งหมด แบบนี้ก็เยอะเกินไป อาจจะเกิด data leak ได้ง่าย ๆ
  • แต่ละทีม แต่ละ product ก็มีรูปแบบของ error message ที่แตกต่างกันไป !!

ซึ่งจากการจัดการไม่ดีส่งผลให้เกิดปัญหาอื่น ๆ ตามมา
ทั้งเวลาในการพัฒนา
ทั้งประสบการณ์ในการพัฒนาที่ไม่ดี
ทั้งเรื่องของความปลอดภัยของระบบ
ทั้งในเรื่องการ integrate กับระบบอื่น ๆ ซึ่งซับซ้อนมาก

ดังนั้นหนึ่งในแนวทางเพื่อช่วยลดปัญหาคือ จัดการรูปแบบของ error ให้เป็นมาตรฐาน
โดยหนึ่งในแนวทางนั้นคือ Problem Detail นั่นเอง

โดยที่ Problem Detail มีโครงสร้างดังนี้

  • type บอกชนิดของปัญหา หรือ URL
  • status คือ HTTP status code
  • title คือ ชื่อสั้น ๆ ที่คนอ่านเข้าใจได้ง่าย
  • detail คือ รายละเอียดเพื่ออธิบายปัญหานั้น ๆ
  • instance คือ URI ของ request นั้น ๆ
  • extension คือ field ที่เพิ่มเข้าในแต่ละส่วนง่าย ทำการ custom ได้เลย

ยกตัวอย่างเช่น

[gist id="6174eb11323dc1f17e2437fa839ec270" file="1.txt"]

ดังนั้นมาลองใช้ใน Spring Boot กันหน่อย

วิธีการแรก เปิดใช้งานด้วยการ config ไฟล์ application.properties ไปเลย

[gist id="6174eb11323dc1f17e2437fa839ec270" file="application.properties"]

ตัวอย่างเมื่อ return HTTP status code = 404

[gist id="6174eb11323dc1f17e2437fa839ec270" file="404.txt"]

วิธีการที่สอง จัดการใช้ ControllerAdvice ได้เลย

[gist id="6174eb11323dc1f17e2437fa839ec270" file="GlobalExceptionHandler.java"]

เพียงเท่านี้ก็คุยกันง่ายขึ้นแล้ว
ขอให้สนุกกับการ coding ครับ

Reference Websites


Viewing all articles
Browse latest Browse all 1997

Trending Articles