带括号和变量名的OpenAPI参数

时间:2019-05-23 15:58:41

标签: openapi swagger-editor

我正在开发一个API,该API允许使用以下网址进行搜索:

GET https://example.com/api/data?search[field1]=value1
GET https://example.com/api/data?search[field2]=value2
GET https://example.com/api/data?search[field1]=value1&search[field2]=value2

基本上,您可以通过将字段名称放在方括号中来搜索一个或多个字段值。问题是,字段名称由用户在其设置中定义。字段名称将是一个字符串,但在全局级别上则无法提前知道。

This answer几乎是我想要做的,我只是找不到一种方法来将方括号内的值定义为“任何字符串”,而不是已知名称的列表。

1 个答案:

答案 0 :(得分:1)

可以将search参数定义为free-form object,其中deepObject serialization styleminProperties: 1强制在搜索中至少存在一个字段查询。

确保使用的是OpenAPI 3.0(openapi: 3.0.x),而不是OpenAPI 2.0(swagger: "2.0");后者不支持查询字符串中的对象。

openapi: 3.0.2
...

paths:
  /api/data:
    get:
      parameters:
        - in: query
          name: search
          required: true
          schema:
            type: object
            additionalProperties: true  # Default value, may be omitted
            minProperties: 1
            # Optional example to use as a starting value for "try it out" in Swagger UI
            example: >
              {
                "field1": "value1",
                "field2": "value2"
              }
          style: deepObject
          explode: true
      responses:
        200:
          description: OK