2010-07-16 14 views
7

मैं एक पुराने रेल एप्लिकेशन का पुनर्लेखन कर रहा हूं और मैंने सोचा कि मुझे इसे एक यथार्थ तरीके से करना चाहिए, अगर सीखने का अनुभव कुछ और नहीं है।एक विश्वसनीय टॉगल-एक्शन लागू करने का सबसे अच्छा तरीका?

मैं कुछ क्रियाओं तक पहुंच गया हूं जो एक बूलियन मान को टॉगल करते हैं, उदाहरण के लिए यदि कोई आलेख प्रकाशित है या नहीं।

मेरे पास कुछ क्रियाएं होने से पहले: टॉगल_ प्रकाशित, प्रकाशित और अप्रकाशित।

वे उपयोग करने में बहुत आसान थे: मैंने अभी लेख सूची में उन्हें एक लिंक बनाया है।

आप एक ही चीज़ को एक सही तरीके से कैसे करेंगे?

क्या मुझे अद्यतन-क्रिया का उपयोग करना चाहिए, और प्रत्येक लिंक को प्रतिस्थापित करने के लिए मिनी-फॉर्म बनाना चाहिए जिसका मैंने पहले उपयोग किया था? मैं उस विचार की तरह कण नहीं है।

उत्तर

0

ऐसा लगता है कि आप दो उपयोग के मामलों है:

  • सेट प्रकाशित राज्य
  • टॉगल प्रकाशित स्थिति

आप के लिए टॉगल कार्रवाई के लिए एक सदस्य के मार्ग को जोड़ने के लिए सक्षम होना चाहिए:

/articles/<id>/toggle_published - calls Article.toggle(:published) 

और आलेख अद्यतन का उपयोग करें: मानक आरईएसटी आर के माध्यम से प्रकाशित विशेषता ईसोर्स मार्ग

map.resources :articles, :member => :toggle 
23

बस एक सूचना:

क्योंकि HTTP PUT क्रिया idempotent जा करने के लिए (ए.ओ. http://en.wikipedia.org/wiki/Idempotence#Examples देखें) माना जाता है एक टॉगल विधि, RESTful नहीं है। इसका मतलब है कि कोई फर्क नहीं पड़ता कि आप कितनी बार एक विधि निष्पादित करते हैं, इसे हमेशा एक ही परिणाम देना चाहिए। एक टॉगल विधि इस सिद्धांत का पालन नहीं करती है, क्योंकि यदि आप इसे दो बार निष्पादित करने की तुलना में इसे निष्पादित करते हैं तो यह वही परिणाम नहीं देता है।

यदि आप इसे रीस्टफुल करना चाहते हैं, तो आपको दो विधियां बनाना चाहिए: एक सेटिंग के लिए और एक को अनसेट करने के लिए।

एप्लिकेशन बनाना रीस्टफुल का मतलब यह नहीं है कि आपको सही HTTP क्रिया का उपयोग करना चाहिए।

9

मैं इसे किसी नेस्टेड "टॉगल संसाधन" पर पुट/डिलीट या पोस्ट/डिलीट के साथ हल कर दूंगा। शायद 100% पूरी तरह से आराम से नहीं बल्कि निश्चित रूप से समझने में काफी आसान है।

PUT or POST /articles/:id/published # Toggle published ON 

DELETE /articles/:id/published # Toggle published OFF 

GET /articles/:id/published # Get state RESTfully via status 200 (ON) or 404 (OFF) 

थोड़ा अजीब लग सकता है, लेकिन यह तकनीकी रूप से विश्वसनीय है।

अद्यतन: एक (शायद) अधिक प्राकृतिक दृष्टिकोण भी बस हो सकता है:

PATCH /articles/:id { published: true/false } 
:

PUT or POST /articles/:id/published Data: { state: true/false } # Toggle published ON 

तुम भी वास्तविक लेख जो मुझे लगता है एक published संपत्ति है साथ PATCH क्रिया इस्तेमाल कर सकते हैं

क्योंकि सभी अच्छे आरईएसटी बच्चे आजकल पैच का उपयोग कर रहे हैं।

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