当前位置: 首页 > 知识库问答 >
问题:

`$ref`-在OpenAPI 3中的#/components/schemas顶级位置上设置多个文件

逑景铄
2023-03-14

在我的API中,我有很多很多数据结构(模型),将它们组织到单独的文件中是很有帮助的。例如,我有文件widgets.a.yaml:

WidgetA1:
  # schema def
WidgetA2:
  # schema def

widgets.b.yaml中的另一个defs集合:

WidgetB1:
  # schema def
WidgetB2:
  # schema def

现在在我的主要OpenAPI定义中,如果我这样做:

# ...
# other OpenAPI def stuff
# ...
components:
  schemas:
    { $ref: widgets.a.yaml }
# ...
# ther OpenAPI def stuff
# ...
components:
  schemas:
    { $ref: widgets.a.yaml }
    { $ref: widgets.b.yaml }

与此相关的是,我甚至更喜欢在OpenAPI文档的#/components/schemas部分“嵌套”模型...例如,引用像#/components/schemas/widgets.a/widgeta1这样的小部件。但是,OpenAPI文档的#/components/schemas部分似乎是“平坦的”(即平坦的命名空间),并且所有模型在该列表中必须有一个“全局的”唯一键...是真的吗?我可以找到关于组织纯JSON模式项目的各种方法的文档,但是想要使用Swagger进行文档说明需要遵守OpenAPI,而且在这些API规范中似乎没有很多组织大型数据模型的既定模式。(这里的“large”表示数百个类/型号。)

共有1个答案

袁鸿达
2023-03-14

在OpenAPI中,您只能引用单个模式。这意味着您需要在components/schemas部分中重新定义架构名称,并将每个名称指向相应的架构定义:

components:
  schemas:
    WidgetA1:
      $ref: widgets.a.yaml#/WidgetA1
    WidgetA2:
      $ref: widgets.a.yaml#/WidgetA2
    WidgetB1:
      $ref: widgets.b.yaml#/WidgetB1
    ...

不支持直接在组件/架构下“导入”整个文件,即以下内容无效:

components:
  schemas:
    $ref: widgets.a.yaml

所有模型在列表中必须有一个“全局”唯一的键...是真的吗?

components:
  schemas:
    MyNamespace1.WidgetA1:
      ...
    AnotherNamespace.WidgetB2:
      ...
 类似资料:
  • 2.1节~2.4节通过缓冲类型几何体BufferGeometry给大家讲解了顶点位置、颜色、法向量、索引数据,本节课给大家引入一个新的threejs几何体APIGeometry。几何体Geometry和缓冲类型几何体BufferGeometry表达的含义相同,只是对象的结构不同,Threejs渲染的时候会先把Geometry转化为BufferGeometry再解析几何体顶点数据进行渲染。 Vect

  • 问题内容: 如何在Java中的long的特定位置设置/取消设置位? 例如, 我想在位置2设置位,在位置3取消设置位,因此相应的long将是, 有人可以帮我怎么做吗? 问题答案: 要设置一点,请使用: 擦除一下使用: 切换一下用途: 请注意,我使用0b?。您也可以使用任何整数,例如: 但是,这使得更难知道正在更改哪个位。 使用二进制可让您查看将要设置/擦除/切换的确切位。 要动态设置位,请使用: 将

  • 我试图找出如何控制一个XYLineChart的2个不同XYSeries的标签。例如,我有一个直线系列显示房屋的实际市场价值,另一个直线系列显示最大评估价值。但是,行上的某些标签重叠。我能够通过访问XYItemRenderer和ItemLabelPosition来控制线的整体标记,但这是一个整体。我需要调整每一行上的标签。有什么建议吗?谢谢

  • 请求header POST /v1/activity/{频道id}/comments/{评论id}/top Authorization:Bearer {ACCESS TOKEN} Content-Type:application/json 注: 请将上方的{ACCESS TOKEN}替换为您的ACCESS TOKEN 请将"{频道id}"替换为您的频道id 请将"{评论id}"替换您需要置顶/取

  • 问题内容: 我正在尝试遵循本教程来启用对MySQL的远程访问。问题是,文件应该放在哪里?我正在使用Mac OS X Lion。 问题答案: MySQL论坛上的该线程说: 默认情况下,OS X安装不使用my.cnf,而MySQL仅使用默认值。 要设置自己的my.cnf,您可以直接在/ etc中创建一个文件。 OS X在提供了示例配置文件。 而且,如果您在此处找不到它们,MySQLWorkbench可

  • 我有以下项目结构 上述项目结构的思想是:多个项目包含多个子项目,每个项目都可以依赖于其他项目。此外,项目中的子项目可能与同一项目中的其他子项目有依赖关系。项目将在根中的settings.gradle中指定。同时,每个项目中的gradle会说出该特定项目的子项目是什么。 我的设置.根部的Gradle看起来像 和Project1设置。Gradle将看起来像 其他依赖关系顺序是在相应的build.gra