我正在尝试找到一个可以用于不同场景的数据模式,我发现到目前为止我发现的一种promissing格式是集合+ json格式(http://amundsen.com/media-types/collection/)。
到目前为止,它有很多我需要的功能,并且非常灵活,但我不明白为什么它使用匿名对象(例如:{"name" : "full-name", "value" : "J. Doe", "prompt" : "Full Name"},
)而不是简单的键值对。 (例如:“全名”:“J。Doe”,)。
我看到你如何能够传递更多信息,比如提示等等,但解析速度要慢得多,因为他必须通过搜索数组来访问字段,因此很难为它创建客户端。将数据绑定到特定视图时,必须知道哪些字段存在,因此必须再次将匿名对象转换为键值映射。
那么使用这个匿名对象而不是键值映射有没有真正的优势?
答案 0 :(得分:2)
我认为主要原因是因为消费者客户不需要事先知道数据的格式。
正如现在在集合+ json中提出的那样,你知道在数据对象中你只需通过解析就能找到关于数据的东西,'name'始终是字段的识别名称,'value'是值等等,您的客户可以不知道有多少字段或名称:
{
"name" : "full-name",
"value" : "J. Doe",
"prompt" : "Full Name"
},
{
"name" : "age",
"value" : "42",
"prompt" : "Age"
}
如果您改为
{
"full-name" : "J. Doe",
"age" : "42"
}
客户需要具有关于您的表示的先前知识,因此它应该期望并理解“全名”,“年龄”以及所有特定于应用程序的字段。
答案 1 :(得分:0)
我写了这个问题然后原谅了它,但找到了我在这里寻找的答案:
集合+ JSON的创建者Mike Amundsen
我理解您希望将对象序列化模式添加到CJ。 但是,我的CJ设计的主要目标之一是不支持 对象序列化。我知道序列化是经常要求的 Web消息的功能。这是优化代码的好方法 和程序员的经验。但这不是我的目标 在这个特殊的设计中。
我认为扩展Kevin ref'd是一个不错的选择。不确定是否有人 这真的是用它了。如果您想设计一个(基于您的 “身体”的想法),这很酷。如果你想开始用一个要点而不是 做整个“拉”的事情,这很酷。发布它,让我们谈谈 关于它。
另一方面,我为CJ编写了一个非常基本的客户端解析器 (它在repo的基本文件夹中)显示如何隐藏 干净利落地驾驶CJ国家模型的“昂贵”部分。其实我 有一个工作项来创建一个可以转换的客户端库 状态表示为任意本地对象模型,但没有 有时间做这项工作。也许这是你想要的帮助 跟我?
在更深层次(可能更无聊)的层面上,这个状态模型 方法是我在处理消息时所考虑的更大模式的一部分 作为“无类型”容器并允许客户端和服务器使用 他们喜欢的任何本地对象模型 - 无需使用 该对象模型的跨Web协议。这是一个“自以为是的人 设计模型“我正在努力。
最后,你正确地指出了线程的顶部,HAL和 Siren能够更好地支持对象序列化风格 消息。我觉得这很酷,我鼓励人们(包括我的 客户端)在对象序列化时使用这些其他格式 首选模式,并在首选状态转移时使用CJ 图案。