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" }

我要记录一个REST服务, 其中一些接受简单数组,如:

[
  { "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通过展示为什么这是一个很好的解决问题的方法,并将使它对未来有其他类似问题的读者更有用。请在您的回答中添加一些解释,包括您所做的假设。