Background:Come gestire il codice per i servizi Web SOAP con versione?
- nostri servizi web sono società interna, ma con un sacco di sistemi diversi che li utilizzano
- ci impegneremo a deprecare/rimuovere le vecchie versioni del api come più possibile
C'è un sacco di informazioni per quanto riguarda il controllo delle versioni dei servizi web, e la nostra decisione è stato quello di utilizzare il seguente approccio alla versione nostri servizi web:
- Mantieni la versione in URL (so che alcune persone sono contrarie, ma principalmente riguardo ai servizi REST)
- Mantieni la versione nello spazio dei nomi.
Ma ora stiamo decidendo come implementarlo realmente, e qui non abbiamo trovato molte informazioni sulle migliori pratiche. Usiamo (Java):
- annotazioni per definire i nostri servizi web (e l'API servizio web)
- fagioli POJO annotati con annotazioni XML, per definire il contenuto
- classi Converter per convertire da/per la livello di business e il servizio web di POJO
- Primavera
Così, per mantenere le vecchie versioni sui servizi web, abbiamo bisogno di mantenere le vecchie versioni del codice. Per fare questo, abbiamo sostanzialmente esaminato due diversi approcci:
1) Per ogni nuova versione, fare una nuova copia completa del codice relativo
Questo approccio sarebbe simile a questa:
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
Quindi, qui abbiamo il codice duplicato. Il nostro pensiero in breve:
- Duplicazione del codice. Saranno diverse classi con codice identico. Forse confondendo in Eclipse.
- isolamento completo, facile determinare ciò che costituisce una versione specifica
- rischio ridotto al minimo per influenzare la funzionalità delle versioni precedenti dei servizi di
2) Utilizzare primavera per fare solo una copia di ogni classe che è affetto da una modifica
Questo approccio significa utilizzare Spring IoC e consentire a tutte le versioni dei servizi Web di utilizzare, per quanto possibile, lo stesso codice. Solo quando apportiamo una modifica che influisce sul comportamento/api, creiamo nuove versioni di tali classi. Per esempio:
com.company.webservice.beans.MyXMLAnnotatedPOJOv3.java
com.company.webservice.beans.MyXMLAnnotatedPOJOv4.java
com.company.webservice.translators.MyXTranslatorv1.java
com.company.webservice.translators.MyXTranslatorv2.java
- potrebbe essere difficile da vedere chiaramente ciò che costituisce una versione specifica di un servizio web. Forse più facile da omettere influire sulle versioni precedenti dei servizi web mantenendo il codice
- Nessuna duplicazione di codice.Solo le modifiche sono implementate come nuove classi
Nessun approccio è ottimale, ma non abbiamo trovato molte informazioni a riguardo. Quindi, le mie domande sono: quale dei due approcci useresti? O faresti un approccio completamente diverso?
"quale dei due approcci useresti? O adotteresti un approccio completamente diverso" = principalmente basato sull'opinione – Raedwald
Hai avuto ulteriori esperienze su questo argomento? Sto affrontando lo stesso tipo di problema e voglio definire le migliori pratiche/processi per far evolvere il nostro servizio web. –