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

定义“平面”OpenAPI文档模式?

袁河
2023-03-14

我正在尝试使用OpenAPI 3.0记录一个micros服务。该服务返回具有任何字段名并且可以包含任何数组、字符串、数字、true、false、null但不包含对象的Json。字符串可能包含ISO日期。只有很少的已知字段名(例如“@id”)

示例:

   { "@unid" : "a34", "color" : "blue", "value" : 42, "active" : true }

无效样本:

   { "@unid" : "b55",
     "shape" : "square",
     "params" : { "value" : 42, "active" : true }
   }

所以我的第一次尝试是:

title: Root Type for Document
description: A generic document
type: object
properties:
    '@unid':
        description: Primary key
        type: string
    '@created':
        format: date-time
        description: Document creation dateTime as ISO date
        type: string
    '@size':
        format: int32
        description: Storage size on backend
        type: integer
    '@unread':
        description: Did user accnowledge having read it
        type: boolean
additionalProperties:
    anyOf:
        -
            type: string
        -
            type: boolean
        -
            type: integer
        -
            format: date-time
            type: string
example:
    '@unid': EA219565FC07ADC600258695004FCE92
    '@created': '2021-03-11T14:31:42Z'
    '@size': 31
    '@unread': false
    Color: Red
    form: SampleForm
    Cost: 31.3
    Active: true
    lastaccessed: '2021-03-11T14:31:42.000Z'

我检查了OpenAPI字典规范,建议使用:

type: object
additionalProperties: true

但这将允许对象。

我走对了吗?或者说“任何名称、任何值,只是不是另一个对象”是否更容易/正确?

共有1个答案

慎兴业
2023-03-14

一种不符合OpenAPI 3但符合OpenAPI 3.1的方法是使用not关键字:

type: object
additionalProperties: true
not:
  additionalProperties:
    type: object

这里的逻辑是:

  • 任何其他属性都可以
 类似资料:
  • 是否可以使用接口而不是实现这些接口的控制器类来生成swagger ui文档? 将文档放在实现类中会使它看起来杂乱无章。Springfox有这个选项,它在springdoc中可用吗?如果是,怎么做?

  • API-Platform将为Schemas(AKA模型)生成Swagger/OpenAPI路由留档,然后在留档下方(文档将它们显示为“模型”,但当前版本(如2.7)将它们显示为“模式”)。 为显示这些模式/模型而生成的内容在哪里?如何删除一些?显示它们的功能是Swagger UI的一部分,但API平台必须负责提供JSON配置,从而更改API平台而不是Swagger UI。注意,这篇文章展示了如何添

  • 我正在使用Swashback为ASP生成swagger文档。NET核心API我正在写。在我的API中,我使用了许多自定义Json转换器,因此我接收和返回的Json看起来与C类的定义不完全一样。例如,我可能有这样一个类: 它将被序列化为 然而,Swashuckle将其记录为 我如何告诉Swashback我的模型是如何序列化和反序列化的?

  • 问题内容: 我有一个想要转换为Avro的JSON文档,并且需要为此指定一种模式。这是我要为其定义avro模式的JSON文档: 我可以为非复杂类型定义架构,但不能为复杂的“选项”字段定义架构: 谢谢您的帮助! 问题答案: 您需要使用Avro 复杂类型,尤其是数组和记录。然后将它们嵌套在一起: 另外,为了提高可读性,您可以将架构分为多个文件。

  • 我在一个带注释的对象中有几个枚举,如: 其中枚举定义为: 使用Openapi3,我可以生成一个swagger文档。我的问题是,和,翻译方式不同,如: 我希望< code>Enum2与< code>Enum1一样被记录,因此具有实际的枚举值。有什么方法可以强制这样做,或者解释为什么会这样?两个枚举基本上与示例中的相同。

  • 当使用swagger 2.0时,java。util。Currency类作为一个单独的定义生成。但当我们生成OpenAPI 3.0时,我们遇到了一个问题,即swagger core将其作为属性生成。 我们有f.e.这门课: 根据这段代码,我们使用以下插件配置生成openapi规范: 生成时,这将导致此组件定义: 然后,我们使用以下插件在另一个项目中生成类: 生成类的代码构成了此openapi规范: