2012-12-13 21 views
15

पृष्ठभूमि:संस्करणित SOAP वेब सेवाओं के लिए कोड को कैसे संभालें?

  • हमारी वेब सेवा कंपनी आंतरिक रहे हैं, लेकिन उनका इस्तेमाल
  • हम हम कर सकते हैं
जितना विरोध करने का प्रयास करेंगे/एपीआई के पुराने संस्करणों को दूर एक बहुत विभिन्न प्रणालियों के साथ

वेब सेवाओं के संस्करण के बारे में बहुत सारी जानकारी है, और हमारा निर्णय हमारी वेब सेवाओं के संस्करण के लिए निम्नलिखित दृष्टिकोण का उपयोग करना था:

  • यूआरएल में संस्करण रखें (मुझे पता है कि कुछ लोग इसके खिलाफ हैं, लेकिन मुख्य रूप से आरईएसटी सेवाओं के संबंध में)
  • नामस्थान में संस्करण रखें।

लेकिन, अब हम यह तय कर रहे हैं कि वास्तव में इसे कैसे कार्यान्वित किया जाए, और यहां हमें सर्वोत्तम प्रथाओं की अधिक जानकारी नहीं मिली है। हम (जावा) का उपयोग करें:

  • एनोटेशन एक्सएमएल एनोटेशन के साथ एनोटेट हमारी वेब सेवाओं (और वेब सेवा एपीआई)
  • POJO सेम परिभाषित करने के लिए, सामग्री
  • कनवर्टर कक्षाएं/से परिवर्तित करने के लिए करने के लिए परिभाषित करने के लिए व्यापार परत और वेब सेवा POJO के
  • स्प्रिंग

तो, वेब सेवाओं पर पुराने संस्करणों रखने के लिए, हम कोड के पुराने संस्करण रखने की जरूरत है। ऐसा करने के लिए, हम मूल रूप से दो अलग-अलग दृष्टिकोण पर ध्यान दिया है:

com.company.webservice.v3. -all of the web service classes, POJO’s and converters go here 
com.company.webservice.v4. -all of the web service classes, POJO’s and converters go here 
:

1) प्रत्येक नए संस्करण के लिए, प्रासंगिक कोड की एक पूरी नई प्रतिलिपि

यह दृष्टिकोण इस प्रकार दिखाई देगा बनाना

तो, यहां हमारे पास कोड डुप्लिकेट है। हमारा विचार संक्षेप में:

  • कोड डुप्लिकेशन। समान कोड के साथ कई कक्षाएं होंगी। शायद ग्रहण में उलझन में।
  • पूरा अलगाव, यह निर्धारित करने के लिए आसान है कि एक विशेष संस्करण सेवाओं

2) केवल प्रत्येक वर्ग कि से प्रभावित होता है की एक प्रतिलिपि बनाने के लिए वसंत का उपयोग करें के पिछले संस्करणों की कार्यप्रणाली को प्रभावित करने के लिए

  • छोटा जोखिम का गठन एक बदलाव

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

    com.company.webservice.beans.MyXMLAnnotatedPOJOv3.java 
    com.company.webservice.beans.MyXMLAnnotatedPOJOv4.java 
    com.company.webservice.translators.MyXTranslatorv1.java 
    com.company.webservice.translators.MyXTranslatorv2.java 
    
    • स्पष्ट रूप से देखने के लिए क्या एक वेब सेवा के विशेष संस्करण का गठन मुश्किल हो सकता है। कोड
    • कोई कोड डुप्लिकेशन नहीं बनाए रखने पर वेब सेवाओं के पिछले संस्करणों को गलत तरीके से गलत करना संभव हो सकता है।केवल नए संस्करण

    कोई भी दृष्टिकोण इष्टतम महसूस नहीं करता है, लेकिन हमें इसके बारे में अधिक जानकारी नहीं मिली है। तो, मेरे प्रश्न हैं: आप किस दो दृष्टिकोण का उपयोग करेंगे? या आप एक पूरी तरह से अलग दृष्टिकोण ले जाएगा?

  • +0

    "आप किस दो दृष्टिकोण का उपयोग करेंगे? या आप एक पूरी तरह से अलग दृष्टिकोण लेंगे" = मुख्य रूप से राय आधारित – Raedwald

    +1

    क्या आपके पास इस विषय के बारे में और अनुभव है? मुझे एक ही तरह की समस्या का सामना करना पड़ रहा है और मैं अपनी वेब सेवा विकसित करने के लिए सर्वोत्तम अभ्यास/प्रक्रिया को परिभाषित करना चाहता हूं। –

    उत्तर

    5

    जब जावा से wsdls पैदा करने, मैं पैकेज समाधान का प्रयोग करेंगे:

    com.company.webservice.v3. 
    

    यह कोड दोहराव समस्या है, लेकिन POJOs और कन्वर्टर्स anymay संस्करणों के बीच मतभेद है, तो कोड पुन: उपयोग नहीं हो सकता है सब के बाद बहुत व्यवहार्य। मुख्य लाभ यह है कि यदि आप पुराने संस्करण से छुटकारा पाने के लिए चाहते हैं, तो आप केवल प्रासंगिक संकुल हटा दें।

    मैं वर्जन संख्या को यूआरएल में रखूंगा, क्योंकि आप वैसे भी आरईएसटी नहीं कर रहे हैं। इसके अलावा, यदि आप कुछ संस्करणों का अभी भी उपयोग कर रहे हैं, तो आप एक्सेस लॉग में जांच सकते हैं।

    +0

    आपके इनपुट के लिए धन्यवाद। मुझे लगता है कि हम भी इस दिशा में झुका रहे हैं। हमें क्या परेशानी होती है कि अक्सर, दो संस्करणों के बीच, हम मामूली परिवर्तन करते हैं जो कुल में <10 कक्षाओं> 100 को प्रभावित करते हैं। तो उदाहरण के लिए ग्रहण, "MyXMLAnotatedPOJO.java" वर्ग की खोज 7 अलग-अलग "v1" से "v7" संकुल में 7 समान हिट दे सकती है। – Magnus

    +0

    एक अतिरिक्त ऑपरेशन जोड़ने की तरह संगत परिवर्तन, एक नए संस्करण की आवश्यकता नहीं है। इसके अलावा, आप संस्करण संख्या को अपने वर्ग के नामों में भी डाल सकते हैं। – Hugo