@MichaelBurr idempotency और दुष्प्रभावों के बारे में सही है।
मेरी राय यह है कि दिए गए आरईएसटी अनुरोध, ग्राहक के राज्य और सर्वर के राज्य में शामिल 2 राज्य हैं। आरईएसटी इन राज्यों को सर्वर और क्लाइंट के बीच स्थानांतरित करने के बारे में है, जैसे क्लाइंट के राज्य मानचित्र सर्वर के राज्य के सबसेट में, दूसरे शब्दों में, सबसेट सर्वर के अनुरूप रहता है। उस बेवकूफता के कारण इसका मतलब यह होना चाहिए कि बाद के बेवकूफ अनुरोधों के परिणामस्वरूप राज्य अलग-अलग नहीं होगा, केवल एक बार अनुरोध करने से ही होगा। पहले डिलीट के साथ आप कल्पना करेंगे कि सर्वर संसाधन को हटा देता है और क्लाइंट को यह जानने देता है कि यह संसाधन को भी हटा सकता है (क्योंकि संसाधन "अब मौजूद नहीं है")। अब दोनों राज्यों को हटाए गए आइटम को घटाकर कम से कम होना चाहिए। क्लाइंट को कुछ भी अलग करने के लिए जब यह आइटम को पहले ही हटा दिया गया है, तो उसे हटाने की कोशिश करता है, तो सर्वर से सर्वर से स्थानांतरित होने वाली स्थिति में अलग-अलग जानकारी होनी चाहिए। सर्वर सूचनाओं के साथ कुछ अलग तरीके से काम कर सकता है कि संसाधन पहले ही हटा दिया गया था, लेकिन एक बार जब यह विधियों के कुछ अलग-अलग idempotency के साथ प्रतिक्रिया करता है तो अनिवार्य रूप से टूटा हुआ है।
idempotent समारोह के लिए:
delete(client_state) -> client_state - {item}
delete(delete(client_state)) -> client_state - {item}
delete(client_state) = delete(delete(client_state))
इस idempotency गारंटी करने के लिए सबसे अच्छा तरीका है अगर सर्वर की प्रतिक्रिया समान है, कि ग्राहक के राज्य को तोड़ने के लिए idempotency वहाँ के लिए गैर हो रहा है के लिए एक ही रास्ता का मतलब ग्राहक की प्रतिक्रिया के संचालन में निर्धारकता या दुष्प्रभाव (जो शायद प्रतिक्रिया को संभालने के गलत कार्यान्वयन को इंगित करता है)।
यदि ग्राहक और सर्वर के बीच कोई समझौता है कि स्टेटस कोड स्थानांतरित होने वाले राज्य के प्रतिनिधित्व (आरईएसटी) के बाहर मौजूद हैं, तो क्लाइंट को सूचित करना संभव है कि आइटम "अब मौजूद नहीं है" (जैसा कि पहले अनुरोध में होगा) अतिरिक्त टिप्पणी के साथ जिसे पहले हटा दिया गया था। इस जानकारी के साथ ग्राहक क्या करता है अस्पष्ट है, लेकिन यह परिणामी ग्राहक स्थिति को प्रभावित नहीं करना चाहिए। लेकिन फिर स्थिति कोड का उपयोग राज्य को संवाद करने के लिए नहीं किया जा सकता है, या यदि यह अन्य परिस्थितियों में राज्य को भी संवाद करता है (जैसे कि "आपको इस आइटम को हटाने की अनुमति नहीं है" या "आइटम हटाया नहीं गया था"), तो कुछ पेशाब अस्पष्टता या भ्रम है। इसलिए, संचार में अधिक भ्रम शुरू करने के लिए आपको कम से कम एक अच्छे कारण की आवश्यकता है यदि आप यह कहना चाहते हैं कि DELETE idempotent और अभी भी सर्वर की प्रतिक्रिया पिछले DELETE अनुरोधों पर निर्भर करती है जो समान हैं।
HTTP अनुरोध तरीकों को दूर करना शामिल है, तो समारोह के समान हो सकता है
delete(client_state) = send_delete(client_state) -> receive_delete(client_state)
-> respond_to_delete(informative_state)
-> handle_response(informative_state)
-> client_state - {item}
स्रोत
2012-10-22 18:58:01
आपके # 2 के साथ, मुझे लगता है कि आपको "हाल ही में" हटाने की हालियाता को इस प्रतिक्रिया की रणनीति के साथ कुछ भी नहीं करना चाहिए। –
@ जेफमार्टिन आप सही हैं, यह तथ्यात्मक से अधिक बातचीतत्मक था। हटा दिया। –