Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

Grape में अपवाद हैंडलिंग में महारत: कस्टम त्रुटियाँ, सर्वोत्तम अभ्यास और AppSignal एकीकरण

Grape RESTful API बनाने के लिए एक लोकप्रिय रूबी फ्रेमवर्क है। अपवाद हैंडलिंग किसी भी एप्लिकेशन की स्थिरता और विश्वसनीयता सुनिश्चित करने में महत्वपूर्ण भूमिका निभाती है, जिसमें Grape के साथ बने एप्लिकेशन भी शामिल हैं।

यह लेख Grape अपवाद हैंडलिंग की मूल बातें तलाशेगा, जिसमें अपवादों को अनुकूलित करना शामिल है। हम कुछ सर्वोत्तम अभ्यासों पर भी चर्चा करेंगे, और अपने ऐप को उन्नत त्रुटि निगरानी और प्रबंधन के लिए AppSignal के साथ कैसे एकीकृत करें।

शुरू करते हैं!

Grape अपवाद हैंडलिंग की मूल बातें

इस ट्यूटोरियल में, हम देखेंगे कि रेल्स में बने Grape API में अपवादों को कैसे संभालना है। मैंने इसके लिए एक डेमो जॉब बोर्ड API बनाया है, और आप GitHub पर सोर्स कोड देख सकते हैं।

अपवाद उठाना

आप error! का उपयोग करके Grape में एक अपवाद उठा सकते हैं। उदाहरण के लिए, ऊपर उल्लिखित जॉब API में, हमारे पास एक show रूट है जो ID के आधार पर एक जॉब लौटाता है। हम रिकॉर्ड उपलब्ध न होने पर 404 त्रुटि लौटा सकते हैं, जैसे:


जब आप एक अपवाद उठाते हैं, तो आप इसे "अद्वितीय" तरीके से संभालना चाहेंगे — आप सबसे अधिक संभावना उठाए गए अपवाद को अपने उपयोगकर्ताओं को नहीं भेजना चाहेंगे।

रूबी में, हमारे पास अपवाद हैंडलिंग के लिए एक डिफ़ॉल्ट तंत्र है। यह अपवाद उठा सकने वाले कोड को begin ब्लॉक में लपेटकर काम करता है। rescue ब्लॉक का उपयोग उठाए गए अपवाद को संभालने के लिए किया जाता है।


तो, यहां एक विशिष्ट परिदृश्य में यह कैसा दिखेगा:


rescue_from विधि

जब आप अपवाद उठाते हैं, या वे आपके सीधे शामिल हुए बिना होते हैं, तो आप उन्हें ठीक से संभालना चाहेंगे। डिफ़ॉल्ट रूप से, Grape एक rescue_from विधि प्रदान करता है। यह आपको कोड का एक ब्लॉक निर्दिष्ट करने की अनुमति देता है जो परिभाषित अपवाद उठाए जाने पर निष्पादित होता है।

तो, jobs संसाधन में उत्पन्न होने वाले किसी भी अन्य से पहले हमने जो 404 त्रुटि उठाई थी, उसे "बचाने" या संभालने के लिए, हम rescue_from विधि का उपयोग कर सकते हैं। यह विधि jobs संसाधन के ऊपर जोड़ी जाती है।


हम कंटेंट प्रकार भी निर्दिष्ट कर सकते हैं जिसका उपयोग किया जाना है:


अपवाद को संभालने का यह तरीका बहुत सामान्य है — हम हर प्रकार के अपवाद को बचा रहे हैं और 404 स्टेटस कोड के साथ एक त्रुटि लौटा रहे हैं। यह भ्रामक है यदि हमारे API उपयोगकर्ता 400 स्टेटस कोड प्राप्त करने की उम्मीद करते हैं।

हम इसके बजाय उस अपवाद को निर्दिष्ट कर सकते हैं जिसे हम संभालना चाहते हैं:


जब हम ActiveRecord::RecordNotFound त्रुटि का सामना करते हैं, तो हम 404 स्टेटस कोड के साथ एक त्रुटि संदेश लौटाएंगे। अन्यथा, हम 500 स्टेटस कोड के साथ एक त्रुटि संदेश लौटाएंगे।

यह दर्शाता है कि हम वर्तमान में जो हैं उसमें सुधार कर सकते हैं, लेकिन क्या होगा यदि हम एक त्रुटि हैंडलर चाहते हैं जो सभी त्रुटियों से बचाता है? यहीं पर अपवादों को अनुकूलित करना आता है।

रूबी के लिए Grape में अपवादों को अनुकूलित करना

सामना की गई त्रुटि के प्रकार के आधार पर, यह त्रुटि हैंडलर सही स्टेटस कोड के साथ एक त्रुटि संदेश लौटाने में सक्षम होना चाहिए।

सबसे पहले, exceptions_handler नामक एक फ़ाइल बनाएं। फिर, हम अपने वर्तमान अपवाद हैंडलर को फ़ाइल में ले जाएंगे:


हमारा ExceptionHandler मॉड्यूल ActiveSupport::Concern का उपयोग करता है, जिससे हमें included और class_methods जैसी कार्यक्षमताओं तक पहुंच मिलती है। उपरोक्त स्निपेट में, हमारे पास included ब्लॉक में त्रुटि हैंडलर हैं, इसलिए जहां भी यह मॉड्यूल शामिल किया जाता है, वे उपलब्ध होंगे जैसे वे परिभाषित हैं।

हम आगे बढ़ सकते हैं और उन फ़ाइलों से त्रुटि हैंडलर को हटा सकते हैं जहां वे पहले थे। फिर हम ExceptionsHandler मॉड्यूल को अपनी API एंट्री फ़ाइल — api.rb में शामिल कर सकते हैं:


आइए हमारी त्रुटियों के लिए एक बेस एरर क्लास बनाएं। यह क्लास त्रुटि प्रतिक्रिया लौटाने के लिए जिम्मेदार होगी।


क्लास दो कीवर्ड पैरामीटर स्वीकार करता है: एक message स्ट्रिंग और एक status। यदि कोई पास नहीं किया जाता है, तो हम डिफ़ॉल्ट का उपयोग करेंगे।

body विधि में, हम एक Rack प्रतिक्रिया लौटाते हैं। डिफ़ॉल्ट रूप से, 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 ब्लॉकों की आवश्यकता होगी। हम केस स्टेटमेंट का उपयोग करके इसमें सुधार कर सकते हैं:


एट वोइला!

सर्वोत्तम अभ्यास और सुझाव

जबकि अपवाद हैंडलिंग के लिए आप कई सर्वोत्तम अभ्यास अपना सकते हैं, यहां पालन करने के लिए कुछ त्वरित सुझाव दिए गए हैं:

  1. संबंधित अपवादों को समूहित करें: जैसा कि हम ऊपर कोड में देखते हैं, संबंधित अपवादों को समूहित करने से हमें रखरखाव योग्य कोड रखने की अनुमति मिलती है। जैसे-जैसे हम जिन अपवादों को संभालना चाहते हैं उनकी संख्या बढ़ती है, हम उन्हें अपनी सूची में जोड़ सकते हैं।
  2. error! जैसे हेल्पर्स का उपयोग करके त्वरित अपवाद उठाएं। यह आपके अपवाद हैंडलिंग को सरल बनाता है।
  3. AppSignal जैसे अपवाद निगरानी टूल का उपयोग करें।

AppSignal एकीकरण: रूबी के लिए Grape

AppSignal आपके एप्लिकेशन में त्रुटियों की निगरानी और ट्रैक करने में आपकी मदद करता है। अपने Grape API को AppSignal के साथ एकीकृत करने से आपको अपवादों में मूल्यवान अंतर्दृष्टि मिलती है। यह गाइड आपको दिखाता है कि अपने Grape API को AppSignal के साथ कैसे एकीकृत करें। जब भी आपके API में कोई त्रुटि होती है, आप इसे अपने AppSignal डैशबोर्ड में देखेंगे, जैसे:

Grape में अपवाद हैंडलिंग में महारत: कस्टम त्रुटियाँ, सर्वोत्तम अभ्यास और AppSignal एकीकरण

समापन

अपवाद हैंडलिंग मजबूत API विकसित करने का एक महत्वपूर्ण पहलू है। इस ट्यूटोरियल में, हमने देखा कि Grape API में अपवादों को ठीक से कैसे संभालना है। हमने कुछ सर्वोत्तम प्रथाओं और Grape के लिए AppSignal के एकीकरण पर भी संक्षेप में चर्चा की।

अपवाद हैंडलिंग एक सतत प्रक्रिया है — एक जिसे आपको लगातार सुधारने की आवश्यकता होगी।

हैप्पी कोडिंग!

P.S. यदि आप Ruby Magic पोस्ट को प्रेस से निकलते ही पढ़ना चाहते हैं, तो हमारे Ruby Magic न्यूज़लेटर की सदस्यता लें और कभी भी एक भी पोस्ट न चूकें!

P.P.S. क्या आप जानते हैं कि AppSignal एक Active Record एकीकरण प्रदान करता है? अधिक जानें।

Grape में अपवाद हैंडलिंग में महारत: कस्टम त्रुटियाँ, सर्वोत्तम अभ्यास और AppSignal एकीकरण

Kingsley Chijioke


  1. CSS से Z-Index का उपयोग करके ओवरलैपिंग एलिमेंट्स CSS से Z-Index का उपयोग करके ओवरलैपिंग एलिमेंट्स

    CSS Z-Index प्रॉपर्टी का उपयोग करके डेवलपर एलिमेंट्स को एक-दूसरे के ऊपर स्टैक कर सकते हैं। Z-Index का मान पॉजिटिव या नेगेटिव हो सकता है।नोट - यदि ओवरलैप होने वाले एलिमेंट्स में z-index स्पेसिफाई नहीं है तो वह एलिमेंट दिखेगा जो डॉक्यूमेंट में अंत में मेंशन किया गया है।उदाहरणआइए z-index प्रॉपर्टी का ए

  1. HTML DOM Style columnRule प्रॉपर्टी HTML DOM Style columnRule प्रॉपर्टी

    HTML DOM columnRule प्रॉपर्टी का उपयोग columnRule प्रॉपर्टी को प्राप्त या सेट करने के लिए किया जाता है। यह तीन प्रॉपर्टी नामतः columnRuleColor, columnRuleStyle और columnRuleWidth में हेरफेर करने के लिए एक शॉर्टहैंड प्रॉपर्टी है।सिंटैक्स निम्नलिखित है:columnRule प्रॉपर्टी सेट करना:object.style.column

  1. JavaScript से अलर्ट बॉक्स कैसे बनाएं JavaScript से अलर्ट बॉक्स कैसे बनाएं

    अलर्ट बॉक्स क्या है? एक अलर्ट बॉक्स एक छोटी विंडो है जो किसी प्रकार के यूजर इंटरैक्शन (क्लिकिंग, स्क्रॉलिंग, टाइपिंग, आदि) के प्रतिक्रिया में पॉप अप होती है। अलर्ट बॉक्स का उपयोग ज्यादातर यूजर्स को मुद्दों के बारे में चेतावनी देने के लिए किया जाता है, लेकिन उनका उपयोग केवल अंतिम यूजर को सूचित करने