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

告诉Swagger请求主体可以是单个对象或对象列表

慕铭
2023-03-14

我正在使用带有Scala的Swagger来记录我的REST API。我想为POST、PUT和DELETE启用批量操作,并希望使用相同的路由来接受单个对象或对象集合作为正文内容。

有没有办法告诉斯瓦格一个参数要么是A类型的值列表,要么是A类型的单个值?

类似于Rest的varargs。

共有3个答案

弘柏
2023-03-14

如果要发送对象,只需删除@OA\Items()

 *   @OA\RequestBody(
 *      required=true,
 *      @OA\JsonContent(
 *         ref="#/components/schemas/Brand"
 *      )
 *   ),
满玉泽
2023-03-14

我不知道是否有可能像那样大摇大摆地为你的API添加注释。但我的建议是简化/统一API。如果你想一想,如果你打算支持批量(意思是一个对象数组),那么就没有理由对单个对象进行特殊处理。您只需将API更改为始终使用数组,如果有人想要使用单个对象,那么这就是带有单个元素的列表的情况object::Nil

常坚
2023-03-14

有没有办法告诉斯瓦格一个参数要么是A类型的值列表,要么是A类型的单个值?

这取决于您使用的是OpenAPI 3.0还是OpenAPI(Swagger)2.0。

OpenAPI使用JSON模式的扩展子集来描述身体有效载荷。JSON模式提供了oneOfanyOf关键字来为一个实例定义多个可能的模式。然而,不同版本的OpenAPI支持不同的JSON模式关键字集。

OpenAPI 3.0支持oneOfanyOf,因此您可以如下描述此类对象或对象数组:

openapi: 3.0.0
...

components:
  schemas:
    A:
      type: object
    Body:
      oneOf:
        - $ref: '#/components/schemas/A'
        - type: array
          items:
            $ref: '#/components/schemas/A'

在上面的例子中,Body可以是objectA,也可以是objectA数组。

OpenAPI(Swagger)2.0不支持oneOfanyOf。您最多可以使用无类型模式:

swagger: '2.0'
...

definitions:
  A:
    type: object
  # Note that Body does not have a "type"
  Body:
    description: Can be object `A` or an array of `A`

这意味着Body可以是任何对象(任何对象!),数组(包含任何项!),也是原语(字符串、数字等)。在这种情况下,无法定义确切的正文结构。您只能在说明中口头描述这一点。

您需要使用OpenAPI 3.0来定义您的确切场景。

 类似资料:
  • 当前的请求对象由think\Request类负责,在很多场合下并不需要实例化调用,通常使用依赖注入即可。在其它场合(例如模板输出等)则可以使用think\facade\Request静态类操作。 [TOC=2,3] 请求对象调用 在控制器中通常情况下有两种方式进行依赖注入。 构造方法注入 <?php namespace app\index\controller; use think\Reque

  • 来自客户端网页的数据作为全局请求对象发送到服务器。要处理请求数据,请求对旬应该从Flask模块导入。 请求对象的重要属性如下所列 - - 它是包含表单参数及其值的键和值对的字典对象。 - 解析问号()后的URL部分查询字符串的内容。 - 保存Cookie名称和值的字典对象。 - 与上传文件有关的数据。 - 当前请求方法。

  • Gamma等人所说的设计模式 考虑对象聚合和熟悉之间的区别,以及它们在编译和运行时的表现方式。 聚合意味着一个对象拥有或负责另一个对象。一般来说,我们所说的一个物体具有或是另一个物体的一部分。聚合意味着聚合对象及其所有者具有相同的生存期。 熟人关系意味着一个对象仅仅知道另一个对象。有时熟人关系被称为“关联”或“使用”关系。熟人对象可能会请求彼此的操作,但它们并不对彼此负责。熟人关系比聚合关系弱,表

  • data String - PEM编码数据 issuer CertificatePrincipal - 发行人主体 issuerName String - 发行商的公用名 issuerCert证书 - 颁发者证书(如果不是自签名) subject CertificatePrincipal - 主题主体 subjectName String - 主题公共名 serialNumber String -

  • 我想解析一些JSON,但一个键要么是字符串,要么是对象。 这是我当前的结构:https://github.com/PhillippOhlandt/pmtoapib/blob/master/CollectionItemRequest.go#L10 在这里,“Url”属性不仅可以是字符串,还可以是对象。 我开始为它创建一个自己的结构,覆盖对象案例。 但是这样字符串版本就不行了。有没有一种方法既能处理这