在swagger文档

时间:2016-07-04 14:34:15

标签: swagger swagger-ui query-parameters

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

在撰写swagger文档时,我基本上会收到错误,导致我无法在schema类型参数中使用object / query类型:

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编辑器中正确呈现对象,但是错误会浮动在文档的顶部。

3 个答案:

答案 0 :(得分:8)

我认为你不能使用"对象"作为查询参数的Swagger规范中的查询参数仅支持基本类型(https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#data-types

答案 1 :(得分:3)

现在可以使用OpenAPI 3.0。

parameters:
  - in: query
    name: values
    schema:
      type: object
      properties:
        genre_id: 
          type: integer
        author_id:
          type: integer
        title:
          type: string
      example:
       {
         "genre_id": 1,
         "author_id": 1
       }
    style: form
    explode: true

您可以在此处使用styleexplode关键字来指定应如何序列化参数。

  • 样式定义如何分隔多个值。可能的样式取决于参数位置-路径,查询,标题或cookie。
  • explode(true / false)指定是否应使用数组和对象 为每个数组项或对象属性生成单独的参数。

对于上面的示例,网址为:

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

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

答案 2 :(得分:2)

这是可能的,而不是OpenAPI 2.0。 OpenAPI 3.0描述了这是如何实现的:

https://swagger.io/docs/specification/describing-parameters/

parameters:
- in: query
  name: filter
  # Wrap 'schema' into 'content.<media-type>'
  content:
    application/json:  # <---- media type indicates how to serialize / deserialize the parameter content
      schema:
        type: object
        properties:
          type:
            type: string
          color:
            type: string

与此同时,您可以将查询参数作为普通旧字符串类型,然后手动执行序列化,然后根据需要设置查询参数。这是我正在做的事情,直到Swagger UI完全支持OpenAPI 3.0。