我从一些JSON文件创建了一个API规范,我试图测试这些文件是否符合API规范。有一些很好的工具来验证JSON模式,但是我没有机会找到一个工具来验证Swagger(用于创建API模式的工具)中创建的规范。我发现的唯一解决方案是在Swagger-Editor中生成一个客户端/服务器,这非常麻烦。是否已经有一个针对Swagger Schema验证JSON的工具?
ijnw1ujt1#
阿诺德在评论中说这里有两个独立的问题是正确的。是否要验证规范是否为有效的OpenAPI(fka. Swagger)规格您可以选择
或者验证此规范的实现将产生对于您的JSON模式有效的JSON?换句话说,这里有一些来自请求或响应主体的JSON,它正确吗?Swagger依赖于另一个名为JSON Schema的标准来实现其模式对象,这些对象实际上描述了JSON(而不是端点或元数据)。Swagger使用JSON Schema的一个子集(缺少:oneOf、patternProperties等)。为此,您可以使用JSON Schema验证器。有37 listed here;我将向也支持YAML模式的this online validator给予一声大喊。但是,当我说Swagger依赖于JSON API的子集时,我撒谎了。在Swagger中,有一些固定字段具有特殊的含义,它们不是JSON Schema的一部分。其中一个是discriminator,用于多态性。我不知道Swagger验证器可以处理discriminator。有一个fair number of tools用于swagger,也有一些声称可以进行验证,但许多都是废弃软件,用于旧版本,功能不完整,与其他技术绑定,等等。如果有一个成熟和维护良好的图书馆,我错过了,我很想知道。
oneOf
patternProperties
discriminator
bqucvtff2#
Atlassian's swagger-request-validator是一个Java库,它可以执行这样的验证:一个Java库,用于根据OpenAPI / Swagger规范验证请求/响应。包括对Swagger v2和OpenAPI v3规范的支持,以及用于通用模拟和测试库的适配器。核心库不绑定到任何特定的HTTP库,但它们还提供了与Spring MVC,MockMVC,REST Assured等集成的其他模块。还有一个swagger-schema-validator可以根据Swagger V2定义验证JSON文档(免责声明:我是作者)。不过,这个Java库不如Atlassian的完整。
inn6fuwd3#
如果你的Swagger JSON是托管的,你可以使用以下URL:http://online.swagger.io/validator/debug?url=your_url
3vpjnl9f4#
使用https://github.com/bjansen/swagger-schema-validator根据.yaml swagger规范对.json有效负载文件进行离线验证的最少Java代码:1.在您自己的项目中引用依赖项,如swagger-schema-validator自述文件中所述,或者使用git clone https://github.com/bjansen/swagger-schema-validator.git进行本地克隆。1.将.yaml和.json文件复制到测试根文件夹下的src/test/resources文件夹中。1.创建一个包含如下内容的测试类(确保将"/definitions/MyPayloadObjectMustBeSetHere"更改为指向您自己的定义):
.yaml
.json
git clone https://github.com/bjansen/swagger-schema-validator.git
src/test/resources
"/definitions/MyPayloadObjectMustBeSetHere"
import com.github.bjansen.ssv.SwaggerValidator; import com.github.fge.jsonschema.core.report.ProcessingReport; import static org.junit.jupiter.api.Assertions.assertEquals; @Test void SwaggerSpecTest() { InputStream spec = getClass().getResourceAsStream("/api/swagger.yaml"); SwaggerValidator validator = SwaggerValidator.forYamlSchema(new InputStreamReader(spec)); InputStreamReader sample = new InputStreamReader(getClass().getResourceAsStream("/api/payload.json")); ProcessingReport report = validator.validate(CharStreams.toString(sample), "/definitions/MyPayloadObjectMustBeSetHere"); assertEquals("success", report.toString()); // force printing the errors/warnings }
字符串
iklwldmw5#
OpenAPI 2.0 / Swagger模式在一些地方可用,只是有点难以找到,因为swagger本身大量使用了“schema”一词。
因此,您可以将通用验证器指向此模式和文档。例如,我使用vscode和Red Hat的YAML扩展就可以很好地工作。
5条答案
按热度按时间ijnw1ujt1#
阿诺德在评论中说这里有两个独立的问题是正确的。
是否要验证规范是否为有效的OpenAPI(fka. Swagger)规格
您可以选择
或者验证此规范的实现将产生对于您的JSON模式有效的JSON?
换句话说,这里有一些来自请求或响应主体的JSON,它正确吗?
Swagger依赖于另一个名为JSON Schema的标准来实现其模式对象,这些对象实际上描述了JSON(而不是端点或元数据)。Swagger使用JSON Schema的一个子集(缺少:
oneOf
、patternProperties
等)。为此,您可以使用JSON Schema验证器。有37 listed here;我将向也支持YAML模式的this online validator给予一声大喊。但是,当我说Swagger依赖于JSON API的子集时,我撒谎了。在Swagger中,有一些固定字段具有特殊的含义,它们不是JSON Schema的一部分。其中一个是
discriminator
,用于多态性。我不知道Swagger验证器可以处理discriminator
。有一个fair number of tools用于swagger,也有一些声称可以进行验证,但许多都是废弃软件,用于旧版本,功能不完整,与其他技术绑定,等等。如果有一个成熟和维护良好的图书馆,我错过了,我很想知道。bqucvtff2#
Atlassian's swagger-request-validator是一个Java库,它可以执行这样的验证:
一个Java库,用于根据OpenAPI / Swagger规范验证请求/响应。包括对Swagger v2和OpenAPI v3规范的支持,以及用于通用模拟和测试库的适配器。
核心库不绑定到任何特定的HTTP库,但它们还提供了与Spring MVC,MockMVC,REST Assured等集成的其他模块。
还有一个swagger-schema-validator可以根据Swagger V2定义验证JSON文档(免责声明:我是作者)。不过,这个Java库不如Atlassian的完整。
inn6fuwd3#
如果你的Swagger JSON是托管的,你可以使用以下URL:http://online.swagger.io/validator/debug?url=your_url
3vpjnl9f4#
Java swagger验证
使用https://github.com/bjansen/swagger-schema-validator根据
.yaml
swagger规范对.json
有效负载文件进行离线验证的最少Java代码:1.在您自己的项目中引用依赖项,如swagger-schema-validator自述文件中所述,或者使用
git clone https://github.com/bjansen/swagger-schema-validator.git
进行本地克隆。1.将
.yaml
和.json
文件复制到测试根文件夹下的src/test/resources
文件夹中。1.创建一个包含如下内容的测试类(确保将
"/definitions/MyPayloadObjectMustBeSetHere"
更改为指向您自己的定义):字符串
iklwldmw5#
OpenAPI 2.0 / Swagger模式在一些地方可用,只是有点难以找到,因为swagger本身大量使用了“schema”一词。
因此,您可以将通用验证器指向此模式和文档。例如,我使用vscode和Red Hat的YAML扩展就可以很好地工作。