为什么“additionalProperties”是 Swagger/OpenAPI 2.0 中表示 Dictionary/Map 的方式

2024-01-13

虽然我已经看到了中的例子OpenAPI 规范 https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md#schemaObject:

type: object
additionalProperties:
  $ref: '#/definitions/ComplexModel'

这对我来说并不明显why指某东西的用途additionalProperties是地图/字典的正确模式。

规范必须说的唯一具体内容也无济于事additionalProperties is:

以下属性取自 JSON 架构定义,但它们的定义已调整为 Swagger 规范。它们的定义与 JSON Schema 中的定义相同,只是当原始定义引用 JSON Schema 定义时,才会使用 Schema 对象定义。

  • items
  • allOf
  • 特性
  • 附加属性

陈 我觉得您的答案 https://stackoverflow.com/a/41240118/776186是正确的。

一些可能有帮助的进一步背景:

JavaScript 是 JSON 的原始上下文,在 JavaScript 中,对象就像字符串到值的哈希映射,其中一些值是数据,其他值是函数。您可以将每个名称/值对视为一个属性。但 JavaScript 没有类,因此属性名称不是预定义的,每个对象都可以有自己独立的属性集。

JSON 模式使用properties关键字来验证预先已知的名称-值对;和用途additionalProperties (or patternProperties,OpenAPI 2.0 中不支持)来验证未知的属性。

为了清楚起见:

  • 属性名称或映射中的“键”必须是字符串。它们不能是数字或任何其他值。
  • 正如你所说,属性名称should是独一无二的。不幸的是,JSON 规范并不严格要求唯一性,但建议唯一性,并且大多数 JSON 实现都期望唯一性。更多背景here https://stackoverflow.com/questions/21832701/does-json-syntax-allow-duplicate-keys-in-an-object?lq=1.
  • properties and additionalProperties可单独或组合使用。当additionalProperties单独使用而没有属性时,该对象本质上充当map<string, T>其中 T 是additionalProperties 子模式中描述的类型。也许这有助于回答你原来的问题。
  • 当针对单个模式评估对象时,如果属性名称与中指定的名称之一匹配properties,其值只需针对为该属性提供的子模式有效。这additionalProperties子模式(如果提供)将仅用于验证以下属性:are not包含在properties map.
  • 有一些限制additionalProperties在 Swagger 的核心 Java 库中实现。我已经记录了这些限制here https://support.reprezen.com/support/solutions/articles/6000162892-support-for-additionalproperties-in-swagger-2-0-schemas.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么“additionalProperties”是 Swagger/OpenAPI 2.0 中表示 Dictionary/Map 的方式 的相关文章

随机推荐

  • 使用 newID() 创建函数

    我不断收到此错误 有什么想法吗 在函数内的 newid 中无效使用副作用或时间相关运算符 我正在与MS SQL Server 2005 这里是T SQL陈述 Create Function dbo GetNewNumber RETURNS
  • 触发多事件

    我可以在trigger 中触发多个事件或在JQuery 中链接它们吗 例如 element trigger event1 event2 event3 or element trigger event1 trigger event2 or e
  • =~ 在 Perl 中做什么?

    我猜标签是一个变量 它正在检查9eaf 但这在 Perl 中存在吗 这里的 符号是做什么的 前后的 字符是什么9eaf doing if tag 9eaf Do something 是测试正则表达式匹配的运算符 表达方式 9eaf 是一个正
  • 什么都没有,WithEvents 字段和内存泄漏

    是否需要设置为Nothing 在 Dispose 中 所有WithEvents fields 显然Handles关键字将处理程序添加到此类字段 但不会将其删除 直到该字段不再存在为止 Nothing 这会产生内存泄漏 这对于像这样的情况应该
  • fork() 后处理子进程中 std::thread 终止的正确方法

    你想皱多少皱眉就皱多少 无论如何我都会这么做 我的问题是 在下面的代码中 处理终止的正确方法是什么std thread在生成的子进程中fork std thread detach or std thread join include
  • 如何在 Rails 1.2.3 中使复选框默认为“选中”?

    如何使复选框在最初显示时默认为 选中 我还没有找到一种 Rails 方法来做到这一点 有效 所以我用 JavaScript 做到了 Rails 有没有正确的方法来做到这一点 我正在使用 Rails 1 2 3 导轨 3 x form for
  • 在 Android 上刷新地图活动中的覆盖对象

    我必须构建一个地图活动 最重要的是 我需要显示一些位置点 这些位置是从另一个类的哈希表中检索的 该哈希表的内容始终会发生变化 因此 我希望看到地图活动上的这些位置点随着哈希表的修改而移动 代码如下所示 Override public voi
  • 动态数据表到实体*无需*提前进行硬编码...?

    问题 问 为什么不能 如何动态使用 DataTable 中的数据在使用反射 的函数中创建 LINQ EF 以根据可用内容创建实体实例 我看到了很多很多的问题和关于硬编码 但没有人这样做动态地 我正在寻找一种替代方法 不必为我的所有实体维护硬
  • Angular 2+:IE11 严格模式下不允许对属性进行多重定义

    我安装了 pollyfills 但在 main bundle js 中的 Internet Explorer 11 中收到此错误 它位于第 9692 行 但是查看编译后的代码 我无法理解它 这里是 styles nng select cus
  • 计算每个组的 data.table 窗口中的值数量

    我正在尝试添加新列data table 其中行中的值取决于行中值的相对关系 更准确地说 如果一行中有一个值 X 我想知道同一列 和组 中有多少个其他值在 X 30 范围内 也就是说 考虑到 DT lt data table X c 1 2
  • 在 PyQt 中播放声音文件

    我在 PyQt 中开发了一个播放声音的软件 我使用 Phonon Library 来播放声音 但它有一些滞后 那么如何在不使用 Phonon Library 的情况下在 PyQt 中播放声音文件 这就是我目前使用 Phonon 的方式 de
  • 尝试使用 Powershell 从 csv 导入信息,但不幸的是某些结果出现错误

    AuditSuccess Import Csv Path G LabLog csv Where Object Keywords like Audit Success Measure Object Select Object count Au
  • Node.js 和使用 Q 进行异步编程

    以下是正确的处理方式吗 这是一个注册控制器操作 我正在创建一个用户和一个组以将用户添加到其中 请注意 我有称为用户和组的方法级别变量 其余代码使用 Q 模块进行异步 是否可以使用方法级别变量 或者它们会被同时注册的其他人覆盖吗 export
  • setup.py 不遵守 PIP_INDEX_URL

    我正在运行本地pypi服务器 https pypi python org pypi pypiserver 我可以通过使用以下命令指定它来从该服务器安装软件包 i的选项pip命令或通过设置PIP INDEX URL环境变量 当我安装具有先决条
  • 在 R 中的 data.table 中执行 := by group 时如何更改目标列的类型?

    我正在尝试对 整数 类型的现有列执行 by group 操作 其中新值的类型为 double 但失败了 我的场景是根据其他列中的值将表示时间的列转变为 POSIXct 我可以修改 data table 的创建作为解决方法 但我仍然对如何实际
  • 如何获取联网设备的“型号名称”(可能使用 Bonjour)?

    Apple 的 Finder app 能够一致地确定每台使用 bonjour 的物理计算机的确切型号 每个设备类型的图标都是唯一的 这证明了这一点 iMac MacPro MBP 等 他们如何做到这一点以及他们使用哪些 API 顺便说一句
  • void*可以用来存储函数指针吗? [复制]

    这个问题在这里已经有答案了 void 的定义方式使得它可以指向任何东西 那么它可以用来指向一个函数 int send 吗 int send void p send 是否可以 当我这样使用时 它没有显示错误 为什么 如果没有 有没有办法将所有
  • 角度材质表自定义过滤器添加和删除多个术语

    我正在使用 Angular 的material ui 表和material chip 实现自定义过滤器 其中涉及能够通过多个关键字的匹配来搜索数据 用户应该能够添加关键字 并且表格应该过滤适当的匹配项 并且用户还应该能够删除任何关键字 并且
  • struct const 数组的初始化

    如何对结构类型的数组进行常量初始化 例如 在 C 中我会做这样的事情 struct Item int a char const b Item items 12 Hello 13 Bye 我一直在查看各种 C 参考资料 但找不到等效的语法 有
  • 为什么“additionalProperties”是 Swagger/OpenAPI 2.0 中表示 Dictionary/Map 的方式

    虽然我已经看到了中的例子OpenAPI 规范 https github com OAI OpenAPI Specification blob master versions 2 0 md schemaObject type object a