2014-10-29 2 views
5

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

HTTP 500 मुझे अनुचित लगता है क्योंकि समस्या नहीं है (जैसा कि आरएफसी परिभाषित करता है) एक "आंतरिक सर्वर त्रुटि"। सर्वर ठीक है, और फिर भी पिघलने के बिना अन्य अनुरोधों को संसाधित करने में सक्षम है, यह तब तक खराब हो गया है जब तक कि दूसरी सेवा ऑनलाइन वापस न आ जाए।

क्योंकि आवेदन प्रभावी ढंग से शायद यह अन्य सेवा (थोड़े) के लिए एक प्रॉक्सी के रूप में कार्य कर रहा है, या 503 - Service Unavailable क्योंकि यह एक सेवा है जो अनुपलब्ध वास्तव में है मैं 502 - Bad Gateway के बारे में सोचा है, लेकिन वे बिल्कुल सही महसूस नहीं किया था। खासतौर पर आखिरी वाला, क्योंकि लोड के कारण अनुपलब्ध होने या प्रक्रिया के लिए बहुत से अनुरोध होने का अर्थ है।

उत्तर

7

आपको इसे अपने (एपीआई प्रदाताओं) परिप्रेक्ष्य से नहीं बल्कि उपभोक्ताओं के परिप्रेक्ष्य से देखना चाहिए।

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

तो मुझे पता है कि आपके पास आंतरिक सर्वर त्रुटि थी। आप मेरे अनुरोध को संसाधित करने में सक्षम नहीं थे, भले ही यह पूरी तरह से वैध था। तो आपको एक स्टेटस कोड 500 वापस करना चाहिए।

आप क्या कर सकते हैं (और वास्तव में हमेशा करना चाहिए), शरीर में एक त्रुटि संदेश वापस करना है। यदि आपका एपीआई एक जेसन एपीआई है, तो आपको एक जेसन प्रारूपित त्रुटि संदेश वापस करना चाहिए।

अच्छा दिखने के बारे में मत सोचो। स्पष्ट और अनुमानित होने के बारे में सोचें। सर्वर को एक अप्रत्याशित स्थिति का सामना करना पड़ा, जिसने इसे अनुरोध को पूरा करने से रोका।

यह एक 500

संपादित करें: आप डेटाबेस का उल्लेख है, और एक डेटाबेस टाइमआउट के मामले में यह सबसे निश्चित रूप से एक 500

/जेपी

+0

हाँ, डीबी एक खराब उदाहरण था और मैं उस पर सहमत हूं। जो वास्तव में मुझे वास्तविक मामले में चिंतित करता है, वह अपस्ट्रीम सेवा है। मैं क्लाइंट के बारे में अपना ध्यान नहीं लेता, लेकिन एक ग्राहक के रूप में मैं * देखभाल करता हूं कि यह किस तरह का 500 है, क्योंकि कुछ अस्थायी समस्याओं का अर्थ है, कुछ विशिष्ट संसाधनों का अर्थ देते हैं, और कुछ का मतलब है कि पूरा ऐप दुर्घटनाग्रस्त हो गया है (500)। मैं समझता हूं कि 'अच्छा लग रहा है' के बारे में आपका क्या मतलब है, लेकिन जो मैं वास्तव में चिंतित हूं, वह मेरे ग्राहकों को सही जानकारी भेज रहा है ताकि वे इसे सही तरीके से संभाल सकें। – Paul

+0

क्या आप एक विशिष्ट परिदृश्य दे सकते हैं? किस तरह की सेवा अनुपलब्ध है और यह अनुपलब्ध क्यों है। आप उस मामले में क्लाइंट को वास्तव में क्या करना चाहते हैं। –

0

इसे और अधिक जो कुछ यू की तरह होना चाहिए है अपस्ट्रीम सेवा से प्राप्त करें, यदि इसकी 503: सेवा अनुपलब्ध है तो आप 503 लौटते हैं: सेवा 500 अनुपलब्ध है, तो आप 500

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