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

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

权承
2023-03-14

我们的API有这样的endpoint,通过合并这两组参数,同时支持来自< code>query和< code>body的参数。

例如:

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

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

此endpoint可以用作:

/foo?param1=value1&param2=value2

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

有没有办法在Swagger中指定这种“双重性”?

UPD
我想我应该将参数定义为:body查询

in:
  - body
  - query

共有1个答案

督建柏
2023-03-14

需要同时定义查询参数和正文参数,但将它们全部标记为可选。使用操作说明说明客户端可以在查询字符串或正文中发送参数。

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会更好一些,因为您可以为查询字符串和请求正文重用相同的< code>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开始,似乎还不支持将对象序列化为查询字符串。

 类似资料:
  • 我刚开始招摇。目前,我使用的是swagger ui v2.1.4版。我的API由查询参数组成。其中一个参数接受JSON主体。我想在文本区显示这个参数。目前,它显示在输入标记中。此外,我希望在该文本区域下方显示参数内容类型。请帮我怎么做?

  • 我正在尝试正确定义 OpenAPI 规范,以便从该规范生成 api 客户端。我已经解决了一个问题,即我们有一个复杂的查询对象,其中包含嵌套对象和对象数组,用于获取 GET 路由。 让我们以这些类为例。 和一个带有@Query decorator的get请求。 我得到的是。 我还尝试通过添加@ApiQuery装饰器来定义查询参数,它几乎可以工作。 - 但是现在我正在将重复的查询定义混入一个。有没有办

  • 我有一个API,它接受查询参数作为对象。我用这个来添加多个过滤器来过滤结果。 当我从 swagger 点击请求时,我在控制器中的过滤器对象为空。 是POJO类。它被用作,在控制器中,它是null。 招摇时,显示如下 当试图从userFilter访问任何字段时,对象未被构造并在控制器类中获取NullPointerException。

  • 我在尝试格式化这个OpenApI(Swagger) Json文件时遇到了挑战。当我试图与https://editor.swagger.io/,确认时,我得到了错误。 $ref值必须是符合 RFC3986 的百分比编码 URI 当我将文件中架构的$ref属性从$ ref:' #/definitions/GetResponse[List[currency model]]'更改为$ ref:%/defi

  • 问题内容: 我试图使用sqlalchemy执行原始sql查询,想知道什么是“正确”的方法。 我的查询如下(目前): 我不喜欢的是字符串格式和缺少任何参数处理(在music_volume中用引号引起来的:-D)。 我试图遵循以下答案: 如何在SQLAlchemy- flask应用程序中执行原始SQL 应用我阅读的内容后,我的代码段如下所示: 但是我收到错误,指出mv和ml无法识别参数。 如果我将代码