用不同的模型交换多个实体

Swagger multiple bodies with different model

本文关键字:实体 交换 模型      更新时间:2023-09-26

大家好,我刚开始招摇撞骗,一度陷入困境,需要专家的帮助。这就是我需要的

我想写一个PUT方法,一次接受两种不同类型的实体。

我可以通过制作两个process_model来做到这一点,并像一样基于它们定义我的身体

>  api.process_model('MacBased',
>     {'id' : 'MacBased',
>     'required': [ 'physicalMacAddress'],
>     'properties': {
>        'physicalMacAddress' : {
>           'type' : 'string',
>           'description' : 'Mac address.'
>       },
>       'vlan' : {
>          'type' : 'string',
>          'description' : 'vlan id '
>       }
>     }
   });

api.process_model("基于接口",

{'id' : 'InterfaceBased',
'required': [ 'interfaceName', 'hostName'],
'properties': {
  'interfaceName' : {
    'type' : 'string',
    'description' : 'physical interface name'
   },
  'hostName' : {
    'type' : 'string',
    'description' : 'Name of machine'
   },
   'vlan' : {
     'type' : 'string',
     'description' : 'vlan id '
   }
}

});

然后身体像这个

>  api.process_api('PUT', {
>     // general group that this api belongs to
>     'group' : "ABC",
>     'spec' : {
>       path : "/config/{name}",
>       method : "PUT",
>       notes : "",
>       produces : ["application/json"],
>       parameters : [param.path("name", "Name", "string"),
>                           {
>                           "name": "body",
>                           "description": "Mac based",
>                           "required": false,
>                           "type": "MacBased",
>                           "paramType": "body"
>                           },
>                           {
>                           "name": "body",
>                           "description": "Device based",
>                           "required": false,
>                           "type": "InterfaceBased",
>                           "paramType": "body"
>                           }]

这里一切都很好,我可以在Swagger中看到两个正文文本框。问题是,我填充的swagger中的哪一个主体试图验证MacBased第一个模型的JSON,所以第一个主体数据很好,当我尝试使用第二个主体发布数据时,解析失败。

知道如何使用该实体的指定模型解析数据吗?感谢

Swagger不支持多个主体参数声明。您最多可以有一个实体参数。

然而,Swagger确实支持模型的多态性。如果你有一个超级模型,其中有一个"类型"字段(例如),这是强制性的,并且能够设置基于MacBased和基于InterfaceBased变体之间的差异,那么这是可行的。

你可以在这里找到更多关于多态性的信息-https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#527-model对象-特别注意subTypes和discriminator字段。