我试图将openapi.json
导入Insomnia以生成集合,但Insomnia说它无效。
FastAPI/Swagger和Insomnia的规则集是否有差异?如果没有,是什么原因导致兼容性差异?
下面是一个自动生成的OpenAPI规范的精简示例:
{
"openapi": "3.0.2",
"info": {
"title": "Test API",
"description": "description",
"contact": {
"name": "example",
"url": "https://example.com/contact-us/",
"email": "example@example.com"
},
"license": {
"name": "Copyright 2023 example"
},
"version": "0.0.1"
},
"paths": {
"/test_build": {
"get": {
"tags": [
"Test endpoints"
],
"summary": "Test",
"description": "",
"operationId": "test_build_get",
"responses": {
"200": {
"description": "Successful Response",
"content": {
"application/json": {
"schema": {}
}
}
}
}
}
},
"/api/search_something": {
"get": {
"tags": [
"Main endpoints"
],
"summary": "Search something",
"description": "",
"operationId": "search_something_get",
"parameters": [
{
"required": false,
"schema": {
"title": "something",
"maximum": 50.0,
"exclusiveMinimum": 0.0,
"type": "integer",
"default": 50
},
"name": "something",
"in": "query"
}
],
"responses": {
"200": {
"description": "Successful Response",
"content": {}
}
}
}
}
}
}
Insomnia出于多种原因拒绝了这一点,但这里有一些错误和警告的例子:
- oas 3-api-servers OpenAPI“服务器”必须存在且为非空数组。
- operation-tag-defined操作标记必须在全局标记中定义。
- oas 3-schema“exclusiveMinimum”属性类型必须为布尔值。
- oas 3-valid-schema-示例架构无效:存在exclusiveMinimum属性时,数据必须具有minimum属性
有没有办法让FastAPI的openapi.json文件符合Insomnia的规则集?
1条答案
按热度按时间q8l4jmvw1#
oas 3-schema“exclusiveMinimum”属性类型必须为布尔值。
exclusiveMinimum
和exclusiveMaximum
被生成为数字而不是布尔值是Pydantic的known issue。Pydantic根据JSON Schema Draft 6+将这些关键字生成为数字,但OpenAPI 3.0.x使用早期的JSON Schema Draft 5,其中exclusive*
关键字是布尔值。如果/当FastAPI和Pydantic迁移到OpenAPI 3.1时,这不会是一个问题,因为它使用最新的JSON Schema。
但如果需要使用OpenAPI 3.0.x,您有以下选项。
选项1:使用
ge
/le
而不是gt
/lt
(如果适用)对于integer参数和schema字段,最简单的修复方法是使用
ge
/le
属性(“大于/小于 * 或等于 *”)而不是gt
/lt
(“大于/小于”)。例如,如果最大值为50(包括50),则使用le=50
而不是lt=51
:Pydantic将
le
转换为maximum
,将ge
转换为minimum
,而不使用exclusive*
。选项2:后处理OpenAPI文件
另一种解决方案是对生成的OpenAPI文件(例如as suggested here)进行后处理,并替换
与
同样,替换
与