क्या किसी वेब सेवा से वस्तुओं को वापस करना संभव है?

एक सामान्य स्ट्रिंग लौटने के बजाय, क्या क्लासिक ऑब्जेक्ट्स लौटने का कोई तरीका है? यदि नहीं: सर्वोत्तम प्रथाओं क्या हैं? क्या आप अपनी ऑब्जेक्ट को एक्सएमएल में ट्रांसफर करते हैं और ऑब्जेक्ट को दूसरी तरफ पुनर्निर्माण करते हैं? अन्य संभावनाएं क्या हैं?

0
ro fr bn

11 उत्तर

जेएसओएन वेब के चारों ओर ऑब्जेक्ट्स (जावास्क्रिप्ट का सबसेट के रूप में) पास करने का एक सुंदर मानक तरीका है। कई भाषाओं में एक लाइब्रेरी होती है जो JSON कोड को देशी ऑब्जेक्ट में परिवर्तित कर देगी - उदाहरण के लिए देखें Python में simplejson

For more libraries for JSON use, see the JSON webpage

0
जोड़ा

जहां संभव हो, मैं वस्तुओं को एक्सएमएल में स्थानांतरित करता हूं - इसका मतलब है कि वेब सेवा अधिक पोर्टेबल है - फिर मैं जो भी भाषा में सेवा तक पहुंच सकता हूं, मुझे बस उस भाषा में पार्सर/ऑब्जेक्ट ट्रांसपोजर बनाने की आवश्यकता है।

चूंकि हमारे पास सेवा का वर्णन करने वाली डब्लूएसडीएल फाइलें हैं, इसलिए यह लगभग कुछ सिस्टमों में स्वचालित है।

(उदाहरण के लिए, हमारे पास शुद्ध पायथन में एक सर्वर लिखा गया है जो सी में लिखे गए सर्वर को बदल रहा है, सी ++/जीएसओएपी में लिखे गए क्लाइंट और कोको/ऑब्जेक्टिव-सी में लिखे गए क्लाइंट को बदल रहा है। हम साबुनयूआई को एक परीक्षण ढांचे के रूप में उपयोग करते हैं, जो कि है जावा में लिखा गया)।

0
जोड़ा

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

0
जोड़ा

.NET स्वचालित रूप से उन वस्तुओं के साथ करता है जो serializable हैं। मुझे यकीन है कि जावा एक ही तरीके से काम करता है।

Here is an article that talks about object serialization in .NET: http://www.codeguru.com/Csharp/Csharp/cs_syntax/serialization/article.php/c7201

0
जोड़ा

जैसा कि बताया गया है, आप इसे serialization के माध्यम से .NET में कर सकते हैं। डिफ़ॉल्ट रूप से सभी मूल प्रकार क्रमबद्ध होते हैं, इसलिए यह आपके लिए स्वचालित रूप से होता है।

हालांकि यदि आपके पास जटिल प्रकार हैं, तो आपको ऑब्जेक्ट को [Serializable] विशेषता के साथ चिह्नित करने की आवश्यकता है। वही गुणों के रूप में जटिल प्रकार के साथ चला जाता है।

तो उदाहरण के लिए आपको यह होना चाहिए:

[Serializable]
public class MyClass
{
    public string MyString {get; set;}

    [Serializable]
    public MyOtherClass MyOtherClassProperty {get; set;}
}
0
जोड़ा

@ ब्रायन: मुझे नहीं पता कि जावा में चीजें कैसे काम करती हैं, लेकिन .NET ऑब्जेक्ट्स में xml को क्रमबद्ध किया जाता है, बेस 64 स्ट्रिंग्स नहीं। Webservice एक wsdl फ़ाइल प्रकाशित करता है जिसमें आपके webservice के लिए आवश्यक विधि और ऑब्जेक्ट परिभाषाएं होती हैं।

मुझे उम्मीद है कि कोई भी वेब सर्विसेज नहीं बनाता है जो बस बेस 64 स्ट्रिंग बनाते हैं

0
जोड़ा

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

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

0
जोड़ा

यदि ऑब्जेक्ट को एक्सएमएल में क्रमबद्ध किया जा सकता है और डब्लूएसडीएल में वर्णित किया जा सकता है तो हाँ webservice से वस्तुओं को वापस करना संभव है।

0
जोड़ा

जैसा कि अन्य ने कहा है, यह संभव है। हालांकि, यदि सेवा और ग्राहक दोनों ऑब्जेक्ट का उपयोग करते हैं जिनके पास दोनों पक्षों के समान डोमेन व्यवहार होता है, तो आपको शायद पहले स्थान पर किसी सेवा की आवश्यकता नहीं होती है।

0
जोड़ा
    

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

  
     

लोमैक्स:   मुझे इसके साथ असहमत होना है क्योंकि यह एक है   कुछ हद तक संकीर्ण टिप्पणी। इसका उपयोग करना   webservice जो डोमेन serialize कर सकते हैं   एक्सएमएल के लिए वस्तुओं का मतलब है कि यह बनाता है   ग्राहकों के साथ काम करना आसान है   एक ही डोमेन ऑब्जेक्ट्स, लेकिन इसका भी अर्थ है   कि वे ग्राहक प्रतिबंधित हैं   उस विशेष वेब सेवा का उपयोग कर   आपने खुलासा किया है और यह भी काम करता है   अन्य ग्राहकों को अनुमति देकर उलट   आपके डोमेन का कोई ज्ञान नहीं है   वस्तुओं लेकिन अभी भी आपके साथ बातचीत   एक्सएमएल के माध्यम से सेवा।

@ लोमैक्स: आपने दो परिदृश्यों का वर्णन किया है। परिदृश्य 1: क्लाइंट xml संदेश को सटीक उसी डोमेन ऑब्जेक्ट में रीहाइड्रेट कर रहा है। मैं इसे "ऑब्जेक्ट लौटने" मानता हूं। मेरे अनुभव में यह एक बुरी पसंद है और मैं इसे नीचे समझाऊंगा। परिदृश्य 2: क्लाइंट xml संदेश को सटीक उसी डोमेन ऑब्जेक्ट के अलावा किसी अन्य चीज़ में रीहाइड्रेट करता है: मैं इसके पीछे 100% हूं, हालांकि मैं इसे डोमेन ऑब्जेक्ट को वापस करने के लिए नहीं मानता। यह वास्तव में एक संदेश या डीटीओ भेज रहा है।

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

मैं आमतौर पर परिदृश्य 2 के लिए डिफ़ॉल्ट करता हूं। ऐसा करने के लिए एक भारी कारण होने पर मैं केवल परिदृश्य 1 का उपयोग करता हूं।

मैं अपने शुरुआती उत्तर के साथ इतने कमजोर होने के लिए क्षमा चाहता हूं। मुझे आशा है कि यह चीजों को एक डिग्री तक साफ़ कर देगा जहां तक ​​मेरी राय है। लोमैक्स, ऐसा लगता है कि हम आधा सहमत हैं;)।

0
जोड़ा

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

लेकिन क्लाइंट केवल उस ऑब्जेक्ट को पुनर्स्थापित करने में सक्षम होगा अगर यह जावा-आधारित था। इसके अलावा, किसी ऑब्जेक्ट को क्रमबद्ध करने के लिए एक गहरी प्रतिलिपि की आवश्यकता होती है और इसे ठीक से बहाल किया जाता है। गहरी प्रतियां महंगी हो सकती हैं।

आपका सबसे अच्छा मार्ग एक एक्सएमएल स्कीमा बनाना है जो दस्तावेज़ का प्रतिनिधित्व करता है और ऑब्जेक्ट विनिर्देशों के साथ उस स्कीमा का एक उदाहरण बनाता है।

0
जोड़ा