Je concevons une API pour un service Web et je ne peux pas choisir entre utiliser des attributs XML, des éléments ou une architecture mixte.
Permettez-moi de vous montrer un exemple. Supposons que j'ai un objet appelé domaine. Ce modèle a 3 propriétés ( mon API appelé mais certaines interfaces utilisent des attributs. P> tld code>, sld code>, trd code> et le nom code>) et une méthode valide? code> qui retourne true si le domaine est valide. p> / domain / anal code> prend un domaine en entrée et retourne la réponse analysée. La première possibilité est d'utiliser un élément pour chaque attribut de domaine. P> <result>
<domain tld="it" sld="google.com" trd="www" rule="*.foo" name="www.google.it" valid="true">
www.google.it
</domain>
</result>
4 Réponses :
Les concepteurs de la WCF ont choisi d'éviter les attributs, principalement pour des raisons de performance. Le sérialisateur par défaut WCF, le DataContractSerializer, ne prend pas en charge les attributs (afin que cela puisse être quelque chose à prendre en compte), mais il est d'environ 10% plus rapide que le xmlserializer plus flexible dans .NET. P>
Donc, si vous vous voyez jamais servir de contenu pour être consommé par un client WCF, vous allez probablement essayer d'éviter les attributs, si jamais possible. P>
Les attributs ne vont jamais être "atomiques", par ex. Une chaîne, un INT, etc. - éléments offrent une grande plus grande flexibilité de cette façon. En outre, les attributs n'existent jamais seuls - ils sont toujours classés sur un élément. P>
De mon expérience personnelle et de votre préférence personnelle, je voudrais probablement utiliser la plupart des éléments et éviter les attributs autant que possible. Mais ce n'est vraiment qu'une préférence personnelle et des attributs de goût sont absolument valables dans XML, aucun problème. P>
C'est étrange! Vous me dites donc, par exemple, l'API de Feedburner est incompatible avec WCF? code.google.com/apis/feedburner/awareness_api.html
@WEPPOS: Non - Si l'utilitaire WCF SVCutil détecte tous les attributs d'un XML, il redevient à la place du xmlserializer (plus lent, héritage).
C'est principalement une question de goût, mais il existe des considérations techniques. Les attributs sont légèrement plus restreints dans les caractères qu'ils peuvent contenir. Ils ont l'avantage (?) Cet ordre est immatériel, mais ils ne peuvent pas être répétés. Cela peut influencer légèrement votre choix en fonction de quel outils vous avez P>
Techniquement, les attributs peuvent contenir exactement les mêmes caractères, il suffit de citer un ensemble de caractères légèrement différent.
Vrai en principe - mais ce serait beaucoup de travail et non naturel d'éviter la normalisation des espaces.
Le modèle que j'utilise est:
Si vous utilisez la plupart des Schema XSD, sinon toutes vos métadonnées devraient y aller, mais si vous n'acceptez pas les attributs, c'est un bon endroit pour cela. P>
Alors avec votre exemple pourrait faire quelque chose comme ceci: p>
Si vos données peuvent être considérées comme ayant deux niveaux, où l'une est la base des données de base et que l'autre est une sorte de métadonnées (par exemple, des étiquettes pour certains éléments), vous pouvez utiliser des éléments pour les anciens et les attributs pour le ce dernier, par exemple: typiquement si vous supprimez tous les attributs, les données restantes ont toujours l'air significatifs. p> Une autre règle que j'utilise parfois est des attributs pour les données et les éléments résumés pour le reste. Ensuite, si je souhaite envoyer une liste de récapitulatifs, par exemple, j'envoie simplement l'élément supérieur, ainsi que de ses attributs et laissez les éléments contenus. Par exemple p> qui dans une liste devient: p> alternativement si aucun de ces cas ne s'applique, vous ne pouvez pas simplement vouloir Utilisez des éléments pour tout ce qui a une structure interne ou lorsque la commande est importante et des attributs pour tout le reste, selon votre deuxième exemple XML. P> P>
D'autres ont répondu aux points principaux; Mais une note supplémentaire est que la question de la représentation alternative JSON devrait être orthogonale à la représentation XML. C'est-à-dire que votre choix d'éléments VS Les attributs ne devraient avoir aucun effet sur la structure de JSON. Puisque XML et JSON diffèrent de manière structurelle, vous ne devez pas convertir entre les deux: les produire plutôt séparément, mais du même objet que vous avez. Cela permet aux deux représentations d'être "optimales", comme dans le cas de ne pas être forcé d'utiliser des mappages pour surmonter les limitations (qui se font par certains mappages JSON, à convertir de XML).