【问题标题】:OpenApi file with multiple/consecutive $ref elements in paths is giving duplicate mapping key路径中具有多个/连续 $ref 元素的 OpenApi 文件给出了重复的映射键
【发布时间】:2021-10-26 11:03:06
【问题描述】:

我有以下 OpenAPI 文件,我的目的是在其自己的 yaml 文件中定义员工、客户、项目端点。但是,使用下面的代码会导致“重复映射键”错误——这是因为使用了“$ref”(连续)。有没有办法实现这种隔离?

openapi: 3.0.3
info:
  title: example  
servers:
  - url: https://example.net/api
security:
  - apiKey: []
paths:
  $ref: './employee/resource.api.yaml'
  $ref: './projects/resource.api.yaml'
  $ref: './customers/resource.api.yaml'

已更新文件内容: 员工/resource.api.yaml

/employee/{id}
  get:
  ...
/employee/{id}/addresses
  get:
  ...

项目/resource.api.yaml

/projects/{id}
  get:
  ...
  put:
  ...
/projects/{id}/files
  get:
  ...
/projects/{id}/fies/{fileName}/Content
  get:
  ...

【问题讨论】:

标签: yaml openapi


【解决方案1】:

paths 节点本身不支持$ref。您只能引用单个路径的内容:

paths:
  /employee/{id}:
    $ref: './employee/employeeById.yaml'

  /projects/{id}:
    $ref: './project/projectById.yaml'

员工/employeeById.yaml:

get:
  operationId: ...
  summary: ...
  ...

project/projectById.yaml:

get:
  operationId: ...
  summary: ...
  ...

put:
  operationId: ...
  summary: ...
  ...

或者,如果您想保持当前的 resource.api.yaml 文件不变,$refs 将如下所示。有关 #/... 指针如何在 $ref 值中编码的说明,请参阅 this answer

paths:
  /employee/{id}:
    $ref: './employee/resource.api.yaml#/employee~1%7Bid%7D'

  /employee/{id}/addresses:
    $ref: './employee/resource.api.yaml#/employee~1%7Bid%7D~1addresses'

  /projects/{id}:
    $ref: './project/resource.api.yaml#/projects~1%7Bid%7D'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-17
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2011-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多