2010-05-28 19 views
14

मैं एक संसाधनसबसे अच्छा अभ्यास परिणाम

/system/resource 

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

/system/resource/related/otherresourcename 

मुझे लगता है कि यह या तो सच या गलत हो। क्या किसी के पास इस प्रकार की बातचीत के लिए सर्वोत्तम अभ्यास उदाहरण हैं?

संभावनाएं है कि मेरे दिमाग में आते हैं:

  • HTTP स्थिति कोड, कोई लौटे शरीर का उपयोग (बदबू आ रही है गलत)

  • वापसी सादा पाठ स्ट्रिंग (यह सच है, झूठी, 1, 0) - सुनिश्चित नहीं हैं कि स्ट्रिंग मान का उपयोग करने के लिए उपयुक्त हैं, और इसके अलावा इस लौटने सादा पाठ स्वीकार मीडिया प्रकार अनदेखी और हमेशा किया जा रहा है

  • मेरे प्रत्येक समर्थन मीडिया प्रकार के लिए एक बूलियन ऑब्जेक्ट के साथ आते हैं और उचित प्रकार (एक बूलियन परिणाम, एक एकल बूलियन फ़ील्ड वाला एक्सएमएल दस्तावेज़) के साथ एक JSON दस्तावेज़ लौटाते हैं। हालांकि यह अनावश्यक लगता है।

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

+0

क्या आप टैग को कम भ्रमित और अधिक विशिष्ट बना सकते हैं? – WhirlWind

+0

हां, क्षमा करें - वास्तव में यह नहीं पता था कि प्रश्न को किस प्रकार टैग करना है। मैं इसे विशेष रूप से एमवीसी.NET के साथ कर रहा हूं, लेकिन सवाल निश्चित रूप से किसी भी आरईएसटी सिस्टम पर लागू है? –

उत्तर

3

मुझे लगता है कि लौटने वाला टेक्स्ट/सादा सबसे साफ विकल्प होगा। जहां तक ​​स्वीकृति हेडर का संबंध है, यदि ग्राहक वास्तव में टेक्स्ट सादा को संभाल नहीं सकता है, तो आप जेसन, या एक्सएमएल पर वापस जा सकते हैं।
व्यक्तिगत रूप से, मैं "सत्य" और "झूठी" तारों का उपयोग करता हूं। अधिकतर ग्राहक भाषाएं उन तारों को उनके उचित मूल्य पर पार्स कर सकती हैं।

+0

मैं इस बात से सहमत हूं कि वे टेक्स्ट प्लान को संभाल नहीं सकते हैं, लेकिन बाकी एपीआई में वे केवल एक ही स्वीकार्य प्रकार का उपयोग करके दूर हो सकते हैं - यानी मेरे बहुत सारे परीक्षण में मैं restclient का उपयोग करता हूं और बस स्वीकार करता हूं आवेदन/json। उस मामले में मुझे वास्तव में लपेटा हुआ बूलियन JSON वापस नहीं करना है? –

+0

हाँ, http: // tools.ietf.org/html/rfc2616 # सेक्शन -14.1' के अनुसार यदि आपका ग्राहक यह नहीं कहता कि यह टेक्स्ट/सादा का समर्थन करता है तो आपको इसे नहीं भेजना चाहिए। –

5

हम्म, जवाब देने में मुश्किल (आपका उदाहरण मेरे लिए थोड़ा सा सार है)।

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

HTTP कॉल के रूप में

डिजाइन आदेश राज्य: HTTP GET /orders

आप वापस देना होगा 200 पेलोड के साथ ठीक (json प्रारूप): संसाधन के रूप में { id : "1" , completed : "true" }

डिजाइन आदेश राज्य

HTTP कॉल: HTTP GET or HEAD /orders/completed/1

अब आप अपने "बूलियन" जवाब पाने के लिए आप देख सकते हैं कि HTTP प्रतिक्रिया स्थिति था 404 या 200 400 कहते थे आदेश अभी तक पूर्ण नहीं है, 200 कहते थे यह पूरा हो गया है।

आपको और अधिक विशिष्ट बनाने के लिए, आपको "बूलियन प्रश्न" का विवरण क्या है? वास्तविक संसाधन और संबंधित संसाधन क्या है?

+0

मैनुअल, आपकी विचारशील टिप्पणियों के लिए धन्यवाद। कल्पना कीजिए कि हमारे पास संसाधन 'जॉन' है, और दूसरा संसाधन 'बॉब' है। इनमें से दोनों में नाम, पता, जन्मतिथि, दोस्तों की सूची इत्यादि हैं तो वे दोनों 'संसाधन' हैं और एक आरामपूर्ण वास्तुकला में एक GET के साथ लाया जा सकता है। हालांकि मैं इन दो संसाधनों के बीच संबंधों के बारे में एक बूलियन प्रश्न पूछना चाहता हूं। वास्तविक संबंध सरल है (यानी मैं दूसरे व्यक्ति से दोस्तों के माध्यम से एक व्यक्ति तक पहुंच सकता हूं), लेकिन स्पष्ट रूप से सर्वर अंत में कुछ गणना शामिल है। तो मैं HTTP GET/bob/isrelated/john –

+0

से पूछना चाहता हूं, मैं दो संभावनाओं के बारे में सोच सकता हूं: 1) एक/बीओबी/दोस्तों पर जाएं और जांच करें कि जॉन प्रतिक्रिया के अंदर एक वस्तु है या नहीं। या आगे बढ़ें और जीईटी/बॉब/दोस्तों/जॉन करें, अगर आपको 404 मिलते हैं तो उनके बीच कोई दोस्ती नहीं है, 200 अन्यथा। 2) इस जानकारी को सीधे संसाधन में शामिल करें: जीईटी/बॉब, फिर बॉब जॉन ... के अंदर खोजें। यदि जॉन प्रतिक्रिया का हिस्सा है तो कोई संबंध नहीं है, अगर अन्यथा नहीं। बाकी परिप्रेक्ष्य से मैं सीधे सर्वर-गणना शर्तों में नहीं सोचूंगा (यह एपीआई कार्यान्वयन विस्तार है)। –

+0

हां, मैं मानता हूं कि यदि मेरे 'रिश्ते' स्पष्ट थे कि बस मैं उन्हें संसाधन में शामिल करूंगा। सर्वर पर गणना शामिल करने का मेरा मतलब यह है कि संसाधन में सैकड़ों हजारों संबंधित संसाधन हो सकते हैं (यह जटिल नेटवर्क का पूर्ण ट्रांजिटिव क्लोजर है)। तो क्या संबंध मौजूद है जो डेटा पर निर्भर करता है जिसे क्लाइंट को नहीं भेजा जा सकता है - इसे सर्वर द्वारा गणना की जानी चाहिए –

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