2016-08-25 32 views
6

Mam swagger.yaml coś takiego:Jak określić alternatywne formaty odpowiedzi za pomocą polecenia swagger/OpenAPI?

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

I chcę wrócić różne formaty (CSV, JSON, XML), w zależności od wartości parametru format zapytań (np localhost/api/czegoś format.? = csv).

Jak określić różne formaty odpowiedzi w specyfikacji?

+1

Po dalszych badaniach, myślę, że jedynym rozwiązaniem jest użycie różnych punktów końcowych dla różnych formatów zamiast parametru. (https://github.com/OAI/OpenAPI-Specification/issues/146 daje przykład). Czy to prawda? –

+0

Właściwie nie jestem nawet pewien, czy działa to w związku ... określenie dwóch różnych "produkuje" wydaje się prowadzić do błędu typu "TypeError:" dict "object is not calllable". –

Odpowiedz

3

znalazłem obejście, dostarczając różne punkty końcowe:

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   

Uwaga różne produces: wewnątrz każdej get i nikt na najwyższym poziomie.

Rzeczywista nagłówka odpowiedzi dla końcowego csv jest:

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

Próbowałem również dodawanie nagłówków do YAML (prosto po kodzie powyżej), ale to nie zmienia rzeczywistej nagłówek odpowiedzi:

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

na każdym punkcie końcowym pojawia się komunikat konsoli (buduję ten użyciem connexion):

Resource interpreted as Document but transferred with MIME type application/json lub

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

Również CSV jest interpretowany jako plik do pobrania, nie są wyświetlane w przeglądarce.

... więc podejrzewam, że jeszcze tego nie rozumiem.