openapi - 在 OpenAPI 中,我可以使用常规模式组件作为参数吗?
问题描述
我在我的 API 中定义了一个带有路径参数的端点。
该参数的有效值已表示为枚举,我已将其定义为模式组件并在响应中使用。
两个问题:
- 如果您可以只使用对该架构组件的引用作为参数,为什么还要设置专用的参数组件,而不是使用可以在任何地方重复使用的通用架构组件?
- 如果你应该使用参数而不是通用模式,你可以创建一个引用模式组件的参数组件吗?我找不到任何可以通过验证的语法来执行此操作。
我会在这里粘贴我的定义,但我找不到任何不会造成可怕混乱的格式选项。
解决方案
如果您可以只使用对该架构组件的引用作为参数,为什么还要设置专用的参数组件,而不是使用可以在任何地方重复使用的通用架构组件?
参数定义具有模式中不存在的附加属性,例如请求中的参数位置(in: path
、in: query
等)、数组和对象值的序列化方法等。Aschema
只是参数属性之一,但仅模式并不能提供足够的信息来有效地描述参数。
您可以创建一个引用模式组件的参数组件吗?
是的。参数有一个schema
,它可以是一个内联模式或一个$ref
:
paths:
/something/{role}:
get:
parameters:
- $ref: '#/components/parameters/role'
...
components:
parameters:
role:
in: path
name: role
required: true
schema:
$ref: '#/components/schemas/UserRole' # <-----
schemas:
UserRole:
type: string
enum: [user, admin]
推荐阅读
- machine-learning - 如何从 Fastai 学习器语言模型中的编码器获取句子嵌入
- mysql - 如何从工作台将我的表上的数据库(mysql)报告导出到excel
- javascript - 在 Google 表格中使用 MailMerge 的 toLocaleDateString 和 Date.Prototype 出现问题
- reactjs - 面包屑反应代码不起作用,我该如何解决?
- haskell - 如何将 `throwM` 与 `Except` 一起使用?
- bazel - 带有 protobuf / gRPC-gateway / golang 的 bazel - 入门
- angular - 将带有 rxjs 的 Angular 5 模块导入 Angular 8 应用程序
- ios - Firebase Firestore collectionGroup()查询方法无法识别 - swift
- acumatica - 如何在报表设计器中通过 URL 引用外部图像?
- php - MySQL阻止用户从其他用户那里获取代码