OpenAPI中如何定义全局参数?

2024-03-07

我正在准备我的 API 文档,方法是手工完成,而不是自动生成。我有应该发送到所有 API 的标头,但不知道是否可以为整个 API 全局定义参数?

其中一些标头是静态的,有些必须在调用 API 时设置,但它们在所有 API 中都是相同的,我不想为每个 API 和每个方法复制和粘贴参数,因为这不会未来可维护。

我通过 API 定义看到了静态标头,但没有一个文档说明如何设置或使用它们。

这到底有可能吗?


这取决于它们是什么类型的参数。

下面的示例采用 YAML(为了便于阅读),但您可以使用http://www.json2yaml.com http://www.json2yaml.com将它们转换为 JSON。

安全相关参数:授权标头、API 密钥等。

用于认证和授权的参数,例如Authorization标头,API key https://stackoverflow.com/q/1453073/113116、 API 密钥对等应定义为安全方案而不是参数。

在你的例子中,X-ACCOUNT看起来像 API 密钥,因此您可以使用:

swagger: "2.0"
...

securityDefinitions:
  accountId:
    type: apiKey
    in: header
    name: X-ACCOUNT
    description: All requests must include the `X-ACCOUNT` header containing your account ID.

# Apply the "X-ACCOUNT" header globally to all paths and operations
security:
  - accountId: []

或者在 OpenAPI 3.0 中:

openapi: 3.0.0
...

components:
  securitySchemes:
    accountId:
      type: apiKey
      in: header
      name: X-ACCOUNT
      description: All requests must include the `X-ACCOUNT` header containing your account ID.

# Apply the "X-ACCOUNT" header globally to all paths and operations
security:
  - accountId: []

工具可以以不同于通用参数的方式处理安全方案参数。例如,Swagger UI 不会在操作参数中列出 API 密钥;相反,它将显示“授权”按钮,您的用户可以在其中输入他们的 API 密钥。

通用参数:偏移量、限制、资源 ID 等。

OpenAPI 2.0和3.0没有全局参数的概念。现有的功能请求:
允许在所有端点之间共享响应和参数 https://github.com/OAI/OpenAPI-Specification/issues/1577
将多个参数定义分组以获得更好的可维护性 https://github.com/OAI/OpenAPI-Specification/issues/445

您最多能做的就是在全局中定义这些参数parameters部分(在 OpenAPI 2.0 中)或components/parameters部分(在 OpenAPI 3.0 中),然后$ref每个操作中明确的所有参数。缺点是需要重复$refs 在每个操作中。

swagger: "2.0"
...

paths:
  /users:
    get:
      parameters:
        - $ref: '#/parameters/offset'
        - $ref: '#/parameters/limit'
      ...
  /organizations:
    get:
      parameters:
        - $ref: '#/parameters/offset'
        - $ref: '#/parameters/limit'
      ...

parameters:
  offset:
    in: query
    name: offset
    type: integer
    minimum: 0
  limit:
    in: query
    name: limit
    type: integer
    minimum: 1
    maximum: 50

为了在一定程度上减少代码重复,可以在路径级别而不是在操作内部定义适用于路径上所有操作的参数。

paths:
  /foo:
    # These parameters apply to both GET and POST
    parameters:
      - $ref: '#/parameters/some_param'
      - $ref: '#/parameters/another_param'

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

OpenAPI中如何定义全局参数? 的相关文章

