2010-02-22 16 views
12

मुझे पता है कि आरईएसटी संसाधन-उन्मुख होने का मतलब है, जो मानक HTTP विधियों का उपयोग करके इन संसाधनों पर लगभग सीआरयूडी संचालन का अनुवाद करता है। लेकिन क्या मैं संसाधन के भाग को अपडेट करना चाहता था?रीस्टफुल सेवाएं और अपडेट ऑपरेशंस

उदाहरण के लिए, मान लीजिए कि मेरे पास Payment संसाधन है और मैं अपनी स्थिति को "paid" के रूप में चिह्नित करना चाहता हूं। मैं POST को पूरे Payment HTTP के माध्यम से ऑब्जेक्ट नहीं करना चाहता (कभी-कभी मेरे पास सभी डेटा भी नहीं होते)।

ऐसा करने का सबसे अच्छा तरीका क्या होगा? मैंने देखा है कि ट्विटर updating Twitter statuses के लिए निम्नलिखित दृष्टिकोण का उपयोग करता:

http://api.twitter.com/1/statuses/update.xml?status=playing with cURL and the Twitter API 

बाकी की "आत्मा" में इस दृष्टिकोण है?

अद्यतन: डालें -> पोस्ट

कुछ लिंक मैं इस बीच में पाया:

+0

कि "पुट अपडेट नहीं है" आलेख जो आपके द्वारा लिंक किया गया है, इसमें एक महत्वपूर्ण एसक्यूएल स्लंट है। अपने एंडपॉइंट्स को बदलने से पहले टिप्पणियां पढ़ें। – gmoore

उत्तर

9

ऐसा करने का आदर्श तरीका संसाधन का एक हिस्सा (उप संसाधन) को बदलना है और सर्वर को 303 लौटाएं अन्य स्थान संसाधन के साथ स्थानांतरित करने के लिए स्थान शीर्षलेख के साथ देखें। 303 अन्य क्लाइंट को बताता है कि अनुरोध के परिणामस्वरूप कुछ अन्य संसाधन बदल गए हैं और क्लाइंट को उस प्रतिनिधित्व को अपडेट करना चाहिए जो उसके पास है।

अपने उदाहरण में (मीडिया प्रकार निश्चित रूप से काल्पनिक,):

 
1. Client retrieves payment representation 
GET /payments/2 

200 Ok 
Content-Type: application/payment+xml 

<payment> 
    <status href="/payments/2/status" value="pending"/> 
</payment> 

2. Client updates status 
PUT /payments/2/status 
Content-Type: text/plain 

payed 

303 See Other 
Location: /payments/2 

3. Client follows the 303 redirect 
GET /payments/2 

200 Ok 
Content-Type: application/payment+xml 

<payment> 
    <status href="/payments/2/status" value="payed"/> 
</payment> 

+0

@ जेन, हाँ, अब जब मैंने रीस्ट पुट/पोस्ट लेख में अधिक जानकारी प्राप्त की है, मुझे लगता है कि मैं अवधारणा को समझता हूं। –

-1

मुझे लगता है, वो क्या है पोस्ट I एस के लिए: 'यूआर' 'सीआरयूडी' में।

आप किसी मौजूदा संसाधन को डेटा पोस्ट करते हैं। संसाधन निर्णय लेता है कि इसके साथ क्या किया जाए, और अपडेट हो जाए। साथ ही, POST डेटा केवल संपूर्ण संसाधन का एक टुकड़ा हो सकता है।

ट्विटर का दृष्टिकोण IMHO विश्वसनीय नहीं है, क्योंकि वे अधिभार प्राप्त करते हैं।

+0

बोल्डविन, मैंने सोचा कि पुट अपडेट के लिए है। ऐसा लगता है कि इसके बारे में भ्रम है: विकिपीडिया एक बात कहता है (http: //en.wikipedia।संगठन/विकी/Representational_State_Transfer # RESTful_web_services), और अन्य आवाजें हैं (http://16cards.com/2007/03/10/the-cafes-put-is-not-update/)। टुकड़े: इसका मतलब है कि एक्सएसडी को किसी अनिवार्य सामान को लागू नहीं करना चाहिए (प्राथमिक कुंजी को छोड़कर)? –

+3

पुट और पोस्ट का मतलब HTTP spec में लिखा गया है। न आधिक न कम। PUT का अर्थ है 'इस राज्य के साथ संसाधन की मौजूदा स्थिति को प्रतिस्थापित करें' और POST का मतलब है 'इसे संसाधित करें (अपनी प्रकृति के अनुसार)'। आप * उप-संसाधन (जैसे POST/भुगतान/2/पोस्ट-ऑन) पर POST के साथ आंशिक अपडेट कर सकते हैं लेकिन आपको सभी पेलोड प्रकारों को परिभाषित करने की आवश्यकता है। 303 दृष्टिकोण के साथ पुट आसान है। –

+1

ट्विटर का एपीआई रीस्टफुल नहीं है क्योंकि यह मीडिया प्रकार सेमेन्टिक्स का उपयोग नहीं करता है लेकिन उपलब्ध संसाधनों और संचालन का एक स्थिर विवरण प्रदान करता है। वह आरईएसटी नहीं है (जिसका मतलब यह नहीं है कि यह उपयोगी नहीं है)। अद्यतन को पोस्ट की आवश्यकता होती है, इसलिए कम से कम मुझे परिवर्तन ऑपरेशन के लिए साइड इफेक्ट फ्री विधि (जीईटी) का उपयोग करके ट्विटर नहीं दिखाई देता है। –

3

पोस्ट एक संसाधन

संपादित संशोधित करने के लिए इस्तेमाल किया जाना चाहिए: मार्टिन Fowler के लेख Richardson Maturity Model आराम एक बहुत अच्छा परिचय है।

+0

@ डोमिनिक, वास्तव में यह उससे थोड़ा अधिक जटिल है। प्रश्न में मैंने जो लिंक जोड़े हैं, उन्हें देखें। –

0

क्या पैच के साथ गलत क्या है? "आंशिक संशोधन" समस्या इसके लिए कॉल करने लगती है, विशेष रूप से इस बात पर विचार करते हुए कि कभी-कभी आपको "इसे प्रतिस्थापित करने" के लिए आवश्यक सभी डेटा नहीं मिलते हैं ... लेकिन ईमानदारी से, मुझे "POST = create" का पालन करने में कोई बात नहीं दिखाई देती है, PUT = प्रतिस्थापित करें, पैच = अपडेट करें "धार्मिक रूप से दर्शन, और मुझे केवल पोस्ट का उपयोग करने में कुछ भी गलत नहीं लगता है।

+0

पैच के साथ एक विशेष वाक्यविन्यास है। अधिक जानकारी के लिए [लंबित JSON पैच आईईटीएफ मानक] (http://tools.ietf.org/html/rfc6902) देखें। –

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