2016-08-25 38 views
6

Tôi có một cái gì đó swagger.yaml như thế này:Làm cách nào để xác định các định dạng phản hồi thay thế bằng swagger/OpenAPI?

swagger: "2.0" 
paths: 
    /something: 
    get: 
     parameters: 
     - name: format 
      in: query 
      type: string 
      pattern: '^(csv|json|xml)$' 
     responses: 
     200: 
      schema: 
      type: ? 

Và tôi muốn quay trở lại định dạng khác nhau (csv, json, xml) tùy thuộc vào giá trị của tham số format truy vấn (ví dụ localhost/api/cái gì đó định dạng.? = csv).

Tôi làm cách nào để chỉ định các định dạng phản hồi khác nhau trong thông số?

+1

Sau khi điều tra thêm, tôi nghĩ giải pháp duy nhất là sử dụng các điểm cuối khác nhau cho các định dạng khác nhau, thay vì tham số. (https://github.com/OAI/OpenAPI-Specification/issues/146 đưa ra một ví dụ). Có đúng không? –

+0

Thực ra tôi thậm chí không chắc chắn điều này hoạt động trong sự kết nối ... xác định hai "sản xuất" khác nhau dường như dẫn đến một đối tượng 'TypeError: 'dict' không phải là lỗi có thể gọi được. –

Trả lời

3

Tôi tìm thấy một workaround, bằng cách cung cấp thiết bị đầu cuối khác nhau:

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   

Lưu ý sự khác nhau produces: bên trong mỗi get, và không ai ở cấp cao nhất.

Tiêu đề phản ứng thực tế cho thiết bị đầu cuối csv là:

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

Tôi cũng đã thử thêm tiêu đề cho yaml (thẳng sau khi mã trên), nhưng nó không thay đổi tiêu đề phản ứng thực tế:

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

Ở hai endpoint tôi nhận được một thông điệp giao diện điều khiển (tôi đang xây dựng này sử dụng connexion):

Resource interpreted as Document but transferred with MIME type application/json, hoặc

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

Ngoài ra, csv được hiểu là tệp cần tải xuống, không được hiển thị trong trình duyệt.

... vì vậy tôi nghi ngờ tôi vẫn chưa hiểu đúng.

Các vấn đề liên quan