Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何指定一个属性可以为null,也可以是一个带有swagger的引用_Swagger_Openapi_Swagger 2.0 - Fatal编程技术网

如何指定一个属性可以为null,也可以是一个带有swagger的引用

如何指定一个属性可以为null,也可以是一个带有swagger的引用,swagger,openapi,swagger-2.0,Swagger,Openapi,Swagger 2.0,讨论如何使用jsonschema将属性指定为null或引用 我也希望能和斯威格做同样的事情 为了重述上述问题的答案,使用jsonschema可以做到以下几点: { "definitions": { "Foo": { # some complex object } }, "type": "object", "properties": { "foo": { "oneOf": [

讨论如何使用jsonschema将属性指定为null或引用

我也希望能和斯威格做同样的事情

为了重述上述问题的答案,使用jsonschema可以做到以下几点:

{
   "definitions": {
      "Foo": {
         # some complex object
      }
   },

   "type": "object",
   "properties": {
      "foo": {
         "oneOf": [
            {"$ref": "#/definitions/Foo"},
            {"type": "null"}
         ]
      }
   }
}
答案的关键点是使用了
oneOf

我的问题的要点是:

  • 我有一个复杂的物体,我想保持干燥,所以我把它放在一个盒子里 定义部分,以便在我的swagger规范中重用:其他属性的值;响应对象等

  • 在我的规范a的各个地方 属性可以是对此类对象的引用,也可以为null

  • 我如何使用不支持或
    anyOf


    注意:一些招摇过市的实现使用
    x-nullable
    (或类似的)来指定属性值可以为null,但是,
    $ref
    将对象替换为它所引用的对象,因此看起来任何
    x-nullable
    的使用都会被忽略。

    不容易做到这一点。甚至几乎不可能。您的选择:

    等待 关于这一点有一个很长的讨论,也许有一天它会被完成

    使用供应商扩展 您可以使用x-oneOf和x-anyOf。我已经采取了这种艰难的方式:您必须升级所有使用的“招摇过市工具”,以考虑这些供应商的扩展

    就我而言,我们只需要:

    • 开发我们自己的带有定制注释的Jax RS解析器,以便从源代码中提取swagger API文件
    • 扩展swagger codegen以考虑这些扩展,从而为我们的客户机生成java代码
    • 开发我们自己的swagger ui:为了促进这项工作,我们添加了一个预处理步骤,将带有扩展的swagger模式转换为有效的json模式。与javascript中的招摇过市模式相比,更容易找到一个模块来表示json模式。反对者放弃了用“try it”按钮测试API的想法
    那是一年前,也许现在

    重构API 许多项目不需要任何一个,为什么不需要我们?

    OpenAPI 3.1 将属性定义为
    $ref
    anyOf
    类型:“null”

    YAML版本:

    foo:
    任何一项:
    -键入:“null”#注意“null”周围的引号
    -$ref:“#/components/schemas/Foo”
    
    JSON版本:

    “foo”:{
    “任何人”:[
    {“type”:“null”},
    {“$ref”:“#/components/schemas/Foo”}
    ]
    }
    
    为什么要使用
    anyOf
    而不是
    oneOf
    <如果引用的架构本身允许空值,则其中一个验证将失败,
    allOf
    将正常工作

    OpenAPI 3.0 YAML版本:

    foo:
    可为空:真
    所有:
    -$ref:“#/components/schemas/Foo”
    
    JSON版本:

    “foo”:{
    “可为空”:正确,
    “allOf”:[
    {“$ref”:“#/components/schemas/Foo”}
    ]
    }
    

    在OAS 3.0中,需要将
    $ref
    包装到
    allOf
    中,以将
    $ref
    与其他关键字组合在一起-因为
    $ref
    会覆盖任何同级关键字。这在OpenAPI规范库中进一步讨论:

    “等待”-是的,显然v3将支持其中一个,但我们必须等待使用它的工具和库。“扩展”-我正在使用python(w/bravado core)中的招摇,它没有您提到的扩展…糟糕透了。“重构”-这需要简化我的api以符合规范…我需要规范以符合我的api!对于现在返回$ref或null的情况,我唯一能想到的另一件事是不返回属性,在客户端(我的例子中是javascript)的情况下,该属性会将“undefined”视为“null”。但我讨厌这个想法。我在.net core上使用swashbuckle 5x,我想将
    “nullable”:true
    添加到
    “payload”:{“$ref”:“#/components/schemas/MyClass”}
    ,所以它是
    “payload”:{“nullable”:true,$ref:“#/components/schemas/MyClass”}
    ,有人知道这样做有一个虚张声势的选择吗?@AdamDiament谢谢海伦,我已经做到了