Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

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

Grape เป็นเฟรมเวิร์ก Ruby ยอดนิยมสำหรับการสร้าง RESTful API การจัดการข้อยกเว้นมีบทบาทสำคัญในการรับประกันความเสถียรและความน่าเชื่อถือของแอปพลิเคชันใดๆ รวมถึงแอปพลิเคชันที่สร้างด้วย Grape

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

มาเริ่มกันเลย!

พื้นฐานของการจัดการข้อยกเว้นองุ่น

ในบทช่วยสอนนี้ เราจะดูวิธีจัดการกับข้อยกเว้นใน Grape API ที่สร้างใน Rails ฉันได้สร้าง API กระดานงานสาธิตสำหรับสิ่งนี้ และคุณสามารถตรวจสอบซอร์สโค้ดได้บน GitHub

การเพิ่มข้อยกเว้น

คุณสามารถเพิ่มข้อยกเว้นใน Grape ได้โดยใช้ 00 . ตัวอย่างเช่น ใน job API ที่กล่าวถึงข้างต้น เรามี 13 เส้นทางที่ส่งคืนงานตาม 20 . เราสามารถส่งคืน 31 ได้ เกิดข้อผิดพลาดเมื่อไม่มีบันทึก เช่นนี้:

 

เมื่อคุณยกข้อยกเว้นขึ้นมา คุณจะต้องจัดการกับมันด้วยวิธีที่ “ไม่ซ้ำใคร” — คุณมักจะไม่ต้องการส่งข้อยกเว้นที่ยกให้กับผู้ใช้ของคุณ

ใน Ruby เรามีกลไกเริ่มต้นสำหรับการจัดการข้อยกเว้น ทำงานโดยการตัดโค้ดที่อาจเพิ่มข้อยกเว้นใน 46 บล็อก 54 บล็อกใช้เพื่อจัดการกับข้อยกเว้นที่ได้รับการยกขึ้น

 

ดังนั้น ต่อไปนี้คือสิ่งที่จะมีลักษณะเช่นนี้ในสถานการณ์ทั่วไป:

 

63 วิธีการ

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

ดังนั้นเพื่อ “ช่วยเหลือ” หรือจัดการ 86 ข้อผิดพลาดที่เรายกขึ้นก่อนข้อผิดพลาดอื่นใดที่เกิดขึ้นใน 95 ทรัพยากร เราสามารถใช้ 109 วิธีการ วิธีการนี้ถูกเพิ่มไว้เหนือ 114 ทรัพยากร

 

นอกจากนี้เรายังสามารถระบุประเภทเนื้อหาที่จะใช้:

 

วิธีการจัดการข้อยกเว้นนี้กว้างเกินไป — เรากำลังช่วยเหลือข้อยกเว้นทุกรูปแบบและส่งกลับข้อผิดพลาดด้วย 128 รหัสสถานะ นั่นทำให้เข้าใจผิดหากผู้ใช้ API ของเราคาดหวังว่าจะได้รับ 139 รหัสสถานะ

เราสามารถระบุข้อยกเว้นที่เราต้องการจัดการแทน:

 

เมื่อเราเจอ 149 error เราจะส่งคืนข้อความแสดงข้อผิดพลาดด้วย 151 รหัสสถานะ มิฉะนั้น เราจะส่งคืนข้อความแสดงข้อผิดพลาดด้วย 162 รหัสสถานะ

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

การปรับแต่งข้อยกเว้นใน Grape สำหรับ Ruby

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

ขั้นแรก สร้างไฟล์ชื่อ Exceptions_handler . จากนั้น เราจะย้ายตัวจัดการข้อยกเว้นปัจจุบันของเราไปที่ไฟล์:

 

174 ของเรา โมดูลใช้ 188 ทำให้เราสามารถเข้าถึงฟังก์ชันเช่น 199 และ 201 . ในตัวอย่างด้านบน เรามีตัวจัดการข้อผิดพลาดใน 212 บล็อก ดังนั้นไม่ว่าจะรวมโมดูลนี้ไว้ที่ไหนก็ตาม โมดูลเหล่านี้จะพร้อมใช้งานตามที่กำหนดไว้

เราสามารถไปข้างหน้าและลบตัวจัดการข้อผิดพลาดออกจากไฟล์ที่เรามีก่อนหน้านี้ได้ จากนั้นเราสามารถรวม ExceptionsHandler ได้ โมดูลในไฟล์รายการ API ของเรา — api.rb :

 

มาสร้างคลาสข้อผิดพลาดพื้นฐานสำหรับข้อผิดพลาดของเรากันดีกว่า คลาสนี้จะรับผิดชอบในการส่งคืนการตอบสนองข้อผิดพลาด

 

