如何在 OpenAPI 2.0 (Swagger 2.0) 中定义自定义标头?

ker*_*i11 5 swagger swagger-2.0 swagger-editor

我在为 OpenAPI (Swagger) 文档定义自定义请求标头时遇到问题。我查看了文档https://swagger.io/docs/specification/describing-parameters/#header-parameters但我无法让它工作。

在我下面的示例中,是一个具有正文的 POST 请求。我还希望它有一个像我的第二个片段一样的自定义标头,但这无效。

还行吧:

 /search:
    post:
      tags:
        - Domain
      summary: Search for domains
      description: Returns a domain if it was found.
      produces:
        - application/json
      parameters:
        - in: body
          name: body
          description: Array of Domain Names
          required: true
          schema:
            $ref: '#/definitions/DomainNames'
Run Code Online (Sandbox Code Playgroud)

这是不行的:

  /search:
    post:
      tags:
        - Domain
      summary: Search for domains
      description: Returns a domain if it was found.
      produces:
        - application/json
      parameters:
       - in: header
          name: X-Request-ID
          schema:
            type: string
            format: uuid
          required: true
        - in: body
          name: body
          description: Array of Domain Names
          required: true
          schema:
            $ref: '#/definitions/DomainNames'
Run Code Online (Sandbox Code Playgroud)

我在线上- in: header收到以下错误:

paths['/search'].post.parameters[0].in 处的架构错误
应等于允许值之一
allowedValues: body, header, formData, query, path
跳转到第 37 行

paths['/search'].post.parameters[0] 处的架构错误
不应有其他属性
additionalProperty: schema, in, name
跳转到第 37 行

我在这里缺少什么?标头显示在渲染的 Swagger UI 中,但我无法“保存”它,因为它无效。

Hel*_*len 4

您链接到的指南适用于 OpenAPI 3.0(如该页面顶部所示)。相应的 OpenAPI 2.0 指南位于此处:描述参数

在OpenAPI 2.0中,path/header/query/form参数不使用schema,它们type直接使用关键字。

另外,- in: header您示例中的行缩进不够,您需要在其之前添加一个空格以使其与其他行对齐。

这是正确的版本:

      parameters:
        - in: header     # <----
          name: X-Request-ID
          type: string   # <----
          format: uuid   # <----
          required: true
Run Code Online (Sandbox Code Playgroud)