Json 在基于REST的服务中序列化空属性的行业标准是什么?
最近,我和同事讨论了适当的行业标准,在处理XML/JSON格式的问题时,使用空值元素。我的观点是,如果某个特定元素具有空值,则忽略/不包括XML和JSON响应中的元素。我相信这将减少有效载荷的大小,减少传输带宽 其中,正如我的同事所说,包括JSON/XML中定义的所有属性/元素,无论是否有值 所以理想的情况是Json 在基于REST的服务中序列化空属性的行业标准是什么?,json,xml,rest,standards,Json,Xml,Rest,Standards,最近,我和同事讨论了适当的行业标准,在处理XML/JSON格式的问题时,使用空值元素。我的观点是,如果某个特定元素具有空值,则忽略/不包括XML和JSON响应中的元素。我相信这将减少有效载荷的大小,减少传输带宽 其中,正如我的同事所说,包括JSON/XML中定义的所有属性/元素,无论是否有值 所以理想的情况是 <name>John Doe</name> vs <name>John Doe</name> <DOB/> 正确的方法是什么
<name>John Doe</name>
vs
<name>John Doe</name>
<DOB/>
正确的方法是什么?为什么
感谢可能没有正确或错误的方法,这取决于应用程序的要求。这就是为什么或允许您配置是否包含空值。
John Doe
<name>John Doe</name>
vs
<name>John Doe</name>
<DOB/>
vs
无名氏
小心!这两种表述并不完全相同<代码>表示一个;它相当于
。空和空通常不可互换-这就是为什么我们既有204无内容
又有404未找到
,既有-s
又有-e
正确的方法是什么?为什么
我相信您希望在更大的消息传递背景下思考这个问题。在理想情况下,我们会有一个模式来描述消息中的每个字段——字段的语义是什么,允许的值范围,哪些字段是必需的,哪些是可选的,以及缺少可选字段时的默认语义
在分布式系统中,客户机和服务器以不同的节奏部署,在契约的生命周期中,具有附加语义的模式是常见的。但是,如果客户机和服务器是独立部署的,则会出现客户机和服务器理解同一模式的不同版本的情况。因此,我们需要注意向前和向后的兼容性,以及保持一切正常运行所必需的更改约束
(当然,我们最终会想要做出一个不兼容的更改,所以我们需要引入一个新的消息模式,这反过来意味着我们需要考虑消息)
这意味着,一般来说,我们需要为丢失任何可选字段做好准备——因为消息可能是由一个在引入新字段之前只知道模式版本的进程生成的
那么对于可选的情况,知道可选字段的生产者是否应该始终将其包含在消息中?我不知道有任何公开的论据支持这一点,除了显式改进隐式的一般建议之外
<name>John Doe</name>
vs
<name>John Doe</name>
<DOB/>