2013-10-05 5 views
118

तो यहां कुछ भी नया नहीं है, मैं बस कुछ स्पष्टीकरण प्राप्त करने की कोशिश कर रहा हूं और अन्य पदों में कोई भी नहीं ढूंढ सकता।आराम से पोस्ट प्रतिक्रिया के लिए 'बेस्ट' अभ्यास

मैं एक नया संसाधन बनाने रहा restulfully, कहते हैं:

/books (POST) 
एक शरीर के साथ

:

{ 
    title: 'The Lion, the Witch and the Wardrobe', 
    author: 'C. S. Lewis' 
} 

मुझे पता है कि मैं लौटाना चाहिए 201 नए का एक स्थान हेडर के साथ (बनाया गया) संसाधन:

Location: /books/12345 

सवाल मैं खुद के लिए जवाब देने के लिए नहीं कर पा रहे कि क्या करना चाहिए सर्वर वापसी है शरीर में। AngularJS की तरह सामने अंत चौखटे के लिए

  1. मैं लिखा है एपीआई:

    { 
        id: 12345, 
        title: 'The Lion, the Witch and the Wardrobe', 
        author: 'C. S. Lewis' 
    } 
    

    मैं एक जोड़े कारणों के लिए यह किया है:

    मैं अक्सर प्रतिक्रिया के इस प्रकार किया है। मेरे विशेष मामले में मैं कोणीय संसाधनों का उपयोग कर रहा हूं और मुझे अक्सर इसे खोजने के लिए संसाधन के लिए आईडी की आवश्यकता होती है। अगर मैंने में आईडी को वापस नहीं किया है तो प्रतिक्रिया निकाय को मुझे शीर्षलेख से बाहर निकालना होगा।

  2. सभी पुस्तकों के एक समूह में मैं आमतौर पर पूरे ऑब्जेक्ट को आईडी पर वापस नहीं करता हूं। इस अर्थ में मेरे क्लाइंट कोड को को अलग करने की आवश्यकता नहीं है, जहां से आईडी प्राप्त करें (स्थान शीर्षलेख या शरीर)।

अब मुझे पता है कि मैं वास्तव में भूरे रंग के क्षेत्र में हूं, लेकिन ज्यादातर लोग कह रहे हैं कि पूरे संसाधन को वापस करना 'बुरा' अभ्यास है। लेकिन क्या होगा यदि सर्वर संसाधन में जानकारी बदलता/जोड़ता है। यह निश्चित रूप से आईडी जोड़ता है, लेकिन टाइमस्टैम्प जैसी अन्य चीजें भी जोड़ सकता है। अगर मैं पूरे संसाधन को वापस नहीं लौटाता हूं, तो क्या यह वास्तव में एक पोस्ट करना बेहतर है, आईडी वापस कर दें, फिर ग्राहक को नया संसाधन प्राप्त करने के लिए एक GET निष्पादित करें।

उत्तर

70

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

मुझे आपके प्रारंभिक पोस्ट के साथ प्राप्त डेटा प्राप्त करने के लिए, वास्तव में केवल आईडी को वापस करने और GET अनुरोध करने के लिए कोई लाभ नहीं दिखता है।

वैसे भी जब तक आपका एपीआई सुसंगत है, मुझे लगता है कि आपको वह पैटर्न चुनना चाहिए जो आपकी आवश्यकताओं को सर्वोत्तम तरीके से फिट करे। एक आरईएसटी एपीआई, आईएमओ बनाने का कोई सही तरीका नहीं है।

+15

मुझे पता है कि यह पुराना है, लेकिन मैं आपके पोस्ट के बाद जीईटी का उपयोग करने के लिए एक ठोस तर्क दे सकता हूं। Http/1.1 spec में कोई भी ऐतिहासिक उपकरण आपके जीईटी प्रतिक्रिया से वापस कैश सेटिंग्स को अनदेखा कर सकता है ... इसलिए यदि आपका उपयोगकर्ता ब्राउज़र में बैक बटन का उपयोग करता है तो इसे पोस्ट के साथ अपडेट करने के बाद इस पृष्ठ पर वापस लौटने के लिए यह स्टेल का उपयोग कर सकता है मूल जीईटी से कैश डेटा। तो यदि आप जीईटी का पुन: उपयोग करते हैं तो आप कैश को अपडेट कर सकते हैं और जब पेज छोड़ा गया तो पेज को कैसे देखा जाता है, तो बेहतर स्नैपशॉट प्राप्त कर सकते हैं ... – Shaded

+1

@Shaded यदि एपीआई ऐप्स द्वारा भी उपयोग किए जाने के लिए डिज़ाइन किया गया है, तो दो अनुरोध करने के लिए आपका तर्क पकड़ नहीं है वहां, आप आमतौर पर मेमोरी में मॉडल प्रकार की वस्तुओं को रखकर डेटा कैश करते हैं - जो आम तौर पर POST अनुरोधों के उत्तर के साथ किया जाता है। और ब्राउज़र के संबंध में, POST अनुरोध पर प्रतिक्रिया वास्तव में इतनी देर तक चोट नहीं पहुंची है क्योंकि अभी भी एक एपीआई एंडपॉइंट है। – Dschee

101

नई वस्तु को लौटाना "समान इंटरफ़ेस - प्रतिनिधित्व के माध्यम से संसाधनों का कुशलता" के आरईएसटी सिद्धांत के साथ फिट बैठता है। पूर्ण वस्तु उस वस्तु के नए राज्य का प्रतिनिधित्व है जो बनाया गया था।

एपीआई डिजाइन के लिए एक बहुत उत्कृष्ट संदर्भ है, यहाँ है: Updates & creation should return a resource representation

इसे कहते हैं:

से एक API उपभोक्ता को रोकने के लिए Best Practices for Designing a Pragmatic RESTful API

यह आपके प्रश्न का उत्तर का उत्तर भी शामिल अद्यतन प्रतिनिधित्व के लिए फिर से एपीआई को हिट करने के लिए, एपीआई प्रतिक्रिया के हिस्से के रूप में अद्यतन (या बनाया गया) प्रतिनिधित्व वापस कर देता है।

मेरे लिए अच्छी तरह से व्यावहारिक लगता है और यह ऊपर बताए गए उस आरईएसटी सिद्धांत के साथ फिट बैठता है।

+2

प्रासंगिक वस्तुओं के पूरे सेट को वापस करने के बारे में कैसे? इस तरह, संभव सॉर्टिंग सर्वर-साइड किया जा सकता है, और यह फ्रंट एंड कार्यान्वयन को आसान बनाता है – Blauhirn

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