我有一个json文档,其中一个部分可以是null或子对象,如下所示:
[{
"owner":null
},
{
"owner":{
"id":1
}
}]
Run Code Online (Sandbox Code Playgroud)
问题是,是否可以使用ref在json模式草案v4中对此进行建模?
我想要的是这样的
{
"type":"object",
"properties":{
"owner":{
"type":["null", "object"],
"$ref":"#/definitions/id"
}
},
"definitions":{
"id":{
"type":"object",
"properties":{
"id":{
"type":"number"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 我花了很多时间试图找到在Node.JS中创建swagger文档的解决方案.主库是swagger-node,在其中创建一个swagger yaml文件,然后将控制器添加到它.它会自动在您的应用中提供swagger ui文档,并根据您在yaml中指定的模型对请求和响应进行验证.
这很整洁,但是我要求我希望明确能够返回或接受某些字段null作为值,例如:
{
id: 123,
description: "string",
date_sent: null
}
Run Code Online (Sandbox Code Playgroud)
我不想删除date_sent密钥,我想明确地将其声明为null.
swagger规范不支持anyOfJSON模式通常如何做到这一点我相信.
我想知道是否有解决方法?也许某些库可用于具有x-nullable可以添加的供应商特定标志的节点,或者某种方式指定我的非必需字段应该都可以为空.
我是否必须自己写一些带有我的swagger文件的东西,然后在验证器中间件运行之前修改它,或者是否有某些可以建议的解决方法?
给定以下OpenAPI定义以下哪些对象是有效的.只是1.或1.和2.?
Person:
required:
- id
type: object
properties:
id:
type: string
Run Code Online (Sandbox Code Playgroud)
{"id": ""}{"id": null}{}这归结为"required = true"是否意味着"非空值 "或" 属性必须存在"的问题.
https://json-schema-validator.herokuapp.com/上的JSON模式验证器表示2.无效,因为null不满足type: string约束.请注意,它不会抱怨,因为它id是null,但因为null它不是一个字符串.但是这对于OpenAPI/Swagger有多重要?
如何将属性指定为null或引用?讨论如何使用jsonschema将属性指定为null或引用.
我希望以昂首阔步的方式做同样的事情.
回顾上面的答案,使用jsonschema,可以这样做:
{
"definitions": {
"Foo": {
# some complex object
}
},
"type": "object",
"properties": {
"foo": {
"oneOf": [
{"$ref": "#/definitions/Foo"},
{"type": "null"}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
答案的关键是使用oneOf.
我的问题的关键点:
我有一个复杂的对象,我想保持DRY,所以我把它放在一个定义部分,以便在我的swagger规范中重用:其他属性的值; 响应对象等
在我的规范中的各个地方,属性可能是对此类对象的引用或为null.
如何使用不支持的Swagger oneOf或
anyOf?
注意:一些swagger实现使用x-nullable(或某些)指定属性值可以为null,但是,$ref 用它引用的内容替换该对象,因此它将显示任何使用x-nullable被忽略.
我在将 AWS 的 API 网关文档导出到 Swagger 时遇到问题。我有一个包含空类型的 JSON 模式模型的文档部分,例如:
{
"title": "Incident",
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"createdAt": {
"type": "string"
},
"updatedAt": {
"type": ["string", "null"]
}
}
}
Run Code Online (Sandbox Code Playgroud)
它适用于验证,它允许我为 updatedAt 字段发送空值。但是,在这种情况下,当我将文档导出到 Swagger 时,我只有这是我的 swagger 文件:
{
"title": "Incident",
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string"
},
"createdAt": {
"type": "string"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我的 updatedAt 字段被简单地忽略了,如果我设置了,我也会遇到同样的问题
"type": "null"
Run Code Online (Sandbox Code Playgroud)
这确实有问题,因为我需要能够发送空值,在这种情况下,我的 swagger 文档缺少模型中的某些字段。
有什么方法可以在 JSON Schema 中定义一个不会被 …
我们一直在使用 OpenAPI 3.0.x 规范,它添加了声明nullable属性的功能。
当我将此 OpenAPI 导入 AWS API Gateway 时,相应的模型不支持此可为空的设置。
有没有办法在 OpenAPI 3.0.x 中声明nullable属性,以便 AWS API 网关也使用此设置识别并配置底层模型?
OpenAPI 规范示例
openapi: "3.0.2"
info:
title: Test
description: |
API
version: "0.1.0"
license:
name: Private
url: https://fillme.one/license
servers:
- url: /api/v1
paths:
/accounts:
post:
operationId: repa
responses:
200:
description: test
requestBody:
content:
application/json:
schema:
type: object
properties:
date:
type: string
format: date-time
nullable: true
required:
- date
Run Code Online (Sandbox Code Playgroud)
生成的模型的结果 JSON 模式文档
{
"required" : [ "date" ],
"type" : …Run Code Online (Sandbox Code Playgroud)