没有固定 属性 列表的对象的 Swagger Yaml 模式定义

Swagger Yaml schema definition for object without a fixed property list

我正在 Swagger 的帮助下实现第一个 API 应用程序。要返回的最重要的对象之一是 DICOM 对象,它 returns 具有灵活名称的属性集合,例如:

{ 
  "00080005": {"vr":"CS","Value":["ISO_IR 100"]},
  "00080020": {"vr":"DA","Value":["20160602"]},
  "00080030": {"vr":"TM","Value":["171855.7490"]},
  "00080050": {"vr":"SH","Value":["1234"]},
  "00080090": {"vr":"PN","Value":[{"Alphabetic":"Parikh MD^Anush^M"}]}
}

所以我无法提前知道所有属性的名称(00080005、00080030等),虽然文件结构很统一。

我的具体问题是:这样的 JSON 文档的模式定义是什么。

我尝试了以下但没有成功:

definitions:
  DicomMetadataJson:
    type: object
    patternProperties:
      ^\d{8}:
        type: object      

但是 Swagger 编辑器 returns 出现如下错误:

code: "OBJECT_ADDITIONAL_PROPERTIES"

message: "Additional properties not allowed: patternProperties"

description: "A deterministic version of a JSON Schema object."

OpenAPI (fka.Swagger) 仅使用 JSON Schema v4 的一个子集,不幸的是,不建议 patternProperties.

但鉴于提供的示例是一张地图,您可以使用 additionalProperties:

来描述它
swagger: "2.0"
info:
  version: 1.0.0
  title: Hashmap

paths: {}

definitions:
  DicomMetadataJson:
    additionalProperties:
      properties:
        vr:
          type: string
        Value:
          type: array
          items:
            type: string

密钥未定义,应该是一个字符串(因此您不能强制执行它的格式)。

请注意,SwaggerUI Swagger UI 不会渲染它们 now.The 问题已在此处跟踪 https://github.com/swagger-api/swagger-ui/issues/1248

与此同时,您可以使用此技巧定义相同类型的地图对象的非必需 属性(下例中的默认值),并在描述中给出一些提示:

swagger: "2.0"
info:
  version: 1.0.0
  title: Hashmap

paths: {}

definitions:
  MetaData:
    properties:
      vr:
        type: string
      Value:
        type: array
        items:
          type: string

  DicomMetadataJson:
    description: 'A <string,MetaData> map, default key is only for documentation purpose'
    properties:
      default:
        $ref: '#/definitions/MetaData'
    additionalProperties:
      $ref: '#/definitions/MetaData'

关于引用 该架构公开了两种类型的字段。具有声明名称的固定字段和为字段名称声明正则表达式模式的模式化字段。模式字段可以多次出现,只要每个字段都有唯一的名称。,它涉及 OpenAPI 规范本身的格式,而不是 API 使用的对象打开API规范。