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

如何在OpenAPI(Swagger)中定义一个接受任意对象数组的参数?

谯阳伯
2023-03-14

在我的OpenAPI规范中,是否有可能将参数定义为对象,而不必定义其属性(匿名对象)?更具体地说,我希望我的应用编程接口能够接受这些匿名对象的数组。

这是我所拥有的,但是我在斯瓦格编辑器中得到了一个“无效参数定义”错误。

swagger: '2.0'
info:
  title: Test API
  description: Test
  version: "1.0.0"
host: api.example.com
schemes:
  - https
basePath: /v1
produces:
  - application/json
paths:
  /api/example:
    post:
      description: Endpoint description
      parameters:
        - name: param1
          in: query
          description: param1
          required: true
          type: array
          items:
            type: object
        - name: param2
          in: query
          description: param2
          required: true
          type: string
      responses:
        200:
          description: error response
          schema:
            type: object
        default:
          description: Unexpected error
          schema:
            $ref: '#/definitions/Error'
definitions:
  Error:
    type: object
    properties:
      code:
        type: integer
        format: int32
      message:
        type: string
      fields:
        type: string

以下是错误:

Object
code:  "ONE_OF_MISSING"
params: Array [0]
message:  "Not a valid parameter definition"
path: Array [5]
schemaId:  "http://swagger.io/v2/schema.json#"
inner: Array [2]
0: Object
code:  "ONE_OF_MISSING"
params: Array [0]
message:  "Data does not match any schemas from 'oneOf'"
path: Array [5]
inner: Array [2]
1: Object
code:  "OBJECT_MISSING_REQUIRED_PROPERTY"
params: Array [1]
0:  "$ref"
message:  "Missing required property: $ref"
path: Array [5]
0:  "paths"
1:  "/api/example"
2:  "post"
3:  "parameters"
4:  "0"
level: 900
type:  "Swagger Error"
description:  "Not a valid parameter definition"
lineNumber: 23

共有1个答案

卢出野
2023-03-14

Helen指出的问题是,我将参数指定为查询参数,而不是请求主体。以下是我想要的:

swagger: '2.0'
info:
  title: Test API
  description: Test
  version: "1.0.0"
host: api.example.com
schemes:
  - https
basePath: /v1
consumes: 
  - application/json
produces:
  - application/json
paths:
  /api/example:
    post:
      description: Endpoint description
      parameters:
        - name: MyRequest
          in: body
          description: My parameters
          required: true
          schema:
            $ref: "#/definitions/MyRequest"
      responses:
        200:
          description: error response
          schema:
            type: array
            items:
              type: object
        default:
          description: Unexpected error
          schema:
            $ref: '#/definitions/Error'
definitions:
  MyRequest:
    type: object
    properties:
      param1:
        type: array
        items:
          type: object
      param2:
        type: string
  Error:
    type: object
    properties:
      code:
        type: integer
        format: int32
      message:
        type: string
      fields:
        type: string
 类似资料:
  • 如何为这些参数编写OpenAPI(Swagger)定义?

  • 我有一个服务,它可以基于头有两种不同的主体参数。 例如。对于路径: > 如果使用 ,则 POST 可以将 作为正文参数。 如果使用了,那么POST应该使用一些不同的主体参数来调用函数并返回不同的响应。 关于如何在OpenAPI(Swagger)中体现这一点,有什么建议吗?

  • 本文向大家介绍C++中可以接受任意多个参数的函数定义方法(详解),包括了C++中可以接受任意多个参数的函数定义方法(详解)的使用技巧和注意事项,需要的朋友参考一下 能够接受任意多个参数的函数,可以利用重载来实现。这种函数的执行过程类似于递归调用,所以必须要有递归终止条件。 执行后的结果如下: 以上就是小编为大家带来的C++中可以接受任意多个参数的函数定义方法(详解)全部内容了,希望大家多多支持呐喊

  • 我准备我的API文档的方式是每只手做一次,而不是自动生成。我有应该发送到所有API的头,不知道是否可以为整个API全局定义参数? 这些头中有些是静态的,有些必须在调用API时设置,但它们在所有API中都是相同的,我不想为每个API和每个方法复制和粘贴参数,因为这在将来是不可维护的。 我看到了API定义的静态头,但没有一个文档说明如何设置或使用它们。 这到底有没有可能?

  • 我们当前的部署模式要求我手动编写我的 swagger json 输出,这些输出将由我公司使用的基于 Swagger 的 UI 使用。我希望我正在编写的 json 提供“默认”值,以填充所有输入字段(包括 body 输入参数)的 Swagger UI。我的 body 参数是一个引用对象,如下所示。如何定义返回的 swagger JSON,以便在单击“尝试此操作”时自动填充请求的正文部分? 下面是Sw