2016-08-25 12 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: 'dict'オブジェクトは呼び出し可能ではありません 'というエラーにつながるようです。 –

答えて

3

Iは、異なるエンドポイントを提供することによって、回避策を見つけた:

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   

get内部異なるproduces:注ず、最上位レベルでいずれ。

CSVエンドポイントの実際の応答ヘッダである:

Content-Length:64 
Content-Type:text/csv; charset=utf-8 
Date:Fri, 26 Aug 2016 

Iはまた、(直上記コードの後)YAMLにヘッダを追加しようとしているが、それは実際の応答ヘッダを変更しない。

Resource interpreted as Document but transferred with MIME type application/json、または:私はコンソールメッセージを(私はconnexionを使用して、これを構築しています)を取得エンドポイントのいずれかで

  headers: 
      Content-type: 
       type: string 
       description: text/csv; charset=utf-8 
      Content-Disposition: 
       type: string 
       description: attachment; filename=data.csv 

Resource interpreted as Document but transferred with MIME type text/csv

また、CSVファイルがブラウザに表示されていない、ダウンロードするファイルとして解釈されます。

...私はそれがまだそれほど正しかったとは思わない。

関連する問題