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:
ยังไงก็ตาม!
แนวทางปฏิบัติที่ดีที่สุดและเคล็ดลับ
แม้ว่าจะมีแนวทางปฏิบัติที่ดีที่สุดมากมายที่คุณสามารถใช้เพื่อจัดการกับข้อยกเว้นได้ แต่เคล็ดลับสั้นๆ บางประการที่ควรปฏิบัติตามมีดังนี้:
- ข้อยกเว้นที่เกี่ยวข้องกับกลุ่ม:ตามที่เราเห็นในโค้ดด้านบน การจัดกลุ่มข้อยกเว้นที่เกี่ยวข้องทำให้เรามีโค้ดที่สามารถบำรุงรักษาได้ เนื่องจากจำนวนข้อยกเว้นที่เราต้องการจัดการเพิ่มขึ้น เราจึงเพิ่มข้อยกเว้นเหล่านั้นลงในรายการของเราได้
- ใช้ตัวช่วยเช่น
471เพื่อยกข้อยกเว้นอย่างรวดเร็ว สิ่งนี้ทำให้การจัดการข้อยกเว้นของคุณง่ายขึ้น - ใช้เครื่องมือตรวจสอบข้อยกเว้น เช่น AppSignal
การบูรณาการ AppSignal:Grape สำหรับ Ruby
AppSignal ช่วยคุณตรวจสอบและติดตามข้อผิดพลาดในแอปพลิเคชันของคุณ การรวม AppSignal เข้ากับ Grape API ของคุณจะทำให้คุณได้รับข้อมูลเชิงลึกอันมีค่าเกี่ยวกับข้อยกเว้น คู่มือนี้จะแสดงวิธีผสานรวม AppSignal เข้ากับ Grape API ของคุณ เมื่อใดก็ตามที่เกิดข้อผิดพลาดใน API ของคุณ คุณจะเห็นข้อผิดพลาดนั้นในแดชบอร์ด AppSignal ของคุณ ดังนี้:

สรุป
การจัดการข้อยกเว้นถือเป็นส่วนสำคัญในการพัฒนา API ที่แข็งแกร่ง ในบทช่วยสอนนี้ เราได้ดูวิธีจัดการข้อยกเว้นใน Grape API อย่างเหมาะสมแล้ว นอกจากนี้เรายังดูแนวทางปฏิบัติที่ดีที่สุดบางส่วนและการผสานรวม AppSignal กับ Grape ในเวลาสั้นๆ
การจัดการข้อยกเว้นเป็นกระบวนการที่กำลังดำเนินอยู่ — ซึ่งเป็นกระบวนการที่คุณจะต้องปรับปรุงอย่างต่อเนื่อง
ขอให้สนุกกับการเขียนโค้ด!
ปล. หากคุณต้องการอ่านโพสต์ Ruby Magic ทันทีที่เผยแพร่ สมัครรับจดหมายข่าว Ruby Magic ของเราและไม่พลาดแม้แต่โพสต์เดียว! ป>
พี.พี.เอส. คุณรู้หรือไม่ว่า AppSignal นำเสนอการผสานรวม Active Record ค้นหาข้อมูลเพิ่มเติม ป>