大家好我所有我都是新手,并且一度停留并需要专家的帮助。 这就是我需要的东西
我想编写一个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(' InterfaceBased',
{'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中看到两个正文文本框。 问题是,我填充的一些人都试图验证JSON第一个模型是基于MacBased 所以第一个身体数据很好,当我尝试使用第二个主体发布数据时它解析失败。
知道如何使用该主体的指定模型解析数据吗? 感谢
答案 0 :(得分:4)
Swagger不支持多个body参数声明。您最多可以有一个body参数。
然而,Swagger确实支持模型的多态性。如果你有一个带有“类型”字段的超级模型(例如),这是强制性的,并且能够设置MacBased和InterfaceBased变体之间的差异,那可能会有效。
您可以在此处找到有关多态性的更多信息 - https://github.com/wordnik/swagger-spec/blob/master/versions/1.2.md#527-model-object - 特别注意subTypes和discriminator字段。