2016-08-25 183 views
6

我有一个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)。

如何在规范中指定不同的响应格式?

+1

经过进一步调查,我认为唯一的解决方案是使用不同的端点为不同的格式,而不是一个参数。 (https://github.com/OAI/OpenAPI-Specification/issues/146举例说明)。是对的吗? –

+0

实际上,我甚至不确定这是否适用于连接...指定两个不同的“产生”似乎导致“TypeError:”字典对象不可调用错误。 –

回答

3

我发现了一个解决办法,通过提供不同的端点:

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被解释为要下载的文件,在浏览器中不显示。

...所以我怀疑我还没说得对。