我的应用程序将从上游系统接收大型json有效负载。这个upteam系统本质上是一个UI,它将从用户收集业务需求,将这些问题和事实格式化为json有效负载,并将json传输到我的应用程序,该应用程序将根据json-schema标准定义的模式对其进行验证。难题在于,这个上游系统是由不同的团队构建的,他们并不一定了解需要捕获的所有业务需求。
采取以下架构:
schema = {
"$schema": "http://json-schema.org/draft-04/schema#",
"title":"Requirements",
"description": "A Business Requirements Payload",
"type": "object",
"properties": {
"full_name": {
"type": "string"
},
"sex": {
"enum": ["m", "f"]
},
"age": {
"type": "number"
},
"consents": {
"type": "boolean"
}
},
"required": ["full_name", "sex", "age", "consents"],
"additionalProperties": False
}
假设上游系统不知道full_name
,sex
或age
是什么。目前,我正在召开会议,解释我需要的每个字段/问题/事实的性质,应该显示在UI上的默认值,附带应显示给每个字段的文本标签等。
在集思广益的机制中,让每个人都更容易,我想到了将我创建的json-schema紧密耦合到上游系统正在构建的UI。如果我在json-schema本身中包含这些细节,将json-schema交给上游系统,让UI团队生成带有附带文本标签,默认值等的UI,该怎么办?
例如,full_name
和sex
字段可以这样描述:
"full_name": {
"type": "string",
"default": "\"John Smith\"",
"label": "Full Name",
"text": "Please include your full name.",
"description": "This field will be the primary key in the database"
},
"sex": {
"enum": ["m", "f"],
"default": "m",
"enum_labels": ["Male", "Female"],
"label": "Sex",
"text": "Please include your sex.",
"description": "We want to run analytics on this field"
}
UI团队和我可以就某些事情达成协议:
string
类型,请生成文本框。enum
,请生成一个组合框。label
属性。enum
类型,则通过将locationinally与enum
属性进行比较,为enum_labels
值生成漂亮的标签。text
属性。以下是这种方法的一些消极因素:
text
,如果我升级到v5,那么架构将会中断,然后我将不得不更改与UI团队的合同。 (为避免这种情况,还可以使用description
字段来保存所有与表单相关的关键字,由某些字符分隔,但它看起来不太好。)将json-schema与UI紧密结合是恰当的,如果是这样的话,为了实现这个目的,我为json-schema添加属性是否有任何问题?
*我偶然发现了jsonform,这正是我想要的,但这个问题仍然适用于jsonform
以及自定义解析器。
答案 0 :(得分:1)
可以肯定的是,您知道有一个可选的form
对象用于构造表单输出?它允许自定义分组,自定义排序,条件字段等...
https://github.com/joshfire/jsonform/wiki#fields
如果您的默认schema
对象对于表单布局以及数据对象的存储方式都是令人满意的,那么坚持使用表单布局的架构没有任何问题。
我不确定这是否能回答你的问题,但这个问题对我来说有点不清楚。基本上是的,你可以坚持主模式,但如果这对于表单布局是不够的,你可以填充form
对象。