如何使用自定义分隔符序列化查询对象

时间:2019-12-09 09:41:58

标签: swagger swagger-ui openapi

我有yaml文件:

openapi: 3.0.1
info:
  title: My API
  version: v1
paths:
  # /users;id=3;id=4?metadata=true
  /users:
    get:
      parameters:
        - in: query
          name: offset
          schema:
            type: integer
          description: The number of items to skip before starting to collect the result set
        - in: query
          name: limit
          schema:
            type: integer
          description: The numbers of items to return
        - in: query
          name: origin
          style: form
          explode: false
          schema:
            type: object
            properties:
              city:
                type: string
              zip:
                type: string
      responses:
        '200':
          description: A list of users

当我在https://editor.swagger.io中单击“执行”时,生成的Curl如下所示:

curl -X GET "https://editor.swagger.io/users?offset=2&limit=12&origin=city,atlanta,zip,303" -H "accept: */*"

但是,我需要这样:

curl -X GET "https://editor.swagger.io/users?offset=2&limit=12&origin=city:atlanta|zip:303" -H "accept: */*"

是否可以这样做?我在文档中找不到有关设置自定义分度的任何信息。

1 个答案:

答案 0 :(得分:1)

简短答案:

serialize parameters未涵盖您的特定用例,它们遵循rfc6570-如果您想设计一个公认的Web api,则遵循标准是一个好主意。

您指定了explode: falsestyle:form。 开启explode:true时,您会得到以下提示:

city=atlanta&zip=303

当您指定style:deepObject时,您将获得:

origin[city]=atlanta&origin[zip]=303

spaceDelimitedpipeDelimited样式不适用于对象。

在没有模式的情况下工作

您可以在没有模式的情况下进行工作,并定义origin类型的string查询参数。 该文档应准确解释您的期望,并提供一个小示例,以帮助人们使用您的API。

我不会在开放的API中使用该模式,但这可能是内部API的一种解决方法。