具有对象列表的OpenAPI查询字符串参数

mar*_*osh 6 json jsonschema swagger openapi

我正在尝试使用OpenAPI记录看起来像的查询字符串

filtered[0][id]=code&filtered[0][value]=12345
Run Code Online (Sandbox Code Playgroud)

并包含具有属性id和的对象列表value

我的yaml文档如下所示

parameters:
    - name: filtered
      in: query
      description: filters to be applied
      explode: true
      style: deepObject
      schema:
        type: array
        items:
          properties:
            id:
              description: name of the field to be filtered
              type: string
            value:
              description: value of the filter
          type: object
Run Code Online (Sandbox Code Playgroud)

问题如下:看起来该style: deepObject选项仅适用于一个级别,而不适用于我的对象实际所在的第二个级别。也就是说,它需要一个查询字符串,例如

?sorted[0]=%7B%0A%20%20%22id%22%3A%20%22string%22%2C%0A%20%20%22value%22%3A%20true%0A%7D
Run Code Online (Sandbox Code Playgroud)

该对象未使用idvalue键序列化为数组。

有办法解决吗?

Hel*_*len 13

从 OpenAPI 3.1 开始这是不可能的

OpenAPI 3.0/3.1 规范目前定义了简单对象(具有原始属性)的deepObject行为例如

{
  "id": 5,
  "name": "Bob"
}
Run Code Online (Sandbox Code Playgroud)

不适用于数组嵌套对象

由于未定义数组和嵌套对象的行为,因此实际上无法描述您的查询字符串。从技术上来说,唯一的办法是定义filtered[0][id]filtered[0][value]等作为单独的查询参数。


如果您正在设计新 API(而不是描述现有 API),请考虑在请求正文中传递对象数组。