如何在 swagger/yaml 文档上正确记录文本/csv 响应?

Posted

技术标签:

【中文标题】如何在 swagger/yaml 文档上正确记录文本/csv 响应?【英文标题】:How to properly document text/csv responses on swagger/yaml docs? 【发布时间】:2020-04-30 12:35:06 【问题描述】:

我有一堆 API 端点在它们的响应中返回 text/csv 内容。我该如何记录?这是我目前拥有的:

  /my_endpoint:
    get:
      description: Returns CSV content
      parameters:
        - $ref: '#/components/parameters/myParemeters'
      responses:
        200:
          headers:
            $ref: '#/components/headers/myHeaders'
          content: text/csv

就目前而言,这不起作用,我在 Swagger 预览中得到了注释:

无法渲染此组件,请查看控制台。

问题是如何正确显示 csv 响应的内容?我发现如果我确实添加了一个模式,是否可以工作,如下所示:

...
  content:
      text/csv:
        schema:
          type: array
          items:
            type: string
...

但不应该有模式,因为它是 csv。那么回到这个问题,描述 csv 响应内容的正确方法是什么?

【问题讨论】:

【参考方案1】:

您的第一个示例语法无效。替换为:

      responses:
        '200':
          content:
            text/csv:   # <-----

          # Also note the correct syntax for referencing response headers:
          headers:
            Http-Header-Name:  # e.g. X-RateLimit-Remaining
              $ref: '#/components/headers/myHeader'

components:
  headers:
    myHeader:
      description: Description of this response header
      schema:
        type: string

至于您的第二个示例,OpenAPI 规范不提供 CSV 响应示例。所以schema 可以是type: string,或者一个字符串数组,或者一个空模式(这意味着“任何值”),或者其他的东西。实际支持的语法可能取决于工具。请随时在OpenAPI Specification repository 中寻求澄清。

【讨论】:

【参考方案2】:

这是 openapi 3.0.2 从后端返回文本/csv 内容(字符串)的另一个工作:

合同:

        responses:
            '200':
                content:
                    text/csv:
                        schema:
                            type: string
                            
                            

后端:

return ResponseEntity.ok("h1,h2,h3,h4\n1,2,3,4\n5,6,7,8");

【讨论】:

【参考方案3】:

这里还有一个例子:

合同:

  responses:
    '200':
      schema:
        type: object

后端:

return ResponseEntity.status(200).contentType(MediaType.parseMediaType("text/csv")).body("Col 1;Col2\naaa;bbb\nccc;ddd");

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于如何在 swagger/yaml 文档上正确记录文本/csv 响应?的主要内容,如果未能解决你的问题,请参考以下文章

Swagger-UI 和 Ktor 如何导入 swagger.json 或 .yaml 文件并启动 Swagger-UI?

配置Jersey 1.x项目以生成swagger文档

2022-02-26:k8s安装swagger,yaml如何写?

Harbor REST API说明

golang gin框架 使用swagger生成api文档

从命令行将 Swagger YAML 文件转换为 JSON