आर बाकी हिस्सों में संसाधन के लिए खड़ा है
(यह सच नहीं है, क्योंकि यह प्रतिनिधि के लिए खड़ा है, लेकिन यह REST में संसाधनों के महत्व को याद रखने के लिए एक अच्छी चाल है)।
के बारे में PUT /groups/api/v1/groups/{group id}/status/activate
: आप "सक्रिय" अपडेट नहीं कर रहे हैं । एक "सक्रिय" एक चीज नहीं है, यह एक क्रिया है। क्रिया कभी अच्छे संसाधन नहीं होते हैं। अंगूठे का एक नियम: यदि क्रिया, क्रिया, URL में है, तो यह संभवतः RESTful नहीं है ।
आप इसके बजाय क्या कर रहे हैं? या तो आप किसी समूह पर "जोड़ना", "हटाना" या " सक्रिय करना" सक्रिय कर रहे हैं, या यदि आप चाहें तो: किसी समूह पर "स्थिति" -resource में हेरफेर कर रहे हैं। व्यक्तिगत रूप से, मैं "सक्रियण" का उपयोग करूंगा क्योंकि वे अवधारणा "स्थिति" से कम अस्पष्ट हैं: स्थिति बनाना अस्पष्ट है, सक्रियण बनाना नहीं है।
POST /groups/{group id}/activation
सक्रियण बनाता है (या निर्माण का अनुरोध करता है)।
PATCH /groups/{group id}/activation
किसी मौजूदा सक्रियण के कुछ विवरण अपडेट करता है। चूंकि एक समूह में केवल एक ही सक्रियण होता है, हम जानते हैं कि हम किस सक्रियता-संसाधन का उल्लेख कर रहे हैं।
PUT /groups/{group id}/activation
पुरानी सक्रियता को सम्मिलित करता है या प्रतिस्थापित करता है। चूंकि एक समूह में केवल एक ही सक्रियण होता है, हम जानते हैं कि हम किस सक्रियता-संसाधन का उल्लेख कर रहे हैं।
DELETE /groups/{group id}/activation
सक्रियण को रद्द या हटा देगा।
यह पैटर्न तब उपयोगी होता है जब किसी समूह के "सक्रियण" के दुष्प्रभाव होते हैं, जैसे भुगतान किए जा रहे हैं, मेल भेजे जा रहे हैं और इसी तरह। केवल POST और PATCH के ऐसे दुष्प्रभाव हो सकते हैं। जब उदाहरण के लिए एक सक्रियण को हटाने की आवश्यकता होती है, तो उपयोगकर्ताओं को मेल पर सूचित करें, DELETE सही विकल्प नहीं है; उस मामले में आप शायद करना चाहते हैं एक छोड़ना संसाधन बना : POST /groups/{group_id}/deactivation
।
इन दिशानिर्देशों का पालन करना एक अच्छा विचार है, क्योंकि यह मानक अनुबंध आपके ग्राहकों के लिए बहुत स्पष्ट करता है, और ग्राहक और आपके बीच की सभी प्रॉक्सी और परतें जानती हैं कि यह कब सुरक्षित है, और कब नहीं। मान लें कि क्लाइंट कहीं फ्लैकी वाईफाई के साथ है, और उसका उपयोगकर्ता "निष्क्रिय" पर क्लिक करता है, जो कि ट्रिगर करता है DELETE
: यदि वह विफल रहता है, तो ग्राहक बस 404, 200 या कुछ और जब तक इसे संभाल सकता है, तब तक पुन: प्रयास कर सकता है। लेकिन अगर यह ट्रिगर करता है तो POST to deactivation
यह पता नहीं है कि फिर से प्रयास न करें: POST इसका अर्थ है।
अब किसी भी क्लाइंट के पास एक अनुबंध है, जिसका पालन करने पर, "आपके समूह को निष्क्रिय कर दिया गया है" 42 ईमेल भेजने से रक्षा करेगा, केवल इसलिए कि इसका HTTP- पुस्तकालय बैकएंड पर कॉल को पुनः प्राप्त करता रहा।
एकल विशेषता को अद्यतन करना: PATCH का उपयोग करें
PATCH /groups/{group id}
मामले में आप एक विशेषता को अद्यतन करना चाहते हैं। उदाहरण के लिए "स्थिति" समूह पर एक विशेषता हो सकती है जिसे सेट किया जा सकता है। "स्टेटस" जैसी एक विशेषता अक्सर मूल्यों के श्वेतसूची में सीमित करने के लिए एक अच्छा उम्मीदवार है। कुछ अपरिभाषित JSON-योजना के उदाहरणों का उपयोग करें:
PATCH /groups/{group id} { "attributes": { "status": "active" } }
response: 200 OK
PATCH /groups/{group id} { "attributes": { "status": "deleted" } }
response: 406 Not Acceptable
संसाधन की जगह, साइड-इफेक्ट्स के बिना PUT का उपयोग करें।
PUT /groups/{group id}
मामले में आप एक पूरे समूह को बदलना चाहते हैं। यह जरूरी नहीं है कि सर्वर वास्तव में एक नया समूह बनाता है और पुराने को बाहर फेंकता है, जैसे आईडी समान हो सकते हैं। लेकिन ग्राहकों के लिए, यह वही है जो PUT का मतलब हो सकता है: ग्राहक को यह मान लेना चाहिए कि उसे सर्वर की प्रतिक्रिया के आधार पर एक पूरी तरह से नया आइटम मिल सकता है।
ग्राहक को PUT
अनुरोध के मामले में , हमेशा पूरे संसाधन भेजना चाहिए, एक नया आइटम बनाने के लिए आवश्यक सभी डेटा: आमतौर पर POST-create के समान डेटा की आवश्यकता होगी।
PUT /groups/{group id} { "attributes": { "status": "active" } }
response: 406 Not Acceptable
PUT /groups/{group id} { "attributes": { "name": .... etc. "status": "active" } }
response: 201 Created or 200 OK, depending on whether we made a new one.
एक बहुत ही महत्वपूर्ण आवश्यकता यह है कि PUT
यह एक आदर्श है : यदि आपको समूह को अपडेट करते समय साइड-इफेक्ट्स की आवश्यकता होती है (या सक्रियण बदलते हुए), तो आपको उपयोग करना चाहिए PATCH
। इसलिए, जब अपडेट मेल में भेजते हैं, तो उपयोग न करें PUT
।