ชั้นเรียนยอมรับพารามิเตอร์คำหลักสองตัว:221 สตริงและ 237 . หากไม่มีสิ่งใดผ่าน เราจะใช้ค่าเริ่มต้น

ใน 240 วิธีการเราจะส่งคืนการตอบสนองของชั้นวาง ตามค่าเริ่มต้น 254 ตัวจัดการต้องส่งคืน 268 วัตถุ โทร 271 หรือยกข้อยกเว้น

เราสามารถใช้ประโยชน์จากมันได้ใน 280 :

 

เมื่อเราเรียก 298 ปลายทาง เราจะเห็น 304 กลับเป็นการตอบรับ ณ จุดนี้ เราสามารถสร้างคลาสสำหรับ 316 ได้ ข้อผิดพลาด

 

326 คลาสยอมรับเฉพาะ 336 . เนื่องจากสืบทอดมาจาก 347 เราไม่จำเป็นต้องส่งคืน 354 อีกครั้ง เราสามารถนำไปใช้ใน 363 ได้ เช่นนี้:

 

ตอนนี้ ถ้าเราพยายามที่จะแจ้งข้อผิดพลาดเช่นนี้ด้วยตนเอง:

 

วิธีนี้จะทำงานได้ดี แต่รหัสสถานะจะเป็น 374 เพราะมันส่งคืนการตอบกลับใน 380 คลาส (เป็น 392 class จัดการข้อผิดพลาด) เพื่อแก้ไข เราจะต้องแก้ไข 402 เพื่อใช้ 415 อย่างชัดเจน คลาสเพื่อจัดการข้อผิดพลาดแทน

ดังนั้นเมื่อใดก็ตามที่เกิดข้อผิดพลาดที่สอดคล้องกับ 426 และ 436 พบให้ใช้ 445 . มิฉะนั้น ให้ใช้ 450 .

 

คุณจะเห็นได้ว่าเราต้องการเฉพาะ463 บล็อกในขณะที่เราสร้างคลาสข้อผิดพลาดเพิ่มเติม เราสามารถปรับปรุงสิ่งนี้ได้โดยใช้คำสั่ง case:

 

ยังไงก็ตาม!

แนวทางปฏิบัติที่ดีที่สุดและเคล็ดลับ

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

  1. ข้อยกเว้นที่เกี่ยวข้องกับกลุ่ม:ตามที่เราเห็นในโค้ดด้านบน การจัดกลุ่มข้อยกเว้นที่เกี่ยวข้องทำให้เรามีโค้ดที่สามารถบำรุงรักษาได้ เนื่องจากจำนวนข้อยกเว้นที่เราต้องการจัดการเพิ่มขึ้น เราจึงเพิ่มข้อยกเว้นเหล่านั้นลงในรายการของเราได้
  2. ใช้ตัวช่วยเช่น 471 เพื่อยกข้อยกเว้นอย่างรวดเร็ว สิ่งนี้ทำให้การจัดการข้อยกเว้นของคุณง่ายขึ้น
  3. ใช้เครื่องมือตรวจสอบข้อยกเว้น เช่น AppSignal

การบูรณาการ AppSignal:Grape สำหรับ Ruby

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

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

สรุป

การจัดการข้อยกเว้นถือเป็นส่วนสำคัญในการพัฒนา API ที่แข็งแกร่ง ในบทช่วยสอนนี้ เราได้ดูวิธีจัดการข้อยกเว้นใน Grape API อย่างเหมาะสมแล้ว นอกจากนี้เรายังดูแนวทางปฏิบัติที่ดีที่สุดบางส่วนและการผสานรวม AppSignal กับ Grape ในเวลาสั้นๆ

การจัดการข้อยกเว้นเป็นกระบวนการที่กำลังดำเนินอยู่ — ซึ่งเป็นกระบวนการที่คุณจะต้องปรับปรุงอย่างต่อเนื่อง

ขอให้สนุกกับการเขียนโค้ด!

ปล. หากคุณต้องการอ่านโพสต์ Ruby Magic ทันทีที่เผยแพร่ สมัครรับจดหมายข่าว Ruby Magic ของเราและไม่พลาดแม้แต่โพสต์เดียว!

พี.พี.เอส. คุณรู้หรือไม่ว่า AppSignal นำเสนอการผสานรวม Active Record ค้นหาข้อมูลเพิ่มเติม การเรียนรู้การจัดการข้อยกเว้นใน Grape:ข้อผิดพลาดแบบกำหนดเอง แนวทางปฏิบัติที่ดีที่สุด และการรวม AppSignal

คิงสลีย์ ชิจิโอเกะ