在swagger文档中使用对象类型查询参数

在swagger文档中使用对象类型查询参数,swagger,swagger-ui,query-parameters,Swagger,Swagger Ui,Query Parameters,我有一个GET路径,我想将url中的对象参数编码为查询字符串 在编写swagger文档时,我基本上会遇到一些错误,这些错误不允许我在查询中使用模式/对象类型类型参数: paths: /mypath/: get: parameters - in: path name: someParam description: some param that works required: true

我有一个GET路径,我想将url中的对象参数编码为查询字符串

在编写swagger文档时,我基本上会遇到一些错误,这些错误不允许我在
查询中使用
模式
/
对象
类型
类型参数:

paths:
  /mypath/:
    get:
      parameters
        - in: path
          name: someParam
          description: some param that works
          required: true
          type: string
          format: timeuuid #good param, works well
        - $ref: "#/parameters/mySortingParam" #this yields an error

parameters:
  mySortingParam
    name: paging
    in: query
    description: Holds various paging attributes
    required: false
    schema:
      type: object
      properties:
        pageSize:
          type: number
        cursor:
          type: object
          properties:
            after:
              type: string
              format: string
具有对象值的请求查询参数将在实际请求中编码


尽管swagger在屏幕顶部显示了一个错误,但该对象在swagger UI编辑器中被正确呈现,但是该错误会浮在文档顶部。

我认为您不能在swagger规范中使用“object”作为查询参数,因为查询参数只支持基元类型()

这是可能的,只是OpenAPI 2.0没有。OpenAPI 3.0在此处描述了如何实现这一点:

参数:
-in:查询
名称:过滤器
#将“架构”包装为“内容”
内容:

application/json:#这现在可以通过OpenAPI 3.0实现

参数:
-in:查询
名称:值
模式:
类型:对象
特性:
类型识别码:
类型:整数
作者编号:
类型:整数
标题:
类型:字符串
例子:
{
“类型id”:1,
“作者id”:1
}
风格:形式
爆炸:真的
在这里,您可以使用
style
explode
关键字指定参数应如何序列化

  • 样式定义多个值的分隔方式。可能的样式取决于参数位置–路径、查询、标题或cookie
  • 分解(真/假)指定数组和对象是否应 为每个数组项或对象属性生成单独的参数
对于上述示例,url将为:

https://ebookstore.build/v1/users/books/search?genre_id=1&author_id=1 

有关使用OpenAPI v3描述参数和参数序列化的更多信息,请参阅。

对此相当失望,因为swagger.io上的文档另有说明:。请参阅“架构与内容”下的部分。虽然上面的链接描述了如何将对象转换为JSON等内容类型,但它没有给出与OP的查询直接相关的示例。@DanielMaclean:您发布的链接是关于OpenAPI 3.0的,而答案是关于OpenAPI/Swagger 2.0的(2016年没有3.0)。该链接的2.0版本只是一个提示-此示例用于查询字符串中的JSON字符串,即(在URL编码之前)
GET/something?filter={“type”:“foo”,“color”:“red”}
。而OP可能希望将对象序列化为查询字符串中的单个键/值参数,即
GET/something?type=foo&color=red
。后者在本文中进行了解释。