【问题标题】:How to specify multiple 404 causes in OpenAPI (Swagger)?如何在 OpenAPI (Swagger) 中指定多个 404 原因?
【发布时间】:2017-03-31 03:43:40
【问题描述】:

我正在为嵌套资源(属于交付的内容)定义路径。如果客户端收到 404,则可能是因为未找到交付 ID,或者交付不包含任何指定类型的内容。

如何使用 OpenAPI (YAML) 对其进行建模?

我现在有这个...

 paths:
  '/deliveries/{id}/content/articles':
    get:
      summary: Retrieves articles from a delivery
      description: Retrieves all articles from a single delivery
      [...]
      responses:
        '200':
          description: articles found
          schema:
            $ref: '#/definitions/Article'
        '404':
          description: delivery not found
          schema:
            $ref: '#/definitions/Error'
        '404':
          description: delivery did not contain any articles
          schema:
            $ref: '#/definitions/Error'

...但是当我从 Swagger 编辑器中保存 JSON 时,它会删除除最后一个响应之外的所有 404 响应(“交付不包含任何文章”)。

【问题讨论】:

    标签: swagger swagger-2.0 openapi


    【解决方案1】:

    OpenAPI/Swagger 2.0 中不允许每个状态码有多种响应类型,但 OpenAPI 3.0 by using oneOf 支持。

    在 OpenAPI 2.0 中,404 响应只能有一个模式:

          responses:
            '404':
              description: delivery not found, or delivery did not contain any articles
              schema:
                $ref: '#/definitions/Error'
    
    ...
    definitions:
      Error:
        type: object
        properties:
          status:
            type: integer
          type:
            type: string
          message:
            type: string
    

    Error 有效载荷可以在哪里,比如:

    {
      "status": 404,
      "type": "DeliveryNotFoundError",
      "message": "delivery not found"
    }
    

    {
      "status": 404,
      "type": "NoArticlesInDeliveryError",
      "message": "delivery did not contain any articles"
    }
    

    【讨论】:

    • 能否请您显示错误的实际 YAML 定义?
    • 添加了错误定义。
    • 这没有回答问题。问题是如何为相同的代码指定多个响应,具有相同的响应类型,但具有不同的描述。请参阅问题中的示例。两个 404 的唯一区别是描述,响应类型相同。
    猜你喜欢
    • 1970-01-01
    • 2021-12-22
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    相关资源
    最近更新 更多