json-schema 中的自由形式子对象

Freeform subobject in json-schema

我正在用 swagger.io 起草一份 API 文档,并试图使其适合我们的用例。系统将接收和处理来自所有来源的数据,每个来源都有不同的字段集。

虽然处理的产品共享相同的架构,但我们也希望将输入包含在架构中以供参考。例如,给定

{
    "foo": "bar"
    "bar": "baz"
}

处理后的产品是

{
    "original": {
        "foo": "bar",
        "bar": "baz"
    }
    "processed": {
        "stdFieldA": "bar",
        "stdFieldB": "baz"
    }
}

假设对于来自不同来源的每个输入,我们最终有 stdFieldAstdFieldB。所以我们有响应模式对象

type: object
properties:
    processed:
        type: object
        properties:
            stdFieldA:
                type: string
            stdFieldB:
                type: string

现在我们已经定义了 processed 子对象,我们可以为原始输入定义一个自由形式的对象,以便这个来自另一个来源的对象是有效的

{
    "alpha": "lorem",
    "beta": "ipsum"
}

如果我没有得到任何答案,我的解决方法是将原始输入存储为字符串(将原始输入转换为 JSON 字符串)。

type: object 没有 properties 描述了一个 free-form 对象。所以响应模式可以是:

type: object
properties:
    original:
        type: object    # <----------
    processed:
        type: object
        properties:
            stdFieldA:
                type: string
            stdFieldB:
                type: string