随机推荐

  • TF 对象检测 Zoo 模型没有可训练变量?

    中的模型TF 异议检测动物园 https github com tensorflow models blob master research object detection g3doc detection model zoo md有met
  • 如何在 Jetpack Compose 中将视图的基线与另一个视图的顶部对齐?

    我有一个卡片视图 我想将另一个视图 图中的红色视图 的中心与卡片的顶部对齐 如图所示 我该怎么做 卡的代码是这样的 class MainActivity ComponentActivity override fun onCreate sav
  • maven - 在构建时弹出请求许可的窗口

    我刚刚安装了 Maven 在构建 hello world 时 maven 不断向我请求许可 并显示以下消息 小程序正在尝试访问文件的 存在 状态属性 看起来这不是一个很常见的问题 有什么办法可以给maven授予这些权限吗 INFO Scan
  • Solr 中的 docValues 是什么?我什么时候应该使用它们?

    因此 我阅读了多个来源 试图解释 Solr 中的 docValues 是什么 但我似乎不明白何时应该使用它们 尤其是与索引字段和存储字段相关的时候 谁能解释一下吗 Solr 中的 docValues 是什么 Doc Values 可以解释为
  • 标题将包含的 div 从顶部向下推?

    我对 stackoverflow 和 Web 开发都是新手 尝试在没有任何帮助的情况下学习 我正在尝试创建一份简历 作为磨练我的技能的一部分 事情是这样的 我的包含 div 下的第一个 div 是带有 id 的 divheader 我已将包
  • Rails 中数字的本地化

    对新帖子感到抱歉 但我的第一个帖子关注的是阿拉伯 波斯数字 但问题似乎更大 我想知道是否有人做了一个 gem 来处理 ruby rails 中数字的本地化 I18n 官方语言环境 https github com svenfuchs rai
  • Pester:无法访问父作用域变量

    我在 Pester 中有以下简单的测试 Name Tests ps1 name foo Describe Check name It should have the correct value name Should Be foo 因此 当
  • R:解压缩多个文件,每个文件都在新的子目录中或重命名

    我设法调整一些代码来解压缩许多文件 但是解压时会出现同名文件 被替换 在我的工作目录中 我有 zip 文件 我在该目录中创建了一个名为 unzip 的新文件夹 我在其中解压缩了文件 dir create paste0 path unzip
  • 将 IEEE 754 浮点转换为 MIL-STD-1750A 浮点

    我正在尝试将 IEEE 754 32 位单精度浮点值 标准 c 浮点变量 转换为无符号长变量 格式为MIL STD 1750A http www xgc com manuals mil std 1750a 1 7 pdf 我在帖子底部包含了
  • 在 Grails 中将自定义 id 生成定义为默认值的最佳方法是什么?

    我想切换我的域类以使用可变长度的 UUID 作为其 id 我不想简单地在 URL 上显示连续的 id 供人们尝试和搞乱 我编写了一个自定义版本的 Java UUID 方法来允许可变长度 这样我就可以为不会变大的模型使用更短的 id 我发现这
  • 两个数组相加/求和

    我遇到了一个纯粹假设的问题 如果我找到正确的 linq 方法 感觉它有一个简单的解决方案 我有两个整数数组 我知道它们的大小相同 我想创建相同大小的第三个数组 其中第三个数组中的元素是相应位置的前两个数组中的元素之和 下面是一个应该显示我想
  • NetSuite / Suitescript - 为什么此验证字段脚本会进入无限循环?

    我的脚本进入无限循环 我不知道为什么 我在验证字段上运行此命令 并且如果存在具有相同参考号的另一个供应商帐单 则会阻止对该字段进行更改 从而强制用户将 参考号 更改为唯一 这是我的代码 function validateField type
  • 如何查看 C# 数组在内存中的分布情况?

    我想看看 C 数组是如何存放在计算机内存中的 我想看到的主要是两列 第一列是地址 第二列是数组元素 是否可以 我想从一维数组开始 但然后我想观察多维数组是如何放置的 Question 我如何通过 Visual Studio 看到它 您可以使
  • 运行时错误:事件循环正在运行

    当我调用该函数时出现以下错误send message Exception in thread Thread 1 Traceback most recent call last File usr lib python3 4 threading
  • Camel SFTP - 无法将目录更改为“/”

    我需要通过 SFTP 连接到服务器 但收到此错误 INFO org apache camel component file remote SftpOperations connect Connected to sftp myserver c
  • 从 Powershell 中的对象数组中删除项目

    我有一个数组对象 a 它返回如下所示的输出 通过执行 a 0 Name 我可以访问每个 Name 条目 a 0 Available 我可以访问其相应的可用空间 我有另一个数组 b 包含一些名称 例如 b 返回两个名称 sandeep agg
  • 解释 - 不涉及反射

    我有一个非常简单的问题 这不仅适用于 Spray json 而且我读过 argonaut 和 circe 的类似声明 所以请赐教 在 Spray json 中 我遇到这样的声明 There is no reflection involved
  • 如何在没有 ID 的情况下在 Prisma 中更新插入新记录?

    我正在使用 Prisma https www prisma io https www prisma io 作为 ORM 我想在存储数据时检查重复项 如果不存在 则创建一条新记录 我想我可以使用 Prisma 提供的 upsert 方法来做到
  • underscore.js 中的 chain 函数是否创建了一个 monad?

    In the chain文档 http underscorejs org chaining你发现 Calling chain在包装对象上将导致所有未来的方法调用 也返回包装的对象 当你完成后 计算 使用value检索最终值 也是如此chai
  • OpenAPI中如何定义全局参数?

    我正在准备我的 API 文档 方法是手工完成 而不是自动生成 我有应该发送到所有 API 的标头 但不知道是否可以为整个 API 全局定义参数 其中一些标头是静态的 有些必须在调用 API 时设置 但它们在所有 API 中都是相同的 我不想