Web-Service-API-Design: XML-Elemente und Attribute [doppelt]

8

Ich entwerfe eine API für einen Webservice und kann mich nicht zwischen der Verwendung von XML-Attributen, Elementen oder einer gemischten Architektur entscheiden.

Lassen Sie mich Ihnen ein Beispiel zeigen. Nehmen wir an, ich habe ein Objekt namens Domain. Dieses Modell hat 3 Eigenschaften ( tld , sld , trd und name selbst) und eine Methode valid? , die true zurückgibt, wenn die Domäne gültig ist.

%Vor%

Meine API namens /domain/parser nimmt eine Domäne in der Eingabe und gibt die geparste Antwort zurück. Die erste Möglichkeit besteht darin, für jedes Domänenattribut ein Element zu verwenden.

%Vor%

Aber einige Schnittstellen verwenden Attribute.

%Vor%

Und vergiss Attribute und Wert nicht.

%Vor%

Was ist Ihrer Meinung nach die kraftvollere, flexiblere und ausdrucksstärkste Wahl? Bedenken Sie außerdem, dass die Antwort in XML und JSON (in Kürze) bereitgestellt wird.

    
Simone Carletti 30.11.2009, 21:43
quelle

4 Antworten

8

Das Muster, das ich verwende, ist:

  • Elemente sind für Daten
  • Attribut sind für Metadaten (d. h. Daten über die Daten)

Wenn Sie XSD-Schema am meisten verwenden, wenn nicht alle Ihre Metadaten dorthin gehen sollten, aber wenn Sie nicht Attribute sind, sind gute Platz für sie.

In Ihrem Beispiel könnte ich so etwas tun:

%Vor%     
dkackman 30.11.2009, 22:05
quelle
5

Die WCF-Designer entschieden sich dafür, Attribute zu vermeiden, hauptsächlich aus Leistungsgründen. Der WCF-Standard-Serializer, der DataContractSerializer, unterstützt keine Attribute (dies könnte etwas zu berücksichtigen sein), ist aber ungefähr 10% schneller als der flexiblere XmlSerializer in .NET.

Wenn Sie also jemals sehen, dass Sie Inhalte bereitstellen, die von einem WCF-Client konsumiert werden, werden Sie wahrscheinlich versuchen, Attribute zu meiden, wenn dies möglich ist.

Attribute werden immer nur "atomare" sein, z. Eine Saite, ein Int usw. - Elemente bieten so viel mehr Flexibilität. Außerdem existieren Attribute niemals alleine - sie werden immer an ein Element angeheftet.

Aus meiner persönlichen Erfahrung und persönlichen Vorliebe würde ich höchstwahrscheinlich versuchen, hauptsächlich Elemente zu verwenden und Attribute so weit wie möglich zu vermeiden. Aber das ist wirklich nur eine persönliche Vorliebe und Geschmack - Attribute sind absolut gültig in XML, kein Problem.

    
marc_s 30.11.2009 21:53
quelle
3

Es ist hauptsächlich eine Frage des Geschmacks, aber es gibt einige technische Überlegungen. Attribute sind etwas eingeschränkter in welchen Zeichen sie enthalten können. Sie haben den Vorteil, dass diese Reihenfolge unwesentlich ist, aber nicht wiederholt werden kann. Dies kann Ihre Wahl beeinflussen, je nachdem, welches Toolset Sie haben

    
peter.murray.rust 30.11.2009 21:53
quelle
3

Wenn Ihre Daten als zwei Ebenen betrachtet werden können, wobei eine die Kerndaten und die andere eine Art von Metadaten ist (z. B. Beschriftungen für bestimmte Elemente), dann sollten Sie Elemente für die ersten und Attribute für die Letzteres, zB:

%Vor%

Wenn Sie alle Attribute ausschließen, sehen die verbleibenden Daten in der Regel noch sinnvoll aus.

Eine andere Regel, die ich manchmal verwende, sind Attribute für Zusammenfassungsdaten und Elemente für den Rest. Wenn ich zum Beispiel eine Übersichtsliste senden möchte, sende ich einfach das oberste Element plus seine Attribute und lasse die enthaltenen Elemente weg. ZB

%Vor%

was in einer Liste wird:

%Vor%

Alternativ, wenn keiner dieser Fälle zutrifft, möchten Sie vielleicht nur Elemente für alles verwenden, das interne Struktur hat oder wo die Reihenfolge wichtig ist, und Attribute für alles andere, wie in Ihrem zweiten XML-Beispiel.

    
jon-hanson 30.11.2009 22:10
quelle

Tags und Links