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

如何在OpenAPI中定义全局参数?

羊柏
2023-03-14

我准备我的API文档的方式是每只手做一次,而不是自动生成。我有应该发送到所有API的头,不知道是否可以为整个API全局定义参数?

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

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

这到底有没有可能?

共有1个答案

胡鸿羲
2023-03-14

如果您讨论的是使用者在调用API时发送的头参数...

您至少可以在参数部分中一次性地定义它们,然后只在需要时引用它们。在下面的示例中:

  • CommonPathParameterHeaderReusableParameterHeaderAnotherReusableParameterHeader在文档根目录上的parameters中一次性定义,可以在任何参数列表
  • 中使用 /resources/other-resources路径的 parameters部分引用了
  • CommonPathParameterHeader,这意味着这些路径的所有操作都需要此头
  • get/resources中引用了
  • reusableparameterheader,这意味着此操作需要它
  • Get/Other-Resources中的 AnotherReusableParameterHeader也是如此

示例:

swagger: '2.0'
info:
  version: 1.0.0
  title: Header API
  description: A simple API to learn how you can define headers

parameters:
  CommonPathParameterHeader:
    name: COMMON-PARAMETER-HEADER
    type: string
    in: header
    required: true
  ReusableParameterHeader:
    name: REUSABLE-PARAMETER-HEADER
    type: string
    in: header
    required: true
  AnotherReusableParameterHeader:
    name: ANOTHER-REUSABLE-PARAMETER-HEADER
    type: string
    in: header
    required: true

paths:
  /resources:
    parameters:
      - $ref: '#/parameters/CommonPathParameterHeader'
    get:
      parameters:
        - $ref: '#/parameters/ReusableParameterHeader'
      responses:
        '200':
          description: gets some resources
  /other-resources:
    parameters:
      - $ref: '#/parameters/CommonPathParameterHeader'
    get:
      parameters:
        - $ref: '#/parameters/AnotherReusableParameterHeader'
      responses:
        '200':
          description: gets some other resources
    post:
      responses:
        '204':
          description: Succesfully created.

如果您说的是与每个API响应一起发送的头...

不幸的是,您无法定义可重用的响应头。但至少可以为常见的HTTP响应(如500错误)定义包含这些头的可重用响应。

swagger: '2.0'
info:
  version: 1.0.0
  title: Header API
  description: A simple API to learn how you can define headers

parameters:
  CommonPathParameterHeader:
    name: COMMON-PARAMETER-HEADER
    type: string
    in: header
    required: true
  ReusableParameterHeader:
    name: REUSABLE-PARAMETER-HEADER
    type: string
    in: header
    required: true
  AnotherReusableParameterHeader:
    name: ANOTHER-REUSABLE-PARAMETER-HEADER
    type: string
    in: header
    required: true

paths:
  /resources:
    parameters:
      - $ref: '#/parameters/CommonPathParameterHeader'
    get:
      parameters:
        - $ref: '#/parameters/ReusableParameterHeader'
      responses:
        '200':
          description: gets some resources
          headers:
            X-Rate-Limit-Remaining:
              type: integer
            X-Rate-Limit-Reset:
              type: string
              format: date-time
  /other-resources:
    parameters:
      - $ref: '#/parameters/CommonPathParameterHeader'
    get:
      parameters:
        - $ref: '#/parameters/AnotherReusableParameterHeader'
      responses:
        '200':
          description: gets some other resources
          headers:
            X-Rate-Limit-Remaining:
              type: integer
            X-Rate-Limit-Reset:
              type: string
              format: date-time
    post:
      responses:
        '204':
          description: Succesfully created.
          headers:
            X-Rate-Limit-Remaining:
              type: integer
            X-Rate-Limit-Reset:
              type: string
              format: date-time
        '500':
          $ref: '#/responses/Standard500ErrorResponse'

responses:
  Standard500ErrorResponse:
    description: An unexpected error occured.
    headers:
      X-Rate-Limit-Remaining:
        type: integer
      X-Rate-Limit-Reset:
        type: string
        format: date-time
 类似资料:
  • 问题内容: 有没有一种方法可以将一个函数定义为在一个类中是全局的(或者,实际上是在另一个函数中)?类似于定义全局变量。 问题答案: 将函数添加到当前名称空间,就像将添加任何其他名称一样。这意味着您可以在函数或方法中使用关键字: 同样适用于类主体或方法: 区别将在导入时执行顶级类主体时立即定义。 像您的所有用途一样,您可能想重新思考问题并找到另一种解决方法。例如,您可以 返回 如此创建的函数。 演示

  • 问题内容: 在Coffeescript.org上: 将编译为: 通过在node.js下的coffee-script进行编译可以做到: 文件说: 如果要创建供其他脚本使用的顶级变量,请将它们作为属性附加到窗口或CommonJS中的exports对象上。如果您同时针对CommonJS和浏览器,那么存在运算符(见下文)为您提供了一种可靠的方法来确定将它们添加到何处:root = exports?这个 然

  • 如何为这些参数编写OpenAPI(Swagger)定义?

  • 我找到了一些像这样的向导http://www.mackhankins.com/blog/defining-your-own-helper-classes-in-laravel-4但这并不是我真正想要的,因为我希望能够使用函数修改不是类成员的值。 我有很多正则表达式函数,如果字符串与模式匹配,它们将修改字符串并返回修改后的字符串。我希望能够调用这些函数,就好像它们是在php函数中构建的一样。这是我过

  • 我用global.d.ts定义全局变量: 但是在执行main.ts的时候 报错: