2011-06-17 2 views
1

Je suis en train de mettre en place un plan pour un service web Xml pour aller dans le site d'un client pour être consommé par des tiers afin qu'ils puissent accéder aux données du client.Wcf Rest Service - sérialiser ou artisanal xml?

Ma question est vraiment demander sur les meilleures pratiques ici, et au moment où je délibèrent plus de 2 stratégies différentes:

1) Créer un modèle d'objet qui représente mes données Xml et sérialiser (soit explicitement, soit implicitement en exposant les données à travers un point de terminaison REST WCF)

2) Transformer mon modèle de domaine directement dans Xml fabriqué à la main en utilisant XLinq et en retournant cela comme une chaîne du service, la mise en place des têtes de réponse appropriée

J'aime (1) parce que je laisse le système faire la génération de la physique Xml et moi travaillons uniquement dans le modèle d'objet, mais le contrôle de version devient un problème et je pourrais avoir besoin d'un contrôle plus fin sur la sortie. J'aime (2) parce que j'obtiens le contrôle fin et le contrôle de version devient plus facile, mais je suis maintenant en train de fabriquer du Xml et la possibilité d'erreur monte en flèche.

Une opinion? Ai-je manqué quelque chose qui me donne le meilleur des deux mondes? Je voudrais aller directement pour (1) si je connaissais la meilleure façon de «versionner un modèle d'objet» - utiliserait-il des espaces de noms différents?

Répondre

1

J'utiliserais la sérialisation. Tant que vous n'essayez pas d'utiliser vos objets de domaine pour la sérialisation, vous pouvez obtenir un contrôle très précis sur le XML, soit via DataContractSerializer ou XmlSerializer. Vous pouvez ensuite mapper entre vos objets de domaine et vos objets de sérialisation en utilisant quelque chose comme AutoMapper

+0

Dans ce cas, avez-vous un commentaire sur le sujet de la gestion des versions? Je suppose que ce serait bien si vos modifications sont additives, mais comment comptez-vous pour briser les changements en utilisant ce modèle, et être en mesure de fournir une nouvelle révision du schéma à vos clients? –

+0

Si la modification est en cours, il y a un certain nombre de choses que vous pouvez faire - le plus robuste et le plus simple est d'utiliser un nouveau point de terminaison pour la nouvelle version du service - les anciens clients parlent à l'ancien et les nouveaux . Si cela ne fonctionne pas pour vous alors possiblement avoir une autre méthode avec une nouvelle action que les nouvelles demandes vont. Enfin, vous pouvez mapper l'opération à une méthode qui prend Message comme un paramètre et fork votre traitement basé sur, disons XML namespace ou similaire (vous pouvez toujours exécuter le sérialiseur contre le type approprié vous-même –

+0

La chose principale est que les changements de rupture nécessiteront deux différentes versions du type de sérialisation –