显示webservices是否公开嵌套列表或平面列表?

mem*_*und 5 xml json soap web-services

在设计a时webservice,无论是否soap,xml或者json:您更喜欢扁平列表还是嵌套列表?

例:

嵌套:

<carRequest>
   <cars>
     <car>
       <manufature />
       <price />
       <description />
     </car>
     <car>
       <manufature />
       <price />
       <description />
     </car>
   </cars>
</carRequest>
Run Code Online (Sandbox Code Playgroud)

平面:

<carRequest>
     <car>
       <manufature />
       <price />
       <description />
     </car>
     <car>
       <manufature />
       <price />
       <description />
     </car>
</carRequest>
Run Code Online (Sandbox Code Playgroud)

一个优于另一个的优势是什么?

Bog*_*dan 6

结合个人风格,工具(默认配置,限制或易用性),需要从单个对象表示支持多种MIME类型等优点和缺点.我不打算全部考虑到这一点 - 因为对某些人有用的可能不是其他人的好解决方案 - 但我只想指出一些事情......

哪一个看起来更自然,扁平元素还是包裹元素?人们通常如何看待重复元素?例如,<manufature>,<price><description>被包裹在一个<car>元件.为什么?因为它们是相关的并且一起形成一个结构.多个<car>s也相关并形成一个结构:<car>s 的列表.它在您的表示和XML模式中更具表现力,更具可读性.但当然现在我们进入个人喜好和全面战争......

包裹元素还有另一个优点.您如何表达空车列表与空车列表?

如果元素是扁平的并且你没有汽车,那么当你将它解组成一个物体时,它代表什么呢?

<carRequest>
</carRequest>
Run Code Online (Sandbox Code Playgroud)

您的要求是否有cars = nullcars = []?你不知道.

如果你使用嵌套元素,那么cars = null这是:

<carRequest>
</carRequest>
Run Code Online (Sandbox Code Playgroud)

虽然cars = []是这样的:

<carRequest>
  <cars>
  </cars>
</carRequest>
Run Code Online (Sandbox Code Playgroud)

既然你提到了SOAP,你可能在某些时候需要考虑跨技术和工具的互操作性(请参阅为什么WS-I Basic Profile兼容很重要?),它规定了XML在SOAP消息中的外观.称为文档/文字包装模式的样式是首选.

这是一个广泛的主题和TL; DR我只能想到"选择你的毒药".我希望我的回答对你有所帮助.