将 OpenApi 路径拆分为多个路径定义文件

2023-11-27

我想更轻松地将我的路径(相当多)分割成它们自己的文件。

假设我有两条主要路径/user and /anotherPath有几个子路径。现在我有了一个 OpenApi 规范文件,其路径被引用到一个索引文件,该索引文件保存对每个路径的引用。用其参考定义每条路径是可行的,但写起来很笨拙。

我想要这样的东西:

openapi.json

{
...
  "paths": {
    "$ref": "paths/index.json"
  }
...
}

路径/index.json

{
  "/user": { // and everything that comes after user, e.g. /user/{userId}
    "$ref": "./user-path.json"
  },
  "/anotherPath": {  // and everything that comes after anotherPath, e.g. /anotherPath/{id}
    "$ref": "./anotherPath-path.json"
  }
}

路径/用户路径.json

{
  "/user": {
    "get": {...}
  },
  "/user/{userId}": {
    "get": {...}
  }
}

路径/anotherPath-path.json

{
  "/anotherPath": {
    "get": {...}
  },
  "/anotherPath/{id}": {
    "get": {...}
  }
}

这样,每当我添加另一条路径时/user or /anotherPath,我可以简单地编辑它们各自的路径文件,例如路径/用户路径.json。

EDIT1:显然,这个话题已经在讨论了..对于任何感兴趣的人:https://github.com/OAI/OpenAPI-Specification/issues/417。顺便说一下,我知道一个$ref无效于paths对象,但一旦弄清楚如何正确拆分,这可能就不再需要了。


OpenAPI 没有子路径/嵌套路径的概念,每个路径都是一个单独的实体。这paths关键字本身不支持$ref,仅个别路径可以参考.

鉴于你的用户路径.json and anotherPath-path.json文件中,引用路径定义的正确方法如下:

{
  ...
  "paths": {
    "/user": {
      "$ref": "paths/user-path.json#/~1user"  // ~1user is /user escaped according to JSON Pointer and JSON Reference rules
    },
    "/user/{id}": {
      "$ref": "paths/user-path.json#/~1user~1%7Bid%7D"  // ~1user~1%7Bid%7D is /user/{id} escaped 
    },
    "/anotherPath": {
      "$ref": "paths/anotherPath-path.json#/~1anotherPath"  // ~1anotherPath is /anotherPath escaped
    },
    "/anotherPath/{id}": {
      "$ref": "paths/anotherPath-path.json#/~1anotherPath~1%7Bid%7D"  // ~1anotherPath~1%7Bid%7D is /anotherPath/{id} escaped
    }
  }
  ...
}

YAML 版本:

paths:
  /user:
    $ref: "paths/user-path.json#/~1user"
  /user/{id}:
    $ref: "paths/user-path.json#/~1user~1%7Bid%7D"
  /anotherPath:
    $ref: "paths/anotherPath-path.json#/~1anotherPath"
  /anotherPath/{id}:
    $ref: "paths/anotherPath-path.json#/~1anotherPath~1%7Bid%7D"


如果你想使用$ref在任意地方(OAS 允许 $refs 的地方除外),您必须使用可以解析任意 $refs 的解析器/工具来预处理您的定义;这将为您提供一个有效的 OpenAPI 文件,该文件可与 OpenAPI 兼容工具一起使用。一种这样的预处理工具是json 引用,你可以找到一个预处理的例子here.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 OpenApi 路径拆分为多个路径定义文件 的相关文章

