如何使用swagger/OpenAPI指定替代响应格式?
问题描述:
我有一个swagger.yaml
是这样的:如何使用swagger/OpenAPI指定替代响应格式?
swagger: "2.0"
paths:
/something:
get:
parameters:
- name: format
in: query
type: string
pattern: '^(csv|json|xml)$'
responses:
200:
schema:
type: ?
而且我想这取决于format
查询参数(例如本地主机/ API /某事的价值返回不同的格式(CSV,JSON,XML)格式。? = CSV)。
如何在规范中指定不同的响应格式?
答
我发现了一个解决办法,通过提供不同的端点:
swagger: "2.0"
paths:
/something/json:
get:
produces:
- application/json
responses:
200:
schema:
type: object
properties:
...
/something/csv:
get:
produces:
- text/csv
responses:
200:
schema:
type: string
注意不同produces:
每个get
内,并没有在顶层。
实际响应头的CSV端点是:
Content-Length:64
Content-Type:text/csv; charset=utf-8
Date:Fri, 26 Aug 2016
我还试图将报头添加到YAML(上面的代码后直的),但它不改变实际响应头:
headers:
Content-type:
type: string
description: text/csv; charset=utf-8
Content-Disposition:
type: string
description: attachment; filename=data.csv
在两个端点我得到一个控制台消息(我建立这个使用connexion):
Resource interpreted as Document but transferred with MIME type application/json
,或者
Resource interpreted as Document but transferred with MIME type text/csv
此外,CSV被解释为要下载的文件,在浏览器中不显示。
...所以我怀疑我还没说得对。
经过进一步调查,我认为唯一的解决方案是使用不同的端点为不同的格式,而不是一个参数。 (https://github.com/OAI/OpenAPI-Specification/issues/146举例说明)。是对的吗? –
实际上,我甚至不确定这是否适用于连接...指定两个不同的“产生”似乎导致“TypeError:”字典对象不可调用错误。 –