首页 > 解决方案 > 路径中具有多个/连续 $ref 元素的 OpenApi 文件给出了重复的映射键

问题描述

我有以下 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'

更新了文件内容: employee/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:
  ...

标签: yamlopenapi

解决方案


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

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

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

员工/employeeById.yaml:

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

项目/projectById.yaml:

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

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

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

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'

推荐阅读