Xml 如何在Web API结果中表示布尔类型字段

Xml 如何在Web API结果中表示布尔类型字段,xml,json,rest,Xml,Json,Rest,我正在设计一个RESTWebAPI,我不确定如何对响应的某些部分建模 我认为输出的一个例子将是最具说明性的,这里就是 这个: <packages> <package> <name>My Package, Yay!</name> <description>This is my package, Yay!</description> <features> <text_ov

我正在设计一个RESTWebAPI,我不确定如何对响应的某些部分建模

我认为输出的一个例子将是最具说明性的,这里就是

这个:

<packages>
  <package>
    <name>My Package, Yay!</name>
    <description>This is my package, Yay!</description>
    <features>
      <text_overlays />
      <localizable />
      <!-- Only features that are true for this package are listed -->
    </features>
  </package>
</packages>
<packages>
  <package>
    <name>My Package, Yay!</name>
    <description>This is my package, Yay!</description>
    <features>
      <text_overlays>True</text_overlays>
      <localizable>True</localizable>
      <audio>False</audio>
      <another_feature>False</another_feature>
      <this_aint_your_fathers_feature>False</this_aint_your_fathers_feature>
      <every_other_feature_that_exists_listed_here_too>False</every_other_feature_that_exists_listed_here_too>
    </features>
  </package>
</packages>

我的包裹,耶!
这是我的包裹,耶!
或此:

<packages>
  <package>
    <name>My Package, Yay!</name>
    <description>This is my package, Yay!</description>
    <features>
      <text_overlays />
      <localizable />
      <!-- Only features that are true for this package are listed -->
    </features>
  </package>
</packages>
<packages>
  <package>
    <name>My Package, Yay!</name>
    <description>This is my package, Yay!</description>
    <features>
      <text_overlays>True</text_overlays>
      <localizable>True</localizable>
      <audio>False</audio>
      <another_feature>False</another_feature>
      <this_aint_your_fathers_feature>False</this_aint_your_fathers_feature>
      <every_other_feature_that_exists_listed_here_too>False</every_other_feature_that_exists_listed_here_too>
    </features>
  </package>
</packages>

我的包裹,耶!
这是我的包裹,耶!
真的
真的
假的
假的
假的
假的
基本上,我有布尔字段,如果其中许多字段为false,那么将它们全部指定似乎过于冗长

我正在考虑使用元素的存在来表示它是真是假,但同样地,我担心这将是一种不好的做法。它看起来确实不太容易被发现,但我不确定在这里发现有多大价值

在这类问题上有共识吗

从消费客户的角度来看,我看不出有太大的区别。测试元素的存在不应该比检查元素的值更复杂

此外,我预计这些类型的参数最多可能有十几个,也可能有二十几个,所以它们不会有成百上千个

最后,我们打算将我们的API与XML和JSON一起使用。JSON等价物将省略属性,并且再次从消费客户端的角度来看,我认为两者之间没有什么区别

我们有机会从一开始就正确地做到这一点,这是我们的目标


有什么建议吗?

当然是第二种方法。这允许更大的灵活性,当解析器循环时,检查某个值是否为非真时,它可以在找到该值时停止,而不必解析整个文件


此外,JSON支持布尔数据类型。

第二种方法肯定是这样的。这允许更大的灵活性,当解析器循环时,检查某个值是否为非真时,它可以在找到该值时停止,而不必解析整个文件


此外,JSON支持布尔数据类型。

如果决定是显式还是隐式的,我会默认为显式以消除任何可能的混淆。无论您是否发送这些属性,所表示的实体都具有这些属性,但您应该包含完整的表示。

如果决策归结为显式或隐式,我将默认为显式以消除任何可能的混淆。无论您是否发送这些属性,所表示的实体都具有这些属性,但您应该包含完整的表示。

效率差异似乎非常小,在任何情况下,解析器都应该只关注
功能
元素下的元素列表。另外,您是否有一个具体的灵活性示例?我想,如果我想“扩展”任何东西以获得更大的灵活性,我就必须对API进行版本化,然后才能根据需要更改元素结构。说单程更“灵活”似乎很雅格尼。如果不包括假布尔值,那么实际上并不是在存储它们。无法确定布尔值是否不存在或为false。换句话说,在定义中为false的所有值的集合是无限的。您是说undefined等于false。效率差异似乎非常小,解析器在任何情况下都应该只关注
功能
元素下面的元素列表。另外,您是否有一个具体的灵活性示例?我想,如果我想“扩展”任何东西以获得更大的灵活性,我就必须对API进行版本化,然后才能根据需要更改元素结构。说单程更“灵活”似乎很雅格尼。如果不包括假布尔值,那么实际上并不是在存储它们。无法确定布尔值是否不存在或为false。换句话说,在定义中为false的所有值的集合是无限的。你是说未定义的等于错误。