@ray, उत्कृष्ट चर्चा
@jgerman, यह मत भूलिए कि यह REST है, इसका मतलब यह नहीं है कि संसाधनों को POST से पत्थर में सेट किया जाना है।
किसी संसाधन के किसी दिए गए प्रतिनिधित्व में शामिल करने के लिए आप क्या चुनते हैं, यह आपके ऊपर है।
अलग से संदर्भित कवर का आपका मामला केवल एक मूल संसाधन (कॉमिक बुक) का निर्माण है, जिसके बाल संसाधन (कवर) को संदर्भित किया जा सकता है। उदाहरण के लिए, आप लेखकों, प्रकाशकों, पात्रों या श्रेणियों को अलग से संदर्भ प्रदान करना चाह सकते हैं। आप इन संसाधनों को अलग से या कॉमिक बुक से पहले बनाना चाह सकते हैं जो उन्हें बाल संसाधन के रूप में संदर्भित करता है। वैकल्पिक रूप से, आप मूल संसाधन के निर्माण पर नए बाल संसाधन बनाने की इच्छा कर सकते हैं।
कवर का आपका विशिष्ट मामला थोड़ा अधिक जटिल है कि एक कवर में वास्तव में एक कॉमिक बुक, और वीज़ा वर्सा की आवश्यकता होती है।
हालाँकि, यदि आप एक ईमेल संदेश को संसाधन के रूप में मानते हैं, और पते को बाल संसाधन के रूप में मानते हैं, तो आप स्पष्ट रूप से पते से अलग से संदर्भ ले सकते हैं। उदाहरण के लिए, सभी पते से प्राप्त करें। या, पते से पिछले के साथ एक नया संदेश बनाएं। यदि ईमेल REST था, तो आप आसानी से देख सकते हैं कि कई क्रॉस-संदर्भित संसाधन उपलब्ध हो सकते हैं: / प्राप्त-संदेश, / ड्राफ्ट-संदेश, / पते से, /-पते, / पते, / विषय, / संलग्नक, / फ़ोल्डर , / टैग, / श्रेणियां, / लेबल, एट अल।
यह ट्यूटोरियल क्रॉस-संदर्भित संसाधनों का एक शानदार उदाहरण प्रदान करता है।
http://www.peej.co.uk/articles/restfully-delicious.html
यह स्वचालित रूप से जनरेट किए गए डेटा के लिए सबसे सामान्य पैटर्न है। उदाहरण के लिए, आप नए संसाधन के लिए URI, ID, या निर्माण तिथि पोस्ट नहीं करते हैं, क्योंकि ये सर्वर द्वारा उत्पन्न होते हैं। और फिर भी, नए संसाधन वापस मिलने पर आप URI, ID, या निर्माण तिथि पुनः प्राप्त कर सकते हैं।
बाइनरी डेटा के आपके मामले में एक उदाहरण। उदाहरण के लिए, आप बाइनरी डेटा को बाल संसाधनों के रूप में पोस्ट करना चाहते हैं। जब आपको मूल संसाधन मिलते हैं तो आप उन बाल संसाधनों को एक ही बाइनरी डेटा के रूप में या यूआरआई के रूप में प्रस्तुत कर सकते हैं जो बाइनरी डेटा का प्रतिनिधित्व करते हैं।
प्रपत्र और पैरामीटर संसाधनों के HTML अभ्यावेदन से पहले से अलग हैं। बाइनरी / फ़ाइल पैरामीटर पोस्ट करना, जिसके परिणामस्वरूप URL में खिंचाव नहीं है।
जब आप किसी नए संसाधन (/ कॉमिक-बुक्स / नए) के लिए फॉर्म प्राप्त करते हैं, या किसी संसाधन (/ कॉमिक-बुक्स / 0 / एडिट) को संपादित करने के लिए फॉर्म प्राप्त करते हैं, तो आप संसाधन के एक फॉर्म-विशिष्ट प्रतिनिधित्व के लिए पूछ रहे हैं। यदि आप इसे सामग्री-प्रकार "एप्लिकेशन / x-www-form-urlencoded" या "मल्टीपार्ट / फॉर्म-डेटा" के साथ संसाधन संग्रह पर पोस्ट करते हैं, तो आप सर्वर से उस प्रकार के प्रतिनिधित्व को बचाने के लिए कह रहे हैं। सर्वर HTML प्रतिनिधित्व के साथ प्रतिक्रिया कर सकता है जो सहेजा गया था, या जो भी हो।
आप किसी HTML, XML या JSON रिप्रजेंटेशन के लिए रिसोर्स कलेक्शन पर पोस्ट करने की भी अनुमति दे सकते हैं, एक एपीआई या इसी तरह के प्रयोजनों के लिए।
आपके संसाधनों और वर्कफ़्लो का प्रतिनिधित्व करना भी संभव है जैसा कि आप वर्णन करते हैं, कॉमिक बुक के बाद पोस्ट कवर में लेते हैं, लेकिन कॉमिक पुस्तकों को कवर करने की आवश्यकता होती है। उदाहरण इस प्रकार है।
- विलंबित कवर निर्माण की अनुमति देता है
- आवश्यक कवर के साथ कॉमिक बुक निर्माण की अनुमति देता है
- कवरों को क्रॉस-रेफ़र किया जा सकता है
- कई कवर की अनुमति देता है
- ड्राफ्ट कॉमिक बुक बनाएं
- ड्राफ्ट कॉमिक बुक कवर बनाएं
- मसौदा कॉमिक बुक प्रकाशित करें
GET / कॉमिक-पुस्तकें
=> 200 ठीक, सभी कॉमिक पुस्तकें प्राप्त करें।
GET / कॉमिक-बुक्स / 0
=> 200 ओके, कवर (/ कवर / 1, / कवर / 2) के साथ कॉमिक बुक (आईडी: 0) प्राप्त करें।
GET / कॉमिक-बुक्स / 0 / कवर
=> 200 ओके, कॉमिक बुक के लिए कवर प्राप्त करें (आईडी: 0)।
प्राप्त / कवर
=> 200 ठीक है, सभी कवर प्राप्त करें।
जीईटी / कवर / 1
=> 200 ओके, कॉमिक बुक (/ कॉमिक-बुक्स / 0) के साथ कवर (आईडी: 1) प्राप्त करें।
GET / कॉमिक-बुक्स / नई
=> 200 ओके, कॉमिक बुक बनाने के लिए फॉर्म प्राप्त करें (फॉर्म: POST / ड्राफ्ट-कॉमिक-बुक्स)।
POST / ड्राफ्ट-कॉमिक-बुक्स
शीर्षक = foo
लेखक = बू
प्रकाशक = goo
प्रकाशित = २०११-०१-०१
= = ३०२ मिला, स्थान: / ड्राफ्ट-कॉमिक-बुक्स / ३, रीडायरेक्ट टू कॉमिक बुक (आईडी: ३) कवर (बाइनरी)।
GET / ड्राफ्ट-कॉमिक-बुक्स / 3
=> 200 ओके, कवर के साथ ड्राफ्ट कॉमिक बुक (id: 3) प्राप्त करें।
GET / ड्राफ्ट-कॉमिक-बुक्स / 3 / कवर
=> 200 ओके, ड्राफ्ट कॉमिक बुक (/ ड्राफ्ट-कॉमिक-बुक / 3) के लिए कवर प्राप्त करें।
GET / ड्राफ्ट-कॉमिक-बुक्स / 3 / कवर / न्यू
=> 200 ओके, ड्राफ्ट कॉमिक बुक (/ ड्राफ्ट-कॉमिक-बुक / 3) के लिए कवर बनाने के लिए फॉर्म प्राप्त करें (फॉर्म: POST / ड्राफ्ट-कॉमिक-बुक्स / 3 / कवर)।
POST / ड्राफ्ट-कॉमिक-बुक्स / 3 / कवर
cover_type = फ्रंट
कवर_data = (बाइनरी)
=> 302 मिला, स्थान: / ड्राफ्ट-कॉमिक-बुक्स / 3 / कवर, ड्राफ्ट कॉमिक बुक (ड्राफ्ट-कॉमिक) के लिए नए कवर पर रीडायरेक्ट -book / 3 / कवर / 1)।
GET / ड्राफ्ट-कॉमिक-बुक्स / 3 / पब्लिश
=> 200 ओके, ड्राफ्ट कॉमिक बुक (id: 3) (फॉर्म: POST / प्रकाशित-कॉमिक-बुक्स) प्रकाशित करने के लिए फॉर्म प्राप्त करें।
POST / प्रकाशित-कॉमिक-पुस्तकों का
शीर्षक = foo
लेखक = बू
प्रकाशक = goo
प्रकाशित = 2011-01-01
cover_type = front
cover_data = (बाइनरी)
=> 302 मिला, स्थान: / कॉमिक-पुस्तकें / 3, प्रकाशित कॉमिक बुक के लिए पुनर्निर्देशित (आईडी: 3) कवर के साथ।