将模式名称包含在JSON文档中是一个好主意吗

时间:2019-06-04 08:52:23

标签: json jsonschema

我们正在开发一种公共服务,该服务提取要存储在数据库中的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
        }
    }
}

这样做的优点应该是:

  • 有关模式或主要版本错误的消息将在模式验证步骤中立即被拒绝。
  • JSON本身包含有关其架构和版本的信息,使以后需要调查问题的人员的工作变得更加轻松。

问题

  • 这是平常的吗,还是JSON世界中有其他最佳实践来处理这样的事情?
  • 这是个好主意吗,我在这里遗漏了明显的东西吗?

1 个答案:

答案 0 :(得分:0)

没有“最佳实践”来定义JSON实例如何标识它应符合HTTP请求之外的模式。

用于定义架构的规范provides a header name,但这仅在您的JSON数据始终通过HTTP提供时才有效。

与您的系统类似的其他系统也将此信息包含在JSON数据中作为标题部分,但是没有规范本身详述的已定义“最佳实践”或方法。