2010-11-16 3 views
6

JAX-RS et JAX-WS sont parfaits pour produire une API. Cependant, ils ne répondent pas du tout à la question de la rétrocompatibilité. Pour éviter de casser l'ancien client lorsque de nouvelles fonctionnalités sont introduites dans l'API, vous devez essentiellement accepter et fournir exactement le même format d'entrée et de sortie que précédemment; la plupart des parseurs XML et JSON semblent avoir un ajustement s'ils trouvent un champ qui ne correspond à rien ou qui a le mauvais type. Certaines bibliothèques JSON, telles que Jackson et Gson, proposent une fonctionnalité permettant de spécifier une représentation d'entrée/sortie différente pour un objet donné en fonction d'un paramètre d'exécution, ce qui semble être une manière appropriée de gérer les versions pour de nombreux utilisateurs. cas. Cela permet de fournir une rétrocompatibilité en annotant les champs ajoutés et supprimés afin qu'ils n'apparaissent qu'en fonction de la version de l'API utilisée par le client.Comment créer des API JAX-RS et JAX-WS rétrocompatibles?

Ni JAXB ni aucune autre bibliothèque de liaison de données XML que j'ai trouvé à ce jour n'a un support décent pour ce concept, sans jamais pouvoir réutiliser les mêmes annotations pour JSON et XML. L'ajouter à JAXB-RI ou EclipseLink Moxy semble potentiellement possible, mais décourageant. L'autre approche du versionnage semble être de mettre à jour toutes les classes qui ont changé, souvent en créant un nouveau paquet chaque fois que l'API est publiée et en faisant des copies de toutes les classes DTO, Service et Resource modifiées dans le nouveau paquet de sorte que toutes les informations de type sont versionnées pour les systèmes de liaison et de répartition. Cette approche me semble plus laborieuse.

Ma question est: comment avez-vous conçu vos fournisseurs d'API Jave pour la rétrocompatibilité? Qu'est-ce qui a fonctionné?

Des liens vers des études de cas ou des articles de blog sur le sujet très appréciés; J'ai fait des recherches sur Google mais je n'ai pas trouvé beaucoup de discussions à ce sujet.

Répondre

0

Je suis le chef de la technologie pour EclipseLink MOXy, je suis très intéressé par vos exigences de versioning. Vous pouvez me joindre par mon blog:

Moxy offre un moyen de représenter les métadonnées JAXB en tant que fichier XML. Vous pouvez exploiter cette option pour créer plusieurs correspondances pour le même modèle d'objet:

+0

Merci Blaise. Une des choses que j'ai réalisé à propos de la création de plusieurs fichiers de mappages pour les mêmes objets est que ce n'est pas forcément moins de travail que de créer plusieurs ensembles de classes - copier, coller, modifier. Et, ce n'est pas aussi bien supporté par les autres bibliothèques (comme Jackson). –

Questions connexes