Rest 如何描述具有简单对象的阵列的模型?
我要记录一个REST服务, 其中一些接受简单数组,如:Rest 如何描述具有简单对象的阵列的模型?,rest,swagger,swagger-ui,Rest,Swagger,Swagger Ui,我要记录一个REST服务, 其中一些接受简单数组,如: [ { "name":"a" }, { "name":"b" }, { "name":"c" } ] 我如何在“大摇大摆的模特”一节中描述这一点?我只能像这样创建“命名数组” model { properties: { "arr": { "type":"array", ...... 但它描述的数据如下: "arr": [ { "name":"a" }, { "name":"b" }, { "name":"c" }
[
{ "name":"a" },
{ "name":"b" },
{ "name":"c" }
]
我如何在“大摇大摆的模特”一节中描述这一点?我只能像这样创建“命名数组”
model {
properties: { "arr": { "type":"array", ......
但它描述的数据如下:
"arr": [
{ "name":"a" },
{ "name":"b" },
{ "name":"c" }
]
...
"parameters" : [{
"name" : "whatEverThatArrayCalled",
"type" : "array",
"items" : {
"$ref" : "whatEverThatArrayCalled"
}
...
}],
"models" : {
{
"id" : "whatEverThatArrayCalled",
"properties":
{
"whatEverThatArrayCalled" :
{
"type" : "array",
"items":{"name":"a",
"name":"b",
"name":"c"
},
}
}
}
}
如果我的理解是正确的,我想下面可能是你想要的 正如你提到的 其中一些接受简单数组 然后它将通过一个参数传递
"parameters" : [{
"name" : "param_name",
"type" : "array",
"items" : {
"$ref" : "M"
}
...
}]
...
对于模型部分:
"models" : {
"M": {
"id" : "M",
"properties": {
"name" : {
"type" : "string"
}
}
}
可能是这样的:
"arr": [
{ "name":"a" },
{ "name":"b" },
{ "name":"c" }
]
...
"parameters" : [{
"name" : "whatEverThatArrayCalled",
"type" : "array",
"items" : {
"$ref" : "whatEverThatArrayCalled"
}
...
}],
"models" : {
{
"id" : "whatEverThatArrayCalled",
"properties":
{
"whatEverThatArrayCalled" :
{
"type" : "array",
"items":{"name":"a",
"name":"b",
"name":"c"
},
}
}
}
}
…我在editor.swagger.io中尝试了以下操作,它满足了这个问题的要求,并且有效。POST请求主体需要一个数组。该数组由“stackoverflow”项组成。每个项都是一个对象,具有name属性
paths:
/test:
post:
summary: test 123
description: test 123
parameters:
- name: param1
in: body
required: true
description: test param1
schema:
type: array
items:
$ref: '#/definitions/stackoverflow'
responses:
200:
description: OK
definitions:
stackoverflow:
type: object
properties:
name:
type: string
description: name of the object
袁东尼很接近,但没有雪茄。这是在OpenAPI/Swagger中使用YAML的正确定义:
/test:
post:
summary: test 123
description: test 123
parameters:
- name: param1
in: body
required: true
description: test param1
schema:
$ref: '#/definitions/stackoverflow'
responses:
200:
description: OK
这将产生:
stackoverflow2[
{
name: string
}
]
[
stackoverflow {
name: string
}
]
托尼的例子产生了:
stackoverflow2[
{
name: string
}
]
[
stackoverflow {
name: string
}
]
以YAML的形式完成Swagger/OpenAPI(复制和粘贴)
下面是一个JSON版本的Swagger/OpenAPI
{
"swagger" : "2.0",
"info" : {
"description" : "Simple objects in array test\n",
"version" : "Two-point-Oh!",
"title" : "Simple objects in array test"
},
"paths" : {
"/test" : {
"post" : {
"summary" : "Array with named objects",
"description" : "Array with named objects",
"parameters" : [ {
"in" : "body",
"name" : "param1",
"description" : "test param1",
"required" : true,
"schema" : {
"type" : "array",
"items" : {
"$ref" : "#/definitions/stackoverflow"
}
}
} ],
"responses" : {
"200" : {
"description" : "OK"
}
}
}
},
"/test2" : {
"post" : {
"summary" : "Array with simpel (nameless) objects",
"description" : "Array with simpel (nameless) objects",
"parameters" : [ {
"in" : "body",
"name" : "param1",
"description" : "test param1",
"required" : true,
"schema" : {
"$ref" : "#/definitions/stackoverflow2"
}
} ],
"responses" : {
"200" : {
"description" : "OK"
}
}
}
}
},
"definitions" : {
"stackoverflow" : {
"type" : "object",
"properties" : {
"name" : {
"type" : "string",
"description" : "name of the object"
}
}
},
"stackoverflow2" : {
"type" : "array",
"items" : {
"$ref" : "#/definitions/stackoverflow2_inner"
}
},
"stackoverflow2_inner" : {
"properties" : {
"name" : {
"type" : "string",
"description" : "name of the object"
}
}
}
}
}
将此粘贴到并单击“尝试此操作”
根据他们的文档,这将产生一个数组,其中的对象具有名为name的属性,数据类型为string。它可以通过请求正文访问,类似于
request.body.items
更新:
似乎已经足够了(没有额外的属性):
现在您得到了每个项都有一个名为name的键和一个对应的值的项
如果是这样,考虑到您提到的数组格式,TO要求的是什么…
[
{ "name":"a" },
{ "name":"b" },
{ "name":"c" }
]
我想可以使用以下格式:
paths:
/test:
post:
description: Test request
operationId: test
parameters:
- in: body
name: requestParameter
required: true
schema:
type: array
items:
properties:
name:
type: string
responses:
'200':
description: Success response
我在问如何描述:[{“name”:“a”},{“name”:“b”},{“name”:“c”}]这是正确的答案。该键位于:body中的
。根据Swagger规范:“由于只能有一个有效负载,因此只能有一个body参数。body参数的名称对参数本身没有影响,仅用于文档目的。”如果希望避免手动键入,可以尝试此JSON-to-Swagger定义转换器:use anyOf。请参阅:如果没有application/json
,是否可以执行此操作?默认为application/json。您可以完全删除它,甚至可以添加xml作为替代。感谢您提供此代码段,它可能会提供一些有限的即时帮助。A通过展示为什么这是一个很好的解决问题的方法,并将使它对未来有其他类似问题的读者更有用。请在您的回答中添加一些解释,包括您所做的假设。