在swagger API中将字符串数组指定为body参数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在swagger API中将字符串数组指定为body参数相关的知识,希望对你有一定的参考价值。

我想发布一个字符串数组

[
  "id1",
  "id2"
]

基于Swagger的API。在我的招摇文件中,我有这些行:

paths:
  /some_url:
    post:
      parameters:
        - name: ids
          in: body
          required: true

ids的类型指定为字符串数组的正确方法是什么?

更新:

根据规范,以下应该在我的选项中工作:

  parameters:
    - in: body
      description: xxx
      required: true
      schema:
        type: array
        items:
          type: string

https://github.com/Yelp/swagger_spec_validator不接受它并返回一长串错综复杂的错误,看起来像代码期望一些$ref

答案

您对字符串数组的描述是正确的,但参数定义错过了name属性是有效的。

这是一个完整的工作示例:

swagger: "2.0"

info:
  title: A dummy title
  version: 1.0.0

paths:
  /path:
    post:
      parameters:
        - in: body
          description: xxx
          required: true
          name: a name
          schema:
            type: array
            items:
              type: string
      responses:
        default:
          description: OK

尝试在线编辑器检查您的OpenAPI(fka.Swagger)规范:http://editor.swagger.io/

另一答案

我已经创建了一个昂首阔步的问题,因为Arnaud提供的帮助虽然是有效的yaml,但在尝试生成时会给你NPE异常。您需要提供如下对象:

  myDataItem:
    type: object
    description: A list of values
    required:
      - values
    properties:
      values:
        type: array
        items:
            type: string

然后引用它(在你的帖子项目等):

  schema:
    $ref: "#/definitions/myDataItem"

供参考github问题:

https://github.com/swagger-api/swagger-codegen/issues/6745

请注意,此问题已在2.3.0及更高版本中得到修复,理想情况下您应该升级到该版本。

另一答案

对于包含Object作为其内容的Array,Object的定义也可以使用定义&$ ref表示。例:

schema:
    type: array
    items:
        $ref: '#/definitions/ObjectSchemaDefinition'
definitions:
    ObjectSchemaDefinition:
        type: string
另一答案

得票最多的答案让我朝着正确的方向前进。我只需要一个对象数组的示例,其中每个对象都有一个属性,该属性是一个字符串数组,在strings数组中有多个值。 Thanks to the documentation我得到它像这样工作:

MyObject:
  type: object
  properties:
    body:
      type: array
      items:
        type: object
        properties:
          type: 
            type: string
          values: 
            type: array
            items:
              type: string
      example: 
        - type: "firstElement"
          values: ["Active", "Inactive"]
        - type: "SecondElement"
          values: ["Active", "Inactive"]

要记住的一点是,缩进对于招摇是至关重要的。如果你没有很好地缩进,swagger会给你奇怪的错误信息。

以上是关于在swagger API中将字符串数组指定为body参数的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swagger 将数组指定为参数

如何使用 Swashbuckle.AspNetCore 在 Swagger 模式中将自定义泛型类型公开为字符串

在rails中将字符串转换为数组

Swagger编写API文档的YAML中文示例

springboot集成swagger2出现api重复问题

在java中将对象列表转换为JSON数组 - Spring Boot api测试