2

我正在研究 OpenAPI 3 模式。

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

这是我的架构:

{
    "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它的所有嵌套属性都是必需的。

我想我在定义属性时做错了。任何帮助表示赞赏!

4

1 回答 1

1

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

以下似乎在里面工作responses.content

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

代替

"meta": {
    "type": "object",
    "required": ["page"],
    "properties": {
        "$ref": "#/components/schemas/Pagination"
    }
}
于 2020-05-14T09:52:53.077 回答