मैं सोच रहा था कि लोगों की राय एक रेस्टफुल PUT
ऑपरेशन के बारे में क्या है जो रिस्पांस बॉडी में कुछ भी नहीं देता है।
मैं सोच रहा था कि लोगों की राय एक रेस्टफुल PUT
ऑपरेशन के बारे में क्या है जो रिस्पांस बॉडी में कुछ भी नहीं देता है।
जवाबों:
HTTP विनिर्देशन ( RFC 2616 ) में कई सिफारिशें हैं जो लागू हैं। यहाँ मेरी व्याख्या है:
200 OK
एक मौजूदा संसाधन के लिए एक अद्यतन के सफल PUT के लिए HTTP स्थिति कोड । कोई प्रतिक्रिया शरीर की जरूरत है। ( धारा 9.6 के अनुसार , 204 No Content
और भी अधिक उपयुक्त है।)201 Created
एक नए संसाधन के सफल PUT के लिए HTTP स्थिति कोड , स्थान शीर्षलेख क्षेत्र में लौटे नए संसाधन के लिए सबसे विशिष्ट URI के साथ और प्रतिक्रिया शरीर में किसी भी अन्य प्रासंगिक URI और संसाधन के मेटाडेटा गूँजते हैं। ( RFC 2616 धारा 10.2.2 )409 Conflict
PUT के लिए HTTP स्थिति कोड जो कि 3 rd -party संशोधन के कारण असफल है , प्रयास किए गए अद्यतन और प्रतिक्रिया शरीर में वर्तमान संसाधन के बीच अंतर की सूची के साथ। ( RFC 2616 धारा 10.4.10 )400 Bad Request
प्रतिक्रिया शरीर में प्राकृतिक-भाषा पाठ (जैसे अंग्रेजी) के साथ एक असफल PUT के लिए HTTP स्थिति कोड बताता है कि PUT विफल क्यों हुआ। ( RFC 2616 धारा 10.4 )No response body needed
एक 200 के संबंध में उल्लेख करता है। वास्तव में प्रतिक्रिया शरीर का उल्लेख एक PUT के संबंध में बिल्कुल नहीं है। यह केवल कहा गया हैIf an existing resource is modified, either the 200 (OK) or 204 (No Content) response codes SHOULD be sent to indicate successful completion of the request.
यहाँ अधिकांश उत्तरों के विपरीत, मुझे वास्तव में लगता है कि PUT को अपडेटेड रिसोर्स (HTTP कोड ऑफ़ कोर्स के अलावा) वापस करना चाहिए।
पीयूटी ऑपरेशन के लिए प्रतिक्रिया के रूप में आप संसाधन क्यों लौटाना चाहेंगे इसका कारण यह है कि जब आप सर्वर को संसाधन प्रतिनिधित्व भेजते हैं, तो सर्वर इस संसाधन के लिए कुछ प्रसंस्करण भी लागू कर सकता है, इसलिए ग्राहक जानना चाहेंगे कि यह संसाधन कैसे करता है अनुरोध सफलतापूर्वक पूरा होने के बाद देखें। (अन्यथा इसे एक और GET अनुरोध जारी करना होगा)।
मुझे लगता है कि सर्वर के लिए PUT के जवाब में सामग्री लौटाना संभव है। यदि आप एक प्रतिक्रिया आवरण प्रारूप का उपयोग कर रहे हैं जो साइडलोड किए गए डेटा (जैसे कि एम्बर-डेटा द्वारा खपत प्रारूप) की अनुमति देता है, तो आप अन्य वस्तुओं को भी शामिल कर सकते हैं जिन्हें डेटाबेस ट्रिगर के माध्यम से संशोधित किया गया है, आदि (साइडलोड डेटा को कम करने के लिए स्पष्ट रूप से है # अनुरोधों का, और यह अनुकूलन करने के लिए एक ठीक जगह जैसा लगता है।)
अगर मैं सिर्फ PUT को स्वीकार करता हूं और वापस रिपोर्ट करने के लिए कुछ भी नहीं है, तो मैं बिना किसी शरीर के साथ स्थिति कोड 204 का उपयोग करता हूं। यदि मेरे पास रिपोर्ट करने के लिए कुछ है, तो मैं स्थिति कोड 200 का उपयोग करता हूं, और एक निकाय शामिल करता हूं।
HTTP / 1.1 कल्पना (खंड 9.6) उचित प्रतिक्रिया / त्रुटि कोड चर्चा करता है। हालाँकि यह प्रतिक्रिया सामग्री को संबोधित नहीं करता है।
आप क्या उम्मीद करेंगे? एक सरल HTTP प्रतिक्रिया कोड (200 आदि) मुझे सीधा और अस्पष्ट लगता है।
यदि REST API का बैकएंड SQL रिलेशनल डेटाबेस है, तो
यदि आप खोए हुए अपडेट की परवाह नहीं करते हैं, या यदि आप अपने ग्राहकों को PUT के तुरंत बाद GET करने के लिए बाध्य करना चाहते हैं, तो PUT से कुछ भी वापस न करें।
ग्राहक द्वारा नए बनाए गए संसाधन को खोजने के लिए "स्थान" शीर्षक के साथ "बनाया गया" के लिए 201 का Http प्रतिक्रिया कोड।
मैंने अपनी सेवाओं में RESTful API का उपयोग किया, और यहाँ मेरी राय है: पहले हमें एक आम दृश्य के लिए जाना चाहिए PUT
used का उपयोग किसी संसाधन को बनाने या प्राप्त करने के लिए अद्यतन करने के लिए किया जाता है।
मैंने संसाधनों को इसके साथ परिभाषित किया: Stateless resource
और Stateful resource
:
स्टेटलेस संसाधन इन संसाधनों के लिए, बस खाली शरीर के साथ HttpCode को वापस करें, यह पर्याप्त है।
स्टेटफुल रिसोर्स उदाहरण के लिए: संसाधन का संस्करण। इस तरह के संसाधनों के लिए, आपको जब आप इसे बदलना चाहते हैं, तो आपको संस्करण प्रदान करना होगा, इसलिए पूर्ण संसाधन लौटाएं या ग्राहक को संस्करण लौटाएं, इसलिए ग्राहक को अद्यतन कार्रवाई के बाद एक अनुरोध भेजने की आवश्यकता नहीं है।
लेकिन , एक सेवा या प्रणाली के लिए, रखने के यहsimple
,clearly
,easy to use and maintain
सबसे महत्वपूर्ण बात है।
जैसे एक रिक्त अनुरोध निकाय GET अनुरोध के मूल उद्देश्य के अनुसार है और खाली प्रतिक्रिया निकाय PUT अनुरोध के मूल उद्देश्य के अनुसार है।
ठीक लगता है ... हालांकि मुझे लगता है कि सफलता / विफलता / समय पोस्ट / # बाइट्स प्राप्त / आदि का एक अल्पकालिक संकेत होगा। बेहतर होगा।
संपादित करें: मैं डेटा अखंडता और / या रिकॉर्ड-कीपिंग की तर्ज पर सोच रहा था; मेटाडेटा जैसे कि MD5 हैश या टाइमस्टैम्प प्राप्त समय के लिए बड़े डेटाफ़ाइल्स के लिए सहायक हो सकता है।
HTTP प्रतिक्रिया के हेडर और बॉडी में अंतर होता है। PUT को कभी भी एक निकाय नहीं लौटाना चाहिए, लेकिन शीर्ष लेख में एक प्रतिक्रिया कोड अवश्य देना चाहिए। बस 200 का चयन करें यदि यह सफल था, और यदि नहीं तो 4xx। अशक्त रिटर्न कोड जैसी कोई चीज नहीं है। तुम ऐसा क्यों करना चाहते हो?
200
PUT, DELETE, या किसी अन्य विधि के उपयोग के बारे में बताते हैं । क्या मैं कुछ भुल गया? जैसे कि मोज़िला W3 और IETF का बॉस बन रहा है? ;) या हो सकता है कि उन्होंने कभी पोस्टेल के रोबस्टनेस सिद्धांत के बारे में नहीं सुना हो।