swagger 2.0 中 JSON 对象的模式类型是啥

Posted

技术标签:

【中文标题】swagger 2.0 中 JSON 对象的模式类型是啥【英文标题】:What is the schema type for JSON object in swagger 2.0swagger 2.0 中 JSON 对象的模式类型是什么 【发布时间】:2017-04-27 06:24:37 【问题描述】:

我正在借助 Swagger 2.0 编写 API 文档。我已经生成了一个 API,其中响应在一系列工作正常的书籍中。

[
    "id": 1,
    "book_name": "The Complete Reference Java8",
    "author": "Herbert Schidt",
    "genre": "Technology"
, 
    "id": 2,
    "book_name": "C Programming",
    "author": "Dennis Ritchie",
    "genre": "Technology"
]

大摇大摆

/fetchBooks:
get:
  description: |
    Returns an array of book objects.

  responses:
    200:
      description: Successful response
      schema:
        title: ArrayOfBooks
        type: array
        items:
          type: object
          properties:
            id:
              type: integer
            book_name:
              type: string
            author:
              type: string
            genre:
              type: string

好吧,我只想在JSONObject 的一个 API 中发送一本书的详细信息,因为我尝试过的对象不起作用,所以我应该采用什么模式类型。


    "id": 1,
    "book_name": "The Complete Reference Java8",
    "author": "Herbert Schidt",
    "genre": "Technology"

大摇大摆

/fetchBook:
get:
  description: |
    Returns a book object

  parameters:
    - name: id
      in: query
      description: Books Id's
      reqrequired: true
      type: integer
      format: int

  responses:  
    200:
      description: Successful response
      schema:
        type: object <-- What type should I specify for JSONObject here
        items:
          type: object
          properties:
            id:
              type: integer
            book_name:
              type: string
            author:
              type: string
            genre:
              type: string

由于对象不工作,swagger 没有显示JSON 格式。

当前状态:

预期状态:

【问题讨论】:

【参考方案1】:
  /fetchBook:
    get:
      description: |
        Returns a book object

      parameters:
        - name: id
          in: query
          description: Books Id's
          required: true
          type: integer
          format: int

      responses:  
        '200':
          description: Successful response
          schema:
            type: object
            properties:
              id:
                type: integer
              book_name:
                type: string
              author:
                type: string
              genre:
                type: string

您遇到的问题是所需字段中的拼写错误

fallowing 是单个对象响应的正确语法

【讨论】:

我将其更正为“必需”。但是当前状态相同 i.stack.imgur.com/lM4ui.png 和预期状态应该是 i.stack.imgur.com/997tK.png 休闲链接是此答案中使用的完整 swagger 规范,link,我建议检查您的缩进或其他可能影响您代码的因素,因为此 swagger yaml 再现了您想要的响应跨度> 【参考方案2】:

提示:如果您想在多个操作中重用相同的架构 - 例如有一个Book 和一个ArrayOfBooks,您可以在definitions 部分和$ref 其他地方定义架构。

paths:
  /fetchBooks:
     get:
       ...
       responses:
         200:
           description: Successful response
           schema:
             $ref: '#/definitions/ArrayOfBooks'  # <--------
  /fetchBook:
     get:
       ...
       responses:
         200:
           description: Successful response
           schema:
             $ref: '#/definitions/Book'          # <--------

definitions:
  Book:
    type: object
    properties:
      id:
        type: integer
      book_name:
        type: string
      author:
        type: string
      genre:
        type: string
  ArrayOfBooks:
    type: array
    items:
      $ref: '#/definitions/Book'  # <--------

此外,如果这是一个正在开发的新 API 而不是现有 API,则 GET /fetchBooks 中的“获取”是多余的(GET = 获取)。考虑放弃“获取”并仅使用GET /booksGET /book?id=...

【讨论】:

非常感谢 Helen 提出的好方法。 +1

以上是关于swagger 2.0 中 JSON 对象的模式类型是啥的主要内容,如果未能解决你的问题,请参考以下文章

如何重用 swagger 2.0 字符串模式定义?

如何将swagger JSON对象转换为Java类对象

Swagger json 正在显示不需要的模式,例如 .net 核心 Web api 中的默认对象元数据

是否可以在 ASP .NET Core 中使用 Swashbuckle 在 Swagger 2.0 和 Open API 3 格式中公开相同的 Swagger JSON?

我可以在 swagger 2.0 中定义嵌套数组对象吗

如何创建包含不同类型数组的swagger架构