Estoy diseñando una API para un servicio web y no puedo decidir entre usar atributos XML, elementos o una arquitectura mixta.Diseño de API de servicios web: elementos XML vs. atributos
Déjame mostrarte un ejemplo. Supongamos que tengo un objeto llamado Dominio. Este modelo tiene 3 propiedades (tld
, sld
, trd
y name
) y un método valid?
que devuelve verdadero si el dominio es válido.
# I'm using ruby but
# consider this as pseudo-code
class Domain
attr_accessor :tld, :sld, :trd, :name
def valid?
true # force true
end
end
Mi API denominada /domain/parser
tiene un dominio de entrada y devuelve la respuesta analizada. La primera posibilidad es usar un elemento para cada atributo de dominio.
<result>
<domain>
<name>www.google.it</name>
<tld>it</tld>
...
<valid>true</true>
</domain>
</result>
Pero algunas interfaces usan atributos.
<result>
<domain tld="it" sld="google.com" trd="www" rule="*.foo" name="www.google.it" valid="true" />
</result>
Y no olvide los atributos y el valor.
<result>
<domain tld="it" sld="google.com" trd="www" rule="*.foo" name="www.google.it" valid="true">
www.google.it
</domain>
</result>
En su opinión, ¿cuál es la opción más poderosa, flexible y expresiva? Además, considere que la respuesta se publicará en XML y JSON (pronto).
Otros han respondido a los puntos principales; pero una nota adicional es que la pregunta de la representación JSON alternativa debe ser ortogonal a la representación XML. Es decir, su elección de elementos vs atributos no debería tener ningún efecto sobre cómo debería estructurarse JSON. Dado que XML y JSON difieren estructuralmente, no debe convertir entre los dos: en su lugar, los produce por separado, pero desde el mismo objeto que tiene. Esto permite que ambas representaciones sean "óptimas", ya que no se ven obligadas a utilizar asignaciones para superar las limitaciones (lo que se hace mediante algunas asignaciones JSON para convertir desde XML). – StaxMan