首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定义“平面”OpenAPI文档模式?

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

Stack Overflow用户
提问于 2021-03-11 14:54:25
回答 1查看 222关注 0票数 0

我试图使用OpenAPI 3.0记录一个微系统服务,该服务返回的Json具有任意字段名,可以包含任意数组、字符串、数字、真、假、空,但不包含对象。字符串可以包含ISO日期。只有极少数已知字段名(例如"@id")

示例:

代码语言:javascript
复制
   { "@unid" : "a34", "color" : "blue", "value" : 42, "active" : true }

无效样本:

代码语言:javascript
复制
   { "@unid" : "b55",
     "shape" : "square",
     "params" : { "value" : 42, "active" : true }
   }

所以我的第一次尝试是:

代码语言:javascript
复制
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字典规范,它建议使用:

代码语言:javascript
复制
type: object
additionalProperties: true

但这将允许物体。

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

代码语言:javascript
复制
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-16 11:47:43

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

代码语言:javascript
复制
type: object
additionalProperties: true
not:
  additionalProperties:
    type: object

这里的逻辑是:

  • 任何附加的财产都可以。
  • 而不是带有类型对象的附加属性
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66584982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档