当前位置: 首页 > 知识库问答 >
问题:

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

徐高懿
2023-03-14

我正在尝试使用OpenAPI记录一个查询字符串,它看起来像

filtered[0][id]=code&filtered[0][value]=12345

并包含具有属性 ID的对象列表。

我的 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

问题如下:它看起来像<code>样式:deepObject</code>选项只适用于一个级别,而不适用于我的对象实际所在的第二个级别。也就是说,它需要一个查询字符串,如

?sorted[0]=%7B%0A%20%20%22id%22%3A%20%22string%22%2C%0A%20%20%22value%22%3A%20true%0A%7D

对象未序列化为具有id键的数组。

有办法解决吗?

共有3个答案

魏景龙
2023-03-14

我知道这是一个老问题,但是从打开 api 3 开始,就支持您正在寻找 https://swagger.io/docs/specification/describing-parameters/#schema-vs-content 的内容。

据报道,Openapi生成器6.0.1修复了一个错误https://github.com/OpenAPITools/openapi-generator/issues/4808

parameters:
  - in: query
    name: filter
    content:
      application/json:      
        schema:
          schema:
           $ref: "#/components/schemas/Filter"
戚俊健
2023-03-14

顾名思义,:),deepObject 样式仅“提供了一种渲染嵌套对象的简单方法”,而不是数组。至少根据版本 3.0.1,它仅适用于对象。

请注意,工具可能还不支持嵌套对象,因为规范“不提供此类示例”。

因此,您的格式与OpenAPI不兼容,但您可以将查询定义为正则表达式后面的参数。我通常会尽力提供一些解释

https://swagger.io/specification/

使现代化显然,在有人要求为嵌套对象提供“描述性错误”消息后,建议在https://github.com/swagger-api/swagger-js/pull/1450遗憾的是,决定不纳入该功能,PR 1450被拒绝。

龙默
2023-03-14

从OpenAPI 3.1开始这是不可能的

OpenAPI 3.0/3.1规范目前仅为简单对象(具有原始属性)定义深度对象行为,例如

{
  "id": 5,
  "name": "Bob"
}

但不适用于数组,也不适用于嵌套对象。

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

 类似资料:
  • 问题内容: 如何在Angularjs中使用查询参数构建URL。 我看到了API $ location.search() 问题是$ location(url)是重定向到url。就我而言,我想为查询参数传递url和key:value对,并构建url。就像是 网址: params: 结果: 我喜欢使用该URL进行链接。我也看到了angular encoding ,字符。我可以避免吗? 编辑: 我的意图是

  • 我正在使用Sqlite-pcl从数据库中检索一些数据。当显示结果时,有一个作为整数(等级)返回的某个字段,代表奖杯等级。我想用取决于值的字符串值替换该字段,例如,如果值为0,我想要结果为“铂金”,如果值为1,则值应为“银”。当然,数据库中没有这样的表来保存这些等级的描述,因此我不能使用联接

  • 问题内容: 我有一个HTTP客户端(目前)的Node.js应用程序。所以我在做: 这似乎是完成此任务的一种好方法。但是,我有些沮丧,我必须执行此步骤。这应该由一个公共库封装,但是我还没有看到它存在于node的库中,而且我不确定哪个标准的npm包可以完成它。有没有一种合理使用的更好的方法? url.format方法节省了构建自己的URL的工作。但理想情况下,请求的级别也应高于此级别。 问题答案: 检

  • 我们使用SQL Server数据库。当试图使用27GB内存在具有100M条记录的表上运行查询时,Hibernate会将查询(无论是

  • 问题内容: 您是否知道将Javascript对象编码为可通过请求传递的快速简单的方法? 不,没有其他框架-只是纯Javascript :) 问题答案: 像这样? 编辑:这也将转换递归对象(使用php“ array”表示法作为查询字符串)

  • 我从客户端发送了以下查询字符串参数 在REST服务器中,我如何接收上述格式并正确分配给每个类别? 更新1 参数的值为 {_=[1437904506062],{“take”:75,“skip”:0,“page”:1,“pageSize”:75、“filter”:{“logic”:“and”,“filters”:〔{“field”:“prodCode”,“operator”:“eq”,“value”: