swagger 文件中的嵌套引用

问题描述 投票:0回答:1

我的 swagger.yml 文件包含对参数和模式的单独文件的引用:

components:
  schemas:
    User:
     $ref: 'http://servername/schemas.yml/#/User'
  parameters:
    email:
      $ref: 'http://servername/parameters.yml/#/email'

parameters.yml 文件中的 email 参数示例:

email:
  name: "email"
  description: "email of a user"
  in: path
  required: True
  schema:
    type: "string"

我的 single_path_apis.yml 文件包含用于 API 调用的不同 CRUD 函数:

user_by_email:
  get:
    operationId: "routes.users.fetch_user"
    tags:
      - Users
    summary: "Queries specific user in the database"
    parameters:
      - $ref: 'http://servername/parameters.yml/#/email'
    responses: 
      "200": 
        description: "Queried user"

在 swagger.yml 文件中,我使用以下方式导入上面的函数:

paths:
  /user/{email}:
    $ref: 'http://servername/single_path_apis.yml/#/user_by_email'

当我尝试启动我的应用程序时,出现以下错误:“path_parameters = (p for p in self.parameters if p["in"] == "path")"。

这种情况发生在所有像“/path/{parameter}”这样的路径上,但不会发生在像“/path”这样的路径上(模式被正确导入,所以不确定参数哪里出了问题)...

打印出读入的参数时,我得到 [{'$ref': 'http://servername/parameters.yml/#/email'}],所以我认为参数没有被解析。

python yaml swagger openapi
1个回答
0
投票

您的 uri 似乎不正确

$ref
uri 需要在文件名末尾包含
#
,然后您就可以引用子模式。

例如

components:
  schemas:
    User:
     $ref: 'http://servername/schemas.yml#/User'
  parameters:
    email:
      $ref: 'http://servername/parameters.yml#/email'
© www.soinside.com 2019 - 2024. All rights reserved.