ग्रेप में अपवाद प्रबंधन में महारत हासिल करना:कस्टम त्रुटियां, सर्वोत्तम अभ्यास और ऐपसिग्नल एकीकरण
<पी> रेस्टफुल एपीआई के निर्माण के लिए ग्रेप एक लोकप्रिय रूबी फ्रेमवर्क है। अपवाद प्रबंधन किसी भी अनुप्रयोग की स्थिरता और विश्वसनीयता सुनिश्चित करने में महत्वपूर्ण भूमिका निभाता है, जिसमें अंगूर से बने अनुप्रयोग भी शामिल हैं। <पी> यह आलेख अपवादों को अनुकूलित करने सहित ग्रेप अपवाद प्रबंधन की बुनियादी बातों का पता लगाएगा। हम कुछ सर्वोत्तम प्रथाओं पर भी बात करेंगे, और उन्नत त्रुटि निगरानी और प्रबंधन के लिए अपने ऐप को ऐपसिग्नल के साथ कैसे एकीकृत करें। <पी> आइए शुरू करें! अंगूर अपवाद प्रबंधन की मूल बातें
<पी> इस ट्यूटोरियल में, हम देखेंगे कि रेल्स में निर्मित ग्रेप एपीआई में अपवादों को कैसे संभालना है। मैंने इसके लिए एक डेमो जॉब बोर्ड एपीआई बनाया है, और आप GitHub पर स्रोत कोड देख सकते हैं। एक अपवाद उठाना
<पी> आप error! का उपयोग करके ग्रेप में एक अपवाद बढ़ा सकते हैं . उदाहरण के लिए, ऊपर उल्लिखित जॉब एपीआई में, हमारे पास एक show है वह मार्ग जो ID के आधार पर नौकरी लौटाता है . हम 404 लौटा सकते हैं रिकॉर्ड उपलब्ध न होने पर त्रुटि, इस प्रकार: <पी> जब आप कोई अपवाद उठाते हैं, तो आप इसे "अनूठे" तरीके से संभालना चाहेंगे - आप संभवतः उठाए गए अपवाद को अपने उपयोगकर्ताओं को नहीं भेजना चाहेंगे। <पी> रूबी में, हमारे पास अपवाद प्रबंधन के लिए एक डिफ़ॉल्ट तंत्र है। यह कोड लपेटकर काम करता है जो begin में अपवाद उत्पन्न कर सकता है ब्लॉक. rescue ब्लॉक का उपयोग उठाए गए अपवाद को संभालने के लिए किया जाता है। <पी> तो, यहां बताया गया है कि एक सामान्य परिदृश्य में यह कैसा दिखेगा: rescue_from विधि
<पी> जब आप अपवाद उठाते हैं, या वे आपकी प्रत्यक्ष भागीदारी के बिना होते हैं, तो आप उन्हें ठीक से संभालना चाहेंगे। डिफ़ॉल्ट रूप से, ग्रेप एक rescue_from प्रदान करता है विधि. यह आपको कोड के एक ब्लॉक को निर्दिष्ट करने की अनुमति देता है जो परिभाषित अपवाद उठाए जाने पर निष्पादित होता है। <पी> तो, 404 को "बचाने" या संभालने के लिए jobs में उत्पन्न होने वाली किसी भी अन्य त्रुटि से पहले हमने त्रुटि उठाई संसाधन, हम rescue_from का उपयोग कर सकते हैं विधि. विधि jobs के ऊपर जोड़ी गई है संसाधन. <पी> हम उपयोग की जाने वाली सामग्री का प्रकार भी निर्दिष्ट कर सकते हैं: <पी> अपवाद को संभालने का यह तरीका बहुत सामान्य है - हम हर प्रकार के अपवाद को बचा रहे हैं और 404 के साथ एक त्रुटि लौटा रहे हैं। स्थिति कोड. यदि हमारे एपीआई उपयोगकर्ता 400 प्राप्त करने की उम्मीद करते हैं तो यह भ्रामक है स्थिति कोड. <पी> इसके बजाय हम उस अपवाद को निर्दिष्ट कर सकते हैं जिसे हम संभालना चाहते हैं: <पी> जब हमारा सामना ActiveRecord::RecordNotFound से होता है त्रुटि, हम 404 के साथ एक त्रुटि संदेश लौटाएंगे स्थिति कोड. अन्यथा, हम 500 के साथ एक त्रुटि संदेश लौटाएंगे स्थिति कोड. <पी> इससे पता चलता है कि हमारे पास वर्तमान में जो कुछ है उसमें हम सुधार कर सकते हैं, लेकिन क्या होगा यदि हम एक त्रुटि हैंडलर चाहते हैं जो सभी से बचाता है त्रुटियाँ? यहीं पर कस्टमाइज़िंग अपवाद आते हैं। रूबी के लिए अंगूर में अपवादों को अनुकूलित करना
<पी> सामने आई त्रुटि के प्रकार के आधार पर, यह त्रुटि हैंडलर सही स्थिति कोड के साथ एक त्रुटि संदेश लौटाने में सक्षम होना चाहिए। <पी> सबसे पहले, exceptions_handler नामक एक फ़ाइल बनाएं . फिर, हम अपने वर्तमान अपवाद हैंडलर को फ़ाइल में ले जाएंगे: <पी> हमारा ExceptionHandler मॉड्यूल ActiveSupport::Concern का उपयोग करता है , जो हमें included जैसी कार्यात्मकताओं तक पहुंचने की अनुमति देता है और class_methods . उपरोक्त स्निपेट में, हमारे पास included में त्रुटि हैंडलर हैं ब्लॉक करें, इसलिए जहां भी यह मॉड्यूल शामिल किया गया है, वे परिभाषित किए गए अनुसार उपलब्ध होंगे। <पी> हम आगे बढ़ सकते हैं और त्रुटि हैंडलर को उन फ़ाइलों से हटा सकते हैं जहां वे पहले थे। फिर हम ExceptionsHandler को शामिल कर सकते हैं हमारी एपीआई प्रविष्टि फ़ाइल में मॉड्यूल - api.rb : <पी> आइए अपनी त्रुटियों के लिए एक आधार त्रुटि वर्ग बनाएं। यह वर्ग त्रुटि प्रतिक्रिया लौटाने के लिए जिम्मेदार होगा। <पी> कक्षा दो कीवर्ड पैरामीटर स्वीकार करती है:एक message स्ट्रिंग और एक status . यदि कोई भी पारित नहीं होता है, तो हम डिफ़ॉल्ट का उपयोग करेंगे। <पी> body में विधि, हम एक रैक प्रतिक्रिया लौटाते हैं। डिफ़ॉल्ट रूप से, rescue_from हैंडलर को Rack::Response लौटाना होगा ऑब्जेक्ट, error! पर कॉल करें , या एक अपवाद उठाएं। <पी> हम आगे बढ़ सकते हैं और ExceptionsHandler में इसका उपयोग कर सकते हैं : <पी> जब हम /error पर कॉल करते हैं समापन बिंदु, हम oops देखेंगे प्रतिक्रिया के रूप में लौटाया गया। इस बिंदु पर, हम NotFound के लिए एक क्लास बना सकते हैं त्रुटियाँ. <पी> NotFound कक्षा केवल message स्वीकार करती है . चूँकि यह BaseError से विरासत में मिला है , हमें Rack::Response वापस करने की आवश्यकता नहीं है फिर से। हम आगे बढ़ सकते हैं और इसे ExceptionsHandler में उपयोग कर सकते हैं इस तरह: <पी> अब, यदि हम मैन्युअल रूप से इस तरह की त्रुटि उत्पन्न करने का प्रयास करते हैं: <पी> यह ठीक काम करेगा, लेकिन स्थिति कोड 500 होगा , क्योंकि यह BaseError में प्रतिक्रिया लौटाता है वर्ग (BaseError के रूप में)। क्लास त्रुटि को संभालती है)। इसे ठीक करने के लिए, हमें ExceptionHandler को संशोधित करना होगा NotFound का स्पष्ट रूप से उपयोग करने के लिए इसके बजाय त्रुटि को संभालने के लिए क्लास। <पी> इसलिए, जब भी ActiveRecord::RecordNotFound के अनुरूप कोई त्रुटि आती है और V1::Exceptions::NotFound सामने आया है, तो Exceptions::NotFound का उपयोग करें . अन्यथा, Exceptions::BaseError का उपयोग करें . <पी> आप देख सकते हैं कि हमें विशिष्टrescue_from की आवश्यकता होगी जैसे-जैसे हम अधिक त्रुटि वर्ग बनाते हैं, ब्लॉक हो जाता है। हम केस स्टेटमेंट का उपयोग करके इसे सुधार सकते हैं: <पी> और वोइला! सर्वोत्तम अभ्यास और युक्तियाँ
<पी> हालांकि ऐसी कई सर्वोत्तम प्रथाएं हैं जिनका उपयोग आप अपवाद से निपटने के लिए कर सकते हैं, यहां पालन करने के लिए कुछ त्वरित सुझाव दिए गए हैं: - समूह संबंधी अपवाद:जैसा कि हमने उपरोक्त कोड में देखा, समूहीकरण संबंधी अपवाद हमें रखरखाव योग्य कोड प्राप्त करने की अनुमति देते हैं। जैसे-जैसे अपवादों की संख्या बढ़ती है जिन्हें हम संभालना चाहते हैं, हम उन्हें अपनी सूची में जोड़ सकते हैं।
error! जैसे सहायकों का उपयोग करें अपवादों को शीघ्रता से बढ़ाने के लिए। यह आपके अपवाद प्रबंधन को सरल बनाता है।
- ऐपसिग्नल जैसे अपवाद निगरानी टूल का उपयोग करें।
ऐपसिग्नल एकीकरण:रूबी के लिए अंगूर
<पी> AppSignal आपके एप्लिकेशन में त्रुटियों की निगरानी और ट्रैक करने में आपकी सहायता करता है। AppSignal को अपने Grape API के साथ एकीकृत करने से आपको अपवादों के बारे में बहुमूल्य जानकारी मिलती है। यह मार्गदर्शिका आपको दिखाती है कि AppSignal को अपने Grape API के साथ कैसे एकीकृत करें। जब भी आपके API में कोई त्रुटि होगी, तो आप इसे अपने AppSignal डैशबोर्ड में देखेंगे, जैसे: <पी>
समापन
<पी> अपवाद प्रबंधन मजबूत एपीआई विकसित करने का एक महत्वपूर्ण पहलू है। इस ट्यूटोरियल में, हमने देखा है कि ग्रेप एपीआई में अपवादों को ठीक से कैसे प्रबंधित किया जाए। हमने ग्रेप के लिए कुछ सर्वोत्तम प्रथाओं और ऐपसिग्नल के एकीकरण पर भी संक्षेप में गौर किया। <पी> अपवाद प्रबंधन एक सतत प्रक्रिया है - जिसमें आपको लगातार सुधार करने की आवश्यकता होगी। <पी> हैप्पी कोडिंग! <पी> पी.एस. यदि आप प्रेस से हटते ही रूबी मैजिक पोस्ट पढ़ना चाहते हैं, तो हमारे रूबी मैजिक न्यूज़लेटर की सदस्यता लें और एक भी पोस्ट न चूकें! पी> <पी> पी.पी.एस. क्या आप जानते हैं कि AppSignal एक सक्रिय रिकॉर्ड एकीकरण प्रदान करता है? और अधिक जानें. पी>
किंग्सले चिजिओके