2013-05-30 4 views
5

मैं अपने स्वयं के एपीआई के आसपास एक परियोजना का निर्माण कर रहा हूं, और सब कुछ ठीक काम करता है, लेकिन मैं DELETE के लिए UNDO क्रियाएं प्रस्तुत करना चाहता हूं।एक हटाए गए कार्य को पूर्ववत करने और रीस्टफुल मानकों का सम्मान कैसे करें?

DELETE/संपर्क /:

अब तक, हटाने कि जिस तरह से काम करता है आईडी

हालांकि

मेरे प्रारंभिक के लिए पूर्ववत कॉल करने के लिए एक ही यूआरएल पर एक ही हटाएँ, जो हटाए राज्य (रद्द करना चाहते है यदि यह संपर्क हटाए गए राज्य में है), लेकिन मुझे कोई अच्छा विचार नहीं है कि यह एक अच्छा तरीका है या नहीं।

मैं this post पढ़ता हूं जो समान दिखता है, लेकिन "चेकआउट" भाग मुझे जो कुछ ढूंढ रहा है उससे कुछ और जवाब देता है।

क्या मेरा सुझाव अच्छा है या क्या कोई बेहतर तरीका है?

आपकी मदद के लिए धन्यवाद।

उत्तर

5

आप किसी संसाधन संसाधन को DELETE अनुवर्ती अनुरोधों का उपयोग कर लौटना चाहिए वहाँ नहीं रह गया है एक संसाधन है 404 NOT FOUND या 410 GONE क्योंकि वहाँ अनुरोधों को स्वीकार करने निकाल दी है तो।

यदि स्वीकार्य है और आपके पास राज्य उपलब्ध है, तो सबसे आसान जवाब है कि हटाए गए संसाधन के URL पर PUT जारी करके संसाधन को फिर से बनाएं। अर्थात् यह किसी भी मौजूदा राज्य को बदलकर, एक नया संसाधन बनाता है, वास्तव में हटाए जाने से पूर्ववत नहीं करता है।

एक और आसान समाधान यह मानना ​​है कि आप वास्तव में संसाधनों को हटा नहीं रहे हैं और यह दिखाने के लिए कि वे संग्रहीत हैं, केवल कुछ ही तरीके से अपना राज्य बदल सकते हैं। इसका मतलब है कि आप DELETE क्रिया का उपयोग नहीं कर सकते हैं लेकिन आप संग्रहीत और सक्रिय राज्यों के बीच संसाधन को बदलने के लिए PUT या POST अनुरोध जारी कर सकते हैं।

GET /contacts/<id>?show-archived=true 

एक पर इस निर्दिष्ट करना:

आप DELETE रिकॉर्ड को हटाने के अपने साधन के रूप में संरक्षित करने के लिए चाहते हैं, तो एक विकल्प यह एक विशेष show-archived मूल्य के प्रयोग से एक संग्रहीत संसाधन का उपयोग करने के लिए संभव बनाने के लिए है संग्रहीत संसाधन कोडों में से किसी एक के बजाय संग्रहीत संसाधन पर 200 लौटाएगा। यह थोड़ा मजेदार है, क्योंकि आपके संसाधनों में अब मौजूद होने के लिए "सुपरस्टेट" समस्या है और आप इन्हें कैसे देखते हैं इसके आधार पर मौजूद नहीं हैं। हालांकि यह मतलब है कि आप अपने राज्य को अद्यतन करने के संसाधन के लिए अनुरोध कर सकते हैं:

PUT /contacts/<id>?show-archived=true 

State=Active 
... all other unchanged fields ... 
+1

+1 के लिए धन्यवाद - एक और मामूली बदलाव एक पैच है क्योंकि आप तर्कसंगत रूप से संसाधन का हिस्सा अपडेट कर रहे हैं (इस मामले में, यह हटाया गया/संग्रहीत राज्य) – bryanmac

+0

'पैच 'होगा इस प्रकार के अनुरोध के लिए बहुत उपयुक्त हो, हालांकि इसके लिए समर्थन भिन्न होता है; यह HTTP क्रिया परिवार के लिए काफी नया है। –

1

मैं व्यक्तिगत रूप से संसाधन से अधिक UNDO DELETE एक PUT होगा अगर deletion state प्रतिनिधित्व का हिस्सा है, या एक action पर एक POST अगर नहीं है।

action कुछ ऐसी दिखाई देगी:

POST /contact/id/action/[recover|reactivate] (or whatever you think is more descriptive for the action). 

लेकिन यह अभी जिस तरह मुझे लगता है कि सबसे RESTFul अनुरूप है।

+0

जाहिर है, यह agains't शोकहारा मानकों के URL में क्रियाओं का उपयोग करें।क्रियाएं केवल –

+0

विधि में प्रस्तुत की जानी चाहिए आपकी टिप्पणी – ssedano

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