2016-08-25 182 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被解釋爲要下載的文件,在瀏覽器中不顯示。

...所以我懷疑我還沒說得對。