我正在设计一个REST Web API,我不确定如何为响应的某些部分建模。
我认为输出的一个例子是最具说明性的,所以就是这样。
:此:
<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>
基本上,我有布尔字段,如果很多都是假的,那么将它们全部指定就显得过于冗长。
我正在考虑使用元素的存在来表明它是真还是假,但同样的想法我担心这将是一个不好的做法。它似乎不太可发现,但我不确定这里的可发现性有多大价值。
对这类问题有共识吗?
从消费客户的角度来看,我看不出太多差异。测试元素的存在不应该比检查元素的值复杂。
另外,我预计这些类型的参数可能会有十几种或者可能是二十种,所以不会有数百或数千种参数。
最后,我们打算将API与XML和JSON一起使用。 JSON等价物将省略属性,再次从消费客户的角度来看,我发现两者之间没什么区别。
我们有机会从一开始就正确地做到这一点,这就是我们的目标。
有什么建议吗?
答案 0 :(得分:2)
如果决定归结为明示或暗示,我默认明确删除任何可能的混淆。无论您是否发送,所表示的实体都具有这些属性,但您应该包含完整的表示。
答案 1 :(得分:1)
绝对是第二种方法。这允许更大的灵活性,当解析器循环时,检查值是否为真,它可以在找到值时停止,而不必解析整个文件。
此外,JSON支持布尔数据类型。