随机推荐

  • unix shell 中的数组?

    如何在 unix shell 脚本中创建数组 以下代码在 shell 中创建并打印字符串数组 bin bash array A B ElementC ElementE for element in array do echo element
  • 在 iPhone 上按下控制器时翻转动画

    我环顾四周 没有找到我真正想要的东西 有没有办法在推动视图控制器时获得翻转动画 我读到您可以通过使用模态视图控制器来更改动画 但据我所知模态视图的动画是从下到上的 这不是我想要的 有没有办法以某种方式获得翻转动画 像这样的东西应该有效 UI
  • 从控制台读取字符

    我编写控制台应用程序 它对 int 执行多次 scanf 之后 我执行 getchar int x y char c printf x n scanf d x printf y n scanf d y c getchar 结果我得到c n
  • 带 lapply 和 sapply 的日期

    我导入了一个包含大量日期的 CSV 文件 并使用 as Date 函数来转换日期 但是 当我使用 mapply 函数查找两个日期中较早的一个时 我最终要么得到一个包含日期的列表 要么得到一个数字向量 如何获得带有日期的向量 POP Star
  • 如何在没有原始 Markdown 输出的情况下使用 knitr 块将元素添加到绘图中?

    出于记录目的 我想要一些 html 输出中的情节代码 但不是情节 后来 我必须调用绘图代码 并向绘图添加一些内容 但只能看到附加代码 我试过这个 r non finished plotting eval FALSE plot 1 type
  • 我可以从 android webview 打开 Whatsapp 应用程序吗

    我制作了一个网站的网络视图 现在我想将我的网络视图中的一些数据共享到 Whatsapp 应用程序 我能够打开 Whatsapp 网页 但我的客户希望我打开 Whatsapp 应用程序而不是 Whatsapp 网页 我怎样才能做到这一点 这就
  • 最大自定义窗口失去投影效果

    我有一个自定义 WPF 窗口定义为
  • 错误 BC30456:“[方法]”不是“ASP.[CodeBehind]_aspx”的成员

    很简单的问题 我非常确定我已经正确链接了类 方法 代码隐藏等 网上很多帖子都说这与编译和 或 dll bin 文件有关 但他们的帮助都对我不起作用 Compiler Error Message BC30456 gvLegs PageInde
  • 如何在 Windows 上使用 Python 捕获 SIGINT?

    如同这个问题 在 Python 2 7 下的 UNIX 上 在 Python 提示符下 gt gt gt import signal gt gt gt def handler signal frame print welcome to th
  • 如何使用ID删除NDB实体?

    基于此文档https developers google com appengine docs python ndb entities deleting entities好吧 我仍然不确定为什么我不能在 NDB 上进行删除 def get
  • 与 JComponent 相比,在 JPanel 上绘画有什么好处?

    所以在最近的一个回答中 有人评论了这一点 关于绘画 这可能是 90 Swing 程序员的某种毛病 当他们制作自己的组件时 他们总是扩展 JPanel 而不是 JComponent 为什么呢 我对编程还很陌生 所以我认为现在称自己为 Swin
  • 从另一个apk获取资源

    我整天都在为这个问题苦苦挣扎 但没有成功 我基本上是想从另一个应用程序获取图像资源 因此 如果 com example app 在 res 文件夹中有一个名为 image1 png 的图像 我希望 com example2 app 能够访问
  • AutoMapper 将目标对象的属性设置为 null

    我有这样的事情 public class DomainEntity public string Name get set public string Street get set public IEnumerable
  • 将私钥添加到 X509Certificate

    我正在编写一些当前使用 OpenSSL net 为证书签名请求创建公钥 私钥对的代码 该请求配备有公钥并发送到 CA CA 返回签名证书 然后将之前创建的私钥添加到证书中 myCert PrivateKey CryptoKey FromPr
  • 如何从 AWS SAM 获取堆栈输出?

    我想对我的无服务器项目执行自动集成测试 为此 我需要以某种方式获取 api 端点 已经有插件 serverless stack output用于服务于该目的的无服务器框架 但我想知道在部署应用程序后如何通过 AWS SAM 实现类似的目标
  • 客户端向服务器发送延迟的 FIN ACK(约 500 毫秒)

    我有一个 node js 客户端 10 177 62 7 请求来自服务器 10 177 0 1 的 http Rest 服务的一些数据 客户端只需使用node js http request 方法 agent false 客户端位于 Ubu
  • 如何修复“'ddlAssignedTo' 有一个无效的 SelectedValue,因为它不存在于项目列表中

    我加载网格视图 网格视图有一个编辑和删除按钮 我点击 编辑 然后我得到 ddlAssignedTo has a SelectedValue which is invalid because it does not exist in the
  • 异常的 C++[Bug]?

    我一直在阅读Exceptional C by Herb Sutter 到达时Item 32 我发现了以下内容 namespace A struct X struct Y void f int void g X namespace B voi
  • 如何使 Playground 执行时间像我们在 iOS 应用程序中运行一样快

    我发现游乐场的执行速度并不可靠 例如使用代码 import UIKit var count 0 let startTime NSDate for i in 1 10000 count let endTime NSDate let inter
  • 将 OpenApi 路径拆分为多个路径定义文件

    我想更轻松地将我的路径 相当多 分割成它们自己的文件 假设我有两条主要路径 user and anotherPath有几个子路径 现在我有了一个 OpenApi 规范文件 其路径被引用到一个索引文件 该索引文件保存对每个路径的引用 用其参考