मेरे पास "एक सेवा के रूप में सॉफ्टवेयर" ऐप है जो एक RESTful API के माध्यम से जेएसओएन संचारित करता है।जेएसओएन आधारित रीस्टफुल कोड में अपवादों को कैसे संभालें?
बस कहा गया: JSON डेटा इंटरचेंज के साथ एक विश्वसनीय API का उपयोग करते समय अपवादों को कैप्चर करने और रिपोर्ट करने के लिए सर्वोत्तम प्रथाएं क्या हैं?
मेरा पहला विचार यह देखना था कि रेल मचान पैदा करके क्या करता है, लेकिन यह स्पष्ट रूप से सही नहीं है। JSON कोड किसी गैर-मौजूद आईडी भेजता है, तो
class MumblesController < ApplicationController
# GET /mumbles/1
# GET /mumbles/1.json
def show
@mumble = Mumble.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @mumble }
end
end
end
इस मामले में, उदाहरण के लिए: यहाँ एक अंश है
http://www.myhost.com/mumbles/99999.json
तो Mumble.find() ActiveRecord :: RecordNotFound बढ़ाएगा। ActionController उसे पकड़ लेगा और HTML में एक त्रुटि पृष्ठ प्रस्तुत करेगा। लेकिन एचटीएमएल क्लाइंट के लिए बेकार है जो JSON की अपेक्षा कर रहा है।
मैं begin ... rescue RuntimeError
ब्लॉक में Mumble.find() को लपेटकर और JSON स्थिति =>: unprocessable_entity या कुछ प्रस्तुत करने के द्वारा उस पर काम कर सकता हूं।
लेकिन तब क्या ग्राहक की एप्लिकेशन गलत पथ, उदा .:
http://www.myhost.com/badtypo/1.json
एक JSON आधारित एप्लिकेशन कि पकड़ने और JSON में कोई त्रुटि वापस जाने के लिए माना जाता है भेजता है? यदि हां, तो मैं एक्शन डिस्पैच में गहरी खुदाई के बिना कहां कैप्चर करूं?
तो कुल मिलाकर, क्या मैं पंट करता हूं और अगर कोई त्रुटि हो तो एक्शनकंट्रोलर HTML उत्पन्न करता है? यह सही लगता है नहीं ...
सावधान रहना: कम से कम रेल 4 में, 'rescue_from' में मिलान के आदेश * नियमित रूप से' rescue' से उलट है *: यदि आप एक उपवर्ग बनाम के लिए एक अलग व्यवहार चाहते हैं इसके मूल वर्ग, उप-वर्ग * के बाद * माता-पिता को रखें: -/' – AlexChaffee