我们希望有一个系统,允许我们定义数据模式,我们可以用它来验证我们的数据,并生成特定语言的代码。我们找到了 json 模式,它可以让我们做类似的事情
文件“message.json.schema”
{
"$schema": "https://json-schema.org/draft/2019-09/schema",
"title": "Message",
"properties": {
"name": {
"type" : "string"
},
"type": {
"$ref": "type/message_type.schema.json"
},
"message_id":{
"$ref": "type/uuid.schema.json"
}
},
"required": ["name", "message_id"]
}
文件“message_type.json.schema”
{
"$schema": "https://json-schema.org/draft/2019-09/schema",
"title": "MessageType",
"enum": ["Message", "Query"]
}
文件“uuid_type.json.schema”
{
"$schema": "https://json-schema.org/draft/2019-09/schema",
"title": "UUID",
"type": "string",
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$"
}
文件“query.json.schema”
{
"$schema": "https://json-schema.org/draft/2019-09/schema",
"title": "Query",
"allOf" : [ {"$ref": "type/message.schema.json" }],
"required": ["type"]
}
如果有什么不合理的地方请忽略,但重点是,我们真的很喜欢这个系统,因为它允许我们定义类型,并引用我们在另一个文件中创建的类型,甚至可以像使用类型一样使用它们遗产。
然后我们想使用这些文件进行代码生成和验证。然后在 python 中,我们使用一个名为python_jsonschema_objects的库,它可以解析这些文件以及它递归引用的文件,然后我们可以真正简单地创建一个包含所有验证的 python 对象。
但是我们也想将它们用于 Java/Kotlin,但是我们发现jsonschema2pojo的库似乎无法解析链接文件,因为所有内容都在同一个文件中。
这让我们认为,不幸的是,由于某种原因,Json Schema 没有得到支持或使用。
因此,我们有一个问题,像 Avro 或 OpenAPI 这样的系统是否会得到更好的支持和更广泛的使用,并且是否可以被选择用于此类任务。