首页 文章

查询和/或正文中的Swagger参数

提问于
浏览
6

我们的API具有这样的 endpoints ,通过合并这两组参数,同时支持 querybody 的参数 .

例如:

/foo?param1=value1
body: {
    param2=value2
}

生成的参数集将包含两个, param1param2 .

此 endpoints 可用作:

/foo?param1=value1&param2=value2

要么

/foo
body: {
    param1=value1,
    param2=value2
}

有没有办法如何在Swagger中指定这种“二元性”?

UPD
我想我应该将参数定义为: bodyquery

in:
  - body
  - query

1 回答

  • 3

    您需要定义查询参数和主体参数,但将所有参数标记为可选 . 使用操作 description 来解释客户端可以在查询字符串或正文中发送参数 .

    swagger: '2.0'
    ...
    paths:
      /foo:
        post:
          consumes:
            - application/json
          parameters:
            - in: query
              name: param1
              type: string
              required: false
            - in: query
              name: param2
              type: string
              required: false
            - in: body
              name: body
              required: false
              schema:
                type: object
                properties:
                  param1:
                    type: string
                  param2:
                    type: string
    

    使用OpenAPI 3.0,它更优雅,因为您可以为查询字符串和请求体重用相同的 schema

    openapi: 3.0.0
    ...
    paths:
      /foo:
        post:
          parameters:
            # This expands into ?param1=value1&param2=value2&...
            - in: query
              name: parameters
              required: false
              schema:
                $ref: '#/components/schemas/Parameters'
              style: form
              explode: true
          requestBody:
            required: false
            content:
              application/json:
                schema:
                  $ref: '#/components/schemas/Parameters'
          responses:
            '200':
              description: OK
    
    components:
      schemas:
        Parameters:
          type: object
          properties:
            param1:
              type: string
            param2:
              type: string
    

    对于Swagger UI用户的注意事项:从UI v.3.11.0开始,似乎不支持将对象序列化为查询字符串 .

相关问题