2011-05-18 14 views
8

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

एक बाहरी फ़ाइल एपीआई वर्ग के लिए एक कॉल, यानी, findVenueByLocationID($locationID); इस समारोह तो निर्माण करेगी यूआरएल और API कॉल की विधि (पोस्ट, मिलता है, हटाएँ, आदि) और एक समारोह makeCall कहा जाता है कि पारित कर देगा।

मेककॉल पूरा यूआरएल बनाता है, सेवा के लिए अनुरोध भेजता है और परिणामस्वरूप एक्सएमएल वापस भेजता है। यदि एपीआई एक त्रुटि देता है, तो यह एक्सएमएल के भीतर आता है। यूआरएल को फंक्शन file_get_contents() का उपयोग करने के लिए कहा जाता है। एपीआई में त्रुटि कोड की एक निश्चित संख्या है जो एक्सएमएल में वापस आ जाएगी।

मैं यह समझ के रूप में, मैं समारोह makeCall दौरान निम्न करना चाहिए:

  • पहले एक्सएमएल दिया जाता है, देखने के लिए अगर यह एक त्रुटि कोड होता है की जाँच करें, और यदि हां, तो एक त्रुटि है कि पारित त्रुटि से निपटने के लिए कक्षा को संभालना। (लॉग और रिटर्न क्लाइंट संस्करण त्रुटि संदेश)
  • किसी भी कनेक्शन त्रुटियों को पकड़ने के लिए file_get_contents() फ़ंक्शन के आसपास पकड़ने का प्रयास करें, यानी सर्वर तक पहुंचने में सक्षम नहीं है?

क्या यह चीजों को करने का सबसे अच्छा तरीका माना जाता है? क्या मुझे फ़ाइल_get_contents के अंदर इसे बनाने के बजाय कॉल करने के लिए कॉल के चारों ओर पकड़ने की कोशिश करनी चाहिए? क्या मुझे एक्सएमएल द्वारा लौटाई गई प्रत्येक त्रुटि के लिए अपवाद फेंकना चाहिए और उन्हें एक त्रुटि वर्ग से संभालना चाहिए?

जिस प्रकार का उत्तर मैं ढूंढ रहा हूं उसे एपीआई रैपर या ऐसी चीजों के साथ त्रुटि प्रबंधन के आसपास कुछ सर्वोत्तम प्रथाओं को समझाते हुए संसाधन के लिए एक लिंक भी होना चाहिए।

आपके समय और प्रतिक्रियाओं के लिए अग्रिम धन्यवाद।


संपादित करें: हमारे सीटीओ के साथ बात कर के बाद, वर्तमान संस्करण में PHP में त्रुटियों अपवाद हैं, और मैं अपवाद फेंक और फोन करने वाले के लिए अपवाद के व्यवहार छोड़ देना चाहिए। याद रखें, मैं एक एपीआई के लिए एक रैपर वर्ग लागू कर रहा हूँ। विचार?

+0

'file_get_contents() 'चेतावनी ट्रिगर करता है अगर यह संसाधन को पुनर्प्राप्त या पढ़ नहीं सकता है, तो कोशिश करें ... पकड़ आपको वहां मदद नहीं करेगा। यदि आप 'Zend_Http_Client' जैसी कक्षा का उपयोग करते हैं, तो आप असफलताओं को अधिक आसानी से रोक पाएंगे। –

उत्तर

3

आपको पहले अपवादों और त्रुटियों के बीच अंतर पता होना चाहिए: त्रुटियां होती हैं, अपवाद असाधारण हैं।

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

तो यदि आप किसी तीसरे पक्ष से एक्सएमएल प्राप्त करते हैं तो आप शायद यह मान्य होने की उम्मीद करेंगे। लेकिन त्रुटियां हो सकती हैं। यदि एपीआई आपको एक त्रुटि देता है (स्थान नहीं मिला) तो यह शायद आपकी तरफ भी एक त्रुटि होगी। केवल विशेष मामलों में (आपने एक स्थान को हार्डकोड किया है जिसे आप निश्चित रूप से जानते हैं हमेशा वहां रहेगा) जो एक अपवाद हो सकता है।

सबसे मामूली अपवाद कनेक्शन त्रुटियां हैं: तब निश्चित रूप से कुछ गलत है। दूसरी आसान बात एपीआई में त्रुटियां हैं जिनकी आप उम्मीद कर सकते हैं, जैसे "कोई नई जानकारी नहीं" (बस एक उदाहरण के रूप में): यह एक आंतरिक त्रुटि है।और कहीं आपको एक रेखा खींचना चाहिए, लेकिन ज्यादातर मामलों में यह असाधारण है कि असाधारण क्या है और केवल एक त्रुटि क्या हो सकती है।

+0

इस पर आपके विचारों के लिए धन्यवाद। ऐसा लगता है कि हमारी यूनी ने इस आवश्यक जानकारी को याद किया ... क्या यह बेहतर समझाया जा सकता है क्योंकि डेटा प्रोसेसिंग में कोई समस्या है और अपवाद तब होता है जब प्रक्रिया पूरी नहीं हो सकती है? – Relequestual

+0

यह एक बहुत ही प्रयोग किया जाने वाला संस्करण होगा जो मुझे लगता है और शायद इस मामले में उपयोग करने योग्य है, लेकिन ध्यान रखें कि कोई "असली" और पूर्ण समाधान नहीं है, केवल स्थिति प्रति दिशानिर्देश हैं। उदाहरण के लिए, यदि आपके पास कोई स्थिति है (ज्ञात खराब कनेक्शन, हो सकता है कि आप कनेक्शन का परीक्षण भी कर रहे हों) जहां एक प्रक्रिया पूरी होने की उम्मीद नहीं है, तो आप उसे एक त्रुटि कह सकते हैं। तो उस स्थिति में आपका कनेक्शन अपवाद फेंकता है (क्योंकि कनेक्शन के लिए यह अजीब है: यह वह नहीं कर सकता जो इसे करना चाहिए), लेकिन आप इसे पकड़ते हैं और अपने परीक्षण-कार्यक्रम में एक त्रुटि लौटाते हैं। – Nanne

संबंधित मुद्दे

 संबंधित मुद्दे