我们正在开发一种公共服务,该服务提取要存储在数据库中的JSON消息。
现在,此服务可能是许多服务中的第一个,我正在研究一种构造JSON模式的方法。我们在XML Schema方面有很多经验,但是JSON Schema对我们来说有点新。
一个想法是在每个JSON模式中包括一个 Header 部分,其中包含模式名称,主要版本和< strong>唯一的邮件ID
这是这种模式的简化版本
{
"$schema": "http://json-schema.org/draft-04/schema#",
"id": "http://www.example.com/json/01/sampleMessage",
"type": "object",
"title": "Sample Message for stackoverflow",
"description": "version 01.01",
"properties": {
"Header": {
"$ref": "#/definitions/Header"
},
"EanGsrn": {
"description": "Unique identifier of the Headpoint.",
"type": "string",
"pattern": "^[0-9]{18}$"
},
"Sector": {
"description": "Sector for which the Headpoint is valid.",
"type": "string",
"enum": [
"Electricity", "Gas"
]
}
},
"additionalProperties": false,
"required": [
"Header", "EanGsrn", "Sector"
],
"definitions": {
"Header": {
"id": "#Header",
"type": "object",
"description": "Standard header for all messages",
"properties": {
"Schema": {
"description": "$id of the schema of this message",
"type": "string",
"enum": ["http://www.example.com/json/01/sampleMessage"]
},
"Version": {
"description": "The specific version of the shema of this message",
"type": "string",
"pattern": "^01\\.[0-9]{2,3}$"
},
"MessageId": {
"description": "Unique identifier for the Message",
"type": "string",
"pattern": "^[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$"
}
},
"required": [
"Schema", "Version", "MessageId"
],
"additionalProperties": false
}
}
}
这样做的优点应该是:
答案 0 :(得分:0)
没有“最佳实践”来定义JSON实例如何标识它应符合HTTP请求之外的模式。
用于定义架构的规范provides a header name,但这仅在您的JSON数据始终通过HTTP提供时才有效。
与您的系统类似的其他系统也将此信息包含在JSON数据中作为标题部分,但是没有规范本身详述的已定义“最佳实践”或方法。