使用官方Swagger API模式验证Swagger API声明



swagger-spec存储库提供了一个描述有效swagger 2.0 API定义的JSON-模式。我想使用这个模式来验证给定的API定义文件是否有效,然后再尝试解释它。我使用以下代码使用Json.NET加载架构:

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

这引发ArgumentException报告"无法将数组转换为布尔值"。

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

根据文档,JSON.NET实现了JSON Schema Draft 3。点击此处了解更多信息。但是您发布的Swagger模式是根据JSONSchemaDraft4创建的。JSON模式的草案3和草案4之间的一个区别是必需的属性,在JSON模式草案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模式中第一次出现所需属性,这导致了错误:

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

我建议使用实现JSONSchemaDraft4的解析器进行验证。

相关内容

  • 没有找到相关文章

最新更新