Rétrocompatibilité et services Web
Donc je suis un peu nouveau pour les services web et une situation récemment est venu où nous avons ajouté un élément à un type de données qui revient au client. Les clients se sont plaints que c'est leur mise en œuvre, car il s'est étouffé avec l'élément nouveau qu'il ne s'attendait pas. (nous fournissons les services via le Axis2).
Pour moi, cela semble un danger changement que le client doit être en mesure de gérer normalement (j'ai travaillé avec certains non-web-cadres de service où l'ajout facultatif de l'information est tout à fait acceptable). Je pourrais comprendre si nous avons supprimé ou renommé certains champs que cela pourrait causer des problèmes pour le client.
Fondamentalement, je dirais que le wsdl pour agir comme une interface. Si nous apportons des modifications qui sont essentiellement des sous-types de cette interface, je m'attends à ce que le client heureux ignorer les éléments extérieurs. Est-ce juste une courte venue de services web, ou est-il un façon saine de faire passive des modifications aux services de sorte que les nouveaux clients peuvent obtenir le plus de données alors que les anciens clients peuvent mettre à jour à leurs loisirs?
source d'informationauteur Jason Tholstrup
Vous devez vous connecter pour publier un commentaire.
WSDL en fait agit comme un contrat de plus d'une interface. Le WSDL décrit exactement ce que l'opération s'attend à "recevoir" et ce qu'il attend de "retourner". L'analogie la plus proche de ce qui serait en C de changer le prototype d'une fonction sans modifier la fonction elle-même, ils l'habitude de match et qui provoque des problèmes.
Le plus spécifique, le WSDL est plus le comportement que vous "garantir" à être mis en place.
Si vous avez besoin de flexibilité dans votre renvoyé de données (ajout/suppression de champs, etc), vous pouvez effectuer l'une des opérations suivantes:
2 a plus de risque, mais il peut être géré avec XSDs ou d'autres technologies. Votre projet particulier les exigences de dicter ce qui est acceptable.
Dans le passé, lorsque vous traitez avec des exposés WebService Api, j'ai toujours été avec la date-gestion des versions de la philosophie. Malheureusement, vous avez à traiter avec rétro-compatibilité pour toutes les API de vous libérer au public, une fois que vous êtes hors de "bêta" mode (et parfois même à l'époque).
Ce que nous avons fait était très simple; le jour de la nouvelle API a été libéré, nous devrions créer une structure de dossiers de la sorte:
Que nous voudrions savoir quelle version est la plus récente, il suffit de cocher la structure du dossier, et nos clients n'ont pas à s'inquiéter à propos de la rupture des changements jusqu'à ce qu'ils étaient prêt à mettre à niveau. Travaillé comme un champion pour nous, la seule chose que je peut avoir changé était d'utiliser un seul dossier, donc il serait plus facile de les voir tous ensemble:
Un document WSDL est effectivement publié le SAVON de l'interface web de votre service. De nombreux clients l'utiliser pour générer leur client procurations qui exposent tous vos webservice méthodes dans leur langage de programmation de choix. La plupart de ces code généré par les clients sont très fragiles et choisir de lever une exception si ils voient un élément qu'ils ne reconnaissent pas (c'est à dire son pas dans le WSDL) plutôt que de les ignorer. Certains sont plus détendus et c'est vraiment pour le client de la technologie qu'ils utilisent c'est à dire Microsoft DataContract ont IExtensibleData interface sur leurs clients détiennent spécifiquement des données qu'ils ne reconnaissent pas, de sorte qu'ils seront en grande partie d'ignorer les éléments inconnus.
SAVON et le code généré par client procurations se prête à ce genre de problèmes, car ils génèrent des clients qui veulent comprendre l'ensemble du schéma " plutôt que de simplement les bits qu'ils sont intéressés à. L'alternative est l'utilisation d'un Analyseur Xml et il suffit de tirer les morceaux qu'ils ont besoin.
Si votre service web est en cours de développement ou de changement constant ensuite le SAVON n'est pas vraiment votre meilleur choix car il signifie à chaque changement, ils auront à se régénérer, de reconstruction et de redéployer leur service clients. Selon votre situation, vous pourriez envisager de fournir REPOS+VARICELLE (Plain Old Xml web services, plutôt que sa plus simple à analyser car il n'a pas la surcharge de SAVON, peut être appelé via une normale URL et par consommée par des environnements qui n'ont pas de SOAPClient de la bibliothèque (par exemple directement dans un navigateur, à l'aide d'AJAX)
Une réponse possible serait d'utiliser des groupes de substitution pour permettre à des modèles abstraits dans le XSD vous importez.
La possibilité de traiter un groupe de substitution doit encore être validée par les cadres que vous utilisez pour appeler ces services.