首页 文章

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

提问于
浏览
1

swagger-spec存储库提供了JSON-schema,描述了有效的Swagger 2.0 API定义 . 我想使用此模式,以便在我尝试解释之前验证给定的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 回答

  • 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是一个扮演相同角色的第一级关键字,并且有一个字符串数组作为参数 .

    Sample of JSON Schema Draft 3:

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

    Sample of JSON Schema Draft 4:

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

    请注意两个模式的区别,即如何定义必需的属性 . 这就是您收到错误的原因:“无法将Array转换为Boolean . ”

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

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

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

相关问题