2009-04-18 25 views
11

वेब सेवाओं के विकास के लिए बेहतर दृष्टिकोण कौन सा है; अनुबंध पहले या अनुबंध आखिरी?
प्रत्येक के फायदे और नुकसान क्या हैं?वेब सेवाओं के लिए बेहतर तरीका कौन सा है - अनुबंध पहले या अनुबंध आखिरी है?

आपको किसके साथ अनुभव है?

संपादित यह सवाल एक वेब सेवा के कार्यान्वयन के बारे में है (पढ़ें: सोप) सवाल है कार्यान्वयन कक्षाएं पहले कोडित जानी चाहिए या नहीं और WSDL और उस (अनुबंध पिछले) से उत्पन्न XSD स्कीमा या डब्लूएसडीएल और एक्सएसडी स्कीमा पहले लिखे गए थे और कार्यान्वयन कक्षाएं उत्पन्न हुईं (अनुबंध पहले)

+0

के बाद से सवाल फायदे और प्रत्येक पक्ष के disadvantaages के बारे में पूछता है, मैं नहीं दिख रहा है कि यह व्यक्तिपरक है। –

उत्तर

8

अनुबंध-पहला आम तौर पर स्वीकार्य 'सर्वोत्तम अभ्यास' होता है।

यह आपको सेवा के निर्माता और उपभोक्ता दोनों के साथ बिल्कुल स्पष्ट है जो आवश्यक है और क्या अपेक्षित है। जब आप जावा प्रकारों को परिवर्तित करने की कोशिश करना शुरू करते हैं तो यह विशेष रूप से महत्वपूर्ण हो जाता है -> xml प्रकार। आप अलग-अलग वेब सेवा में स्कीमा का पुन: उपयोग करने में भी सक्षम हैं।

+0

आप बड़ी फ़ाइल अपलोड की तरह कुछ के लिए अपने अनुबंध में एक धारा की तरह कुछ कैसे परिभाषित करते हैं? – Fireworks

+0

@Fireworks अनुबंध में परिभाषित करने के लिए है कि कोई ज़रूरत नहीं - पहले से ही एक मानक है। कोई एमआईएमई (पुरानी शैली) या एमटीओएम (अब अक्सर इस्तेमाल किया जाता है) का उपयोग कर सकता है। – Raman

0

मुझे संदेह है कि उत्तर एक निश्चित "यह निर्भर करता है।"

समस्या यह है कि यदि आप बनाते हैं और अपने अनुबंध को प्रकाशित करते हैं, तो आप इसके द्वारा बाध्य हैं। इससे बदलाव कठिन हो जाता है। असंभव नहीं, लेकिन कठिन है।

दूसरी ओर, यदि आप स्कीमाटा आदि के साथ सहज हैं, तो कोड के मुकाबले अनुबंध के साथ गड़बड़ करना तेज है, तो आप अनुबंध में कुछ वृद्धिशील परिवर्तन कर सकते हैं।

क्या ऐसे उपकरण भी नहीं हैं जो डब्ल्यूएसडीएल से कोड कंकाल उत्पन्न करेंगे? मैं लगभग सकारात्मक हूं। यदि ऐसा है, तो आप "कोड" आइटम स्कीमाटा बनाने के लिए अच्छा कर सकते हैं, और इससे कोड उत्पन्न कर सकते हैं।

+1

ऐसे उपकरण हैं। जावा स्पेस में अपाचे सॉफ्टवेयर फाउंडेशन और अन्य कई टूल प्रदान करते हैं जो कोड की पीढ़ी को पूरा कर सकते हैं। उदाहरण के लिए एक्सएमएलबीन। इसके अलावा कई एपीआई इसे कर सकते हैं। JAXB एपीआई सब के बारे में जावा वस्तुओं के लिए एक्सएमएल बाध्यकारी है, और JAX-WS एपीआई एक उपकरण wsimport है, जो एक डबल्यूएसडीएल पार्स करके जावा वर्गों उत्पन्न करता है भी शामिल है। –

6

मैंने दोनों दृष्टिकोणों का उपयोग किया है। मेरा सुझाव अनुबंध पहले स्कीमा का उपयोग करना है, लेकिन कोड पहले WSDL का उपयोग करना है।

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

@WebService 
public ...

हैं।

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

पहले अनुबंध के रूप में स्कीमा करने का एक अन्य लाभ आपकी स्कीमा फ़ाइल को HTML दस्तावेज़ में परिवर्तित करने के लिए टूल की उपस्थिति है।

एक्सजेसी उपकरण अपेक्षित वर्ग फ़ाइलों को उत्पन्न कर सकता है। हालांकि, मैं केवल शुरुआत में ऐसा करने की सिफारिश करता हूं।

अंत में आपको जेनरेट की गई डब्लूएसडीएल फ़ाइल लेनी चाहिए और इसके बजाय इसके साथ काम करना चाहिए। इस तरह आप wsimport का उपयोग कर सकते हैं और सत्यापित कर सकते हैं कि WSDL से स्कीमा तक की पूरी चीज़ मान्य है।

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

+0

आपका संकर दृष्टिकोण दिलचस्प है, लेकिन यह मेरे लिए स्पष्ट नहीं है कि आप इसे व्यवहार में डाल दिया। आप पहले डब्ल्यूएस द्वारा उपयोग किए जाने वाले बीन कक्षाओं का वर्णन करने वाली एक स्कीमा बनाते हैं, फिर आप एक्सजेसी के साथ कक्षाएं बनाते हैं, लेकिन आप जेनरेट डब्लूएसडीएल में इस स्कीमा का उपयोग कैसे करते हैं? – Pino

+0

सहमत, यह बहुत उपयोगी है। स्प्रिंग-डब्ल्यूएस यह करता है, लेकिन इसे एक कदम आगे ले जाता है, पहले स्कीमा के आधार पर अनुबंध करके, और डब्लूएसडीएल से अनुरोध किए जाने पर डब्लूएसडीएल को रनटाइम पर उत्पन्न करना। इस तरह, किसी को डब्लूएसडीएल के साथ कभी गड़बड़ नहीं होती है। – Raman

+0

@ पिनो सेवा की विधि पर कक्षाओं का उपयोग करें। https://github.com/trajano/app/tree/master/app-web का इसका एक उदाहरण है। –