使用官方Swagger API架构验证Swagger API声明

时间:2014-10-03 12:49:49

标签: json json.net swagger

swagger-spec存储库提供了描述有效Swagger 2.0 API定义的JSON-schema。 我想使用此模式,以便在我尝试解释之前验证给定的API定义文件是否有效。 我正在使用以下代码使用Json.NET加载架构:

JsonSchema swaggerApiSchema;
using (var textReader = new JsonTextReader(new StreamReader(@"C:\path\to\schema.json")))
{
    swaggerApiSchema = JsonSchema.Read(textReader);
}

抛出ArgumentException报告“无法将数组转换为布尔值。”。

架构文件有什么问题,这是Json.NET的一个错误,还是我做错了什么?

1 个答案:

答案 0 :(得分:2)

根据文档,JSON.NET实现了JSON Schema Draft 3.更多here。但是您发布的Swagger架构是根据JSON Schema Draft 4创建的.JSON Schema草案3和草案4之间的差异之一是必需属性,在JSON Schema Draft 3中属性是子属性的属性。在JSON Schema中,Draft 4是一个扮演相同角色的第一级关键字,并且有一个字符串数组作为参数。

JSON架构草案3的示例:

{
    "properties": {
        "Id": {
            "required": true,
            "type": "integer"
        },
        "FirstName": {
            "required": true,
            "type": "string",
        },
        "LastName": {
            "required": true,
            "type": "string
        }
    }
}

JSON架构草案4的示例:

{
    "properties": {
        "Id": {
            "type": "integer"
        },
        "FirstName": {
            "type": "string"
        },
        "LastName": {
            "type": "string"
        }
    },
    "required": [ "Id", "FirstName", "LastName" ]
}

注意两个模式的区别,即如何定义必需的属性。这就是您收到错误的原因:"无法将数组转换为布尔值。"。

这是Swagger JSON Schema中首次出现必需属性,导致错误:

"required": [ "swagger", "info", "paths" ]

我建议使用实现JSON Schema Draft 4的解析器进行验证。