2017-08-15 1 views
0

Mit Swagger/OpenAPI (und anschließend Prahlerei-codegen) Ich war nicht in der Lage, was die sollte Unterschied finden zwischenwas bedeutet "Inhalt": Mittelwert in Prahlerei/OpenAPI "Antworten":

Dies seinen genommen, direclty von https://swagger.io/specification/#responsesObject (erstes Beispiel json Format)

"responses" : { 
    "200": { 
    "description": "a pet to be returned", 
    "content": { 
     "application/json": { 
     "schema": { 
      "$ref": "#/components/schemas/Pet" 
} } } } } 

und

"reponses" : { 
    "200": { 
    "description": "a pet to be returned", 
    "schema": { 
     "$ref": "#/components/schemas/Pet" 
} } } 

Ich habe dieses Beispiel in eine triviale json swagger spec (json) geschrieben und führe den Swagger-Codegen (python, flask) aus, um meine Controller und mein Modell zu generieren. Yaml scheint die bevorzugte interne Repräsentation zu sein. Wenn der Generator läuft, erstellt er eine Yaml-Datei.

Mit dem ehemaligen, die Antworttyp ist „None“

responses: 
    200: 
    description: "a pet to be returned" 

während die letztere Ausbeuten, was ich denke, sollte ich erwartet werden:

responses: 
    200: 
    description: "a pet to be returned" 
    schema: 
     $ref: "#/components/schemas/Pet" 

zB das Schema scheint von weggelassen zu werden die erste Syntax mit Content

Was bedeutet Inhalt? Was fehlt mir in dem Beispiel, warum die Content zu einem Nicht-None-Rückgabetyp und einem entsprechenden Schema führt.

Hinweis auf die SwaggerCodgen: der generierte Code entspricht genau das, was die erzeugte yaml sagt, daher habe ich keine dieser Details hier enthalten

Antwort

2

Das erste Beispiel ist OpenAPI 3.0 ist das zweite Beispiel OpenAPI 2.0, daher der Unterschied.

Das in OpenAPI 3.0 verwendete Schlüsselwort content ist ein Ersatz für consumes/produces von OpenAPI 2.0. Im Kontext von responses bedeutet content, dass die Antwort einen Textkörper hat und den Medientyp (JSON/XML/etc.) Und die Struktur des Antworttextkörpers angibt.

OpenAPI Version 2.0:

swagger: "2.0" 
... 
paths: 
    /foo: 
    get: 
     produces: 
     - application/json 
     responses: 
     200: 
      description: OK 
      schema: 
      $ref: "#/definitions/Pet" 

OpenAPI 3.0 Version:

openapi: 3.0.0 
... 
paths: 
    /foo: 
    get: 
     responses: 
     "200": 
      description: OK 
      content: 
      application/json: 
       schema: 
       $ref: "#/components/schemas/Pet" 

Die codegen Problem wahrscheinlich durch eine der fololowing verursacht:

  • codegen nicht unterstützt OpenAPI 3.0 noch
  • die spec ist nicht gültig (zB verwendet ein mi x der Schlüsselwörter 2.0 und 3.0)
+0

Danke, das habe ich total vermisst. Ich habe Ihre Antwort aktualisiert und werde sie korrekt markieren, sobald ich mit dem Codegen verifizieren kann. Die Entfernung der 'Produits' in 3.0 scheint mir viel intuitiver zu sein, also versuche ich das in 3.0 nicht 2.0 openapi. Ich habe meine Swagger-Spezifikation mit swagger2openapi auf 3.0 umgestellt, habe aber Schwierigkeiten, den Codegen in 3.0 zu erhalten. Es scheint in Git unterstützt, aber ich finde keine vorgefertigten Gläser oder Docker-Container zum Ausführen. – mike

+0

Ich sehe https: //oss.sonatype.org/content/repositories/snapshots/io/swagger/swagger-codegen-cli/3.0.0-SNAPSHOT /, aber es schlägt fehl und scheint 2.0 (??) auszuführen '[main] INFO io.swagger.parser.Swagger20Parser - Lesen von /input/myspec.openapi3.json [main] INFO io.swagger.codegen.ignore.CodegenIgnoreProcessor - Keine .swagger-codegen-ignore-Datei gefunden. Ausnahme im Thread "Haupt" java.lang.RuntimeException: fehlende Swagger-Eingabe oder Config! ' – mike

+0

Ich schlage vor, Sie öffnen ein Problem in der [Swagger-Codegen Repo] (https://github.com/swagger-api/swagger- Codegen/Probleme). – Helen