什么是引用?

一个引用是一个关键字和值,它使用 URI 标识一个引用目标。在某些情况下,此 URI 可以被视为 URL 并直接取消引用。在其他情况下,正如我们在即将发布的解析引用的指南中所见,将目标的标识与其位置分开是有帮助的。

外部引用是将多个文档链接到单个 OpenAPI 描述 (OAD) 的方式。这意味着引用会影响其他链接的工作方式,例如使用组件对象名称或 operationId 等值的链接。只有当包含名称或其他标识符的文档(或使用许多工具时,包含特定 JSON 对象的文档)被引用时,这些其他链接才能正常工作。

引用分类

如以下表格所示,引用在 OpenAPI 规范 (OAS) 版本 3.0 和 3.1 中存在多种变体。请注意,一个相邻关键字是与引用关键字位于同一 JSON 对象中的关键字(无论它是用 JSON 还是 YAML 编写)。

OAS 版本 对象 引用关键字 相邻关键字 行为
3.0 引用对象 "$ref" 忽略 在逻辑上将引用对象替换为引用目标
3.1 引用对象 "$ref" "summary""description" 允许;其他忽略 在逻辑上将引用对象替换为目标的副本,如果存在,则用引用对象的 "summary" 和/或 "description" 字段覆盖目标的 "summary" 和/或 "description" 字段
3.x 路径项对象 "$ref" 在某些情况下允许 在逻辑上将包含 "$ref" 的路径项对象替换为一个路径项对象,该对象将目标路径项对象的字段与包含 "$ref" 的路径项对象的非 "$ref" 字段组合在一起,只要这些字段不冲突
3.1 模式对象 "$ref" 允许 将目标模式对象应用于与包含 "$ref" 的模式对象相同的实例位置,并将结果与包含 "$ref" 的模式对象的 其他关键字的结果组合在一起;这大致相当于使用一个元素的 "allOf"
3.x 链接对象 "operationRef" 允许,除了 "operationId" 将引用目标视为链接对象所描述的链接的目标
3.x 鉴别器对象 "mapping" n/a 对于 "mapping" 下的每个名称,如果该值不是组件对象下的模式对象名称,则将其视为对模式的引用,当鉴别器字段匹配映射名称时使用该模式

请注意,并非所有引用都通过用目标替换源来处理。有些是根据行为定义的,不能用内联值替换。