Jér*_*ôme 3 multiple-inheritance jsonschema swagger openapi
在 OpenAPI 中,继承是通过allof. 例如,在这个例子中:
"definitions": {\n "Pet": {\n "type": "object",\n "allOf": [\n {\n "$ref": "#/definitions/NewPet" #\xc2\xa0<--- here\n },\n [...]\n ]\n },\n "NewPet": {\n "type": "object",\n "properties": {\n "name": {\n "type": "string"\n },\n }\n },\nRun Code Online (Sandbox Code Playgroud)\n\n我在规范中没有找到有关多重继承的任何内容。例如,如果 Pet 继承自 NewPet 和 OldPet。
\n\n在Python中,我会写
\n\nclass Pet(NewPet, OldPet):\n ...\nRun Code Online (Sandbox Code Playgroud)\n\n并且方法解析顺序确定了应该首先检查哪个父类的方法/属性,因此我可以判断 Pet.age 是 NewPet.age 还是 OldPet.age。
\n\n那么,如果我让 Pet 继承 NewPet 和 OldPet,其中 name 属性在两个模式中都定义,并且每个模式具有不同的值,会怎样呢?宠物名称是什么?
\n\n "definitions": {\n "Pet": {\n "type": "object",\n "allOf": [\n {\n "$ref": "#/definitions/NewPet" # <--- multiple inheritance\n "$ref": "#/definitions/OldPet"\n },\n [...]\n ]\n },\n "NewPet": {\n "type": "object",\n "properties": {\n "name": {\n "type": "string"\n },\n }\n },\n "OldPet": {\n "type": "object",\n "properties": {\n "name": {\n "type": "integer" # <-- name redefined here, different type\n },\n }\n },\nRun Code Online (Sandbox Code Playgroud)\n\nOldPet 会优先吗?新宠物?它未定义/无效?是应用程序定义的吗?
\n\n我在swagger-editor中尝试过这个。显然,具有两个引用的模式是有效的,但 swagger-editor 无法解析属性。如果只是显示所有的两个引用。
\n\n编辑:根据本教程,在同一个 allof 中拥有多个引用是有效的。但没有提及两个模式具有相同名称的不同属性的情况。
\nJSON Schema 不支持继承。的行为allOf有时看起来像继承,但如果您这样思考,您最终会感到困惑。
该allOf关键字的含义正如其所言:所有模式都必须经过验证。没有什么可以被覆盖或优先于其他任何事物。一切都必须验证。
在您的示例中,JSON 值必须针对“NewPet”和“OldPet”进行完整验证。由于没有可以同时验证为字符串和整数的 JSON 值,因此“name”属性的验证始终无法针对“NewPet”或“OldPet”(或两者)进行验证。因此,“Pet”模式永远不会根据任何给定的 JSON 值进行验证。
| 归档时间: |
|
| 查看次数: |
4846 次 |
| 最近记录: |