如何验证组件架构中的嵌套属性(Postman 中的 openapi 3)



我正在研究OpenAPI 3模式。

我想在响应内容中使用components.schemas中的数据模型,并在该数据模型中具有一些必需的嵌套属性。但是,似乎没有应用required验证。我正在使用模拟服务器在邮递员中对此进行测试。

这是我的架构:

{
"openapi": "3.0.0",
"info": {
"version": "1.0.0",
"title": "Usage stats API"
},
"servers": [
{
"url": "http://some-middleware-endpoint.com"
}
],
"paths": {
"/publishers/{publisherId}/files/{fileId}": {
"get": {
"summary": "Get single file for publisher",
"parameters": [
{
"name": "publisherId",
"in": "path",
"description": "ID of the publisher",
"required": true,
"schema": {
"type": "integer",
"format": "int64"
}
},
{
"name": "fileId",
"in": "path",
"description": "ID of the file",
"required": true,
"schema": {
"type": "integer",
"format": "int64"
}
}
],
"responses": {
"200": {
"description": "File for publisher",
"headers": {
"Content-Type": {
"description": "application/json"
}
},
"content": {
"application/json": {
"schema": {
"type": "object",
"required": [
"meta"
],
"properties": {
"meta": {
"type": "object",
"required": ["page"],
"properties": {
"$ref": "#/components/schemas/Pagination"
}
}
}
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"Pagination": {
"properties": {
"page": {
"required": ["current-page", "per-page", "from", "to", "total", "last-page"],
"type": "object",
"properties": {
"current-page": {
"type": "integer"
},
"per-page": {
"type": "integer"
},
"from": {
"type": "integer"
},
"to": {
"type": "integer"
},
"total": {
"type": "integer"
},
"last-page": {
"type": "integer"
}
}
}
}
}
}
}
}

此响应通过验证:

{
"meta": {
"page": {}
}
}

即使我要求的所有属性("required": ["current-page", "per-page", "from", "to", "total", "last-page"](都不存在。

基本上,我希望page及其所有嵌套属性都是必需的。

我想我在定义属性时做错了什么。任何帮助不胜感激!

哦,好吧,我想我的问题是将$ref拉高一级。

以下内容似乎在responses.content内部有效。

"meta": {
"type": "object",
"required": [
"page"
],
"$ref": "#/components/schemas/Pagination"
}

而不是

"meta": {
"type": "object",
"required": ["page"],
"properties": {
"$ref": "#/components/schemas/Pagination"
}
}

最新更新