2017-08-15 85 views
0

使用揚鞭/ OpenAPI的(隨後招搖,代碼生成),我一直沒能找到什麼區別應該是這什麼是「內容」:平均在招搖/ OpenAPI的「迴應」:

之間,從https://swagger.io/specification/#responsesObject (第一實例,JSON格式)照片直接採取

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

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

我把這個例子放到一個簡單的json swagger spec(json)中,並運行Swagger-Codegen(python,flask)來生成我的控制器和模型。 Yaml似乎是首選的內部表示,所以當生成器運行時,它會創建一個yaml文件。

對於前者,響應類型是「無」

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

,而後者則可以獲得什麼,我想我應該可以期待:

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

例如,模式似乎是從省略使用的第一種語法Content

內容是什麼意思? 我從示例中錯過了什麼,爲什麼Content不會導致非無返回類型和相應的模式。在SwaggerCodgen

注:生成的代碼完全一致的產生YAML說什麼,所以我沒有任何包含在這裏

回答

2

第一個例子是3.0 OpenAPI的那些細節,第二個例子是OpenAPI的2.0,因此區別。

在OpenAPI 3.0中使用的content關鍵字替代了來自OpenAPI 2.0的consumes/produces。在responsescontent的情況下,意味着響應具有主體並指定響應主體的媒體類型(JSON/XML /等)和結構。

OpenAPI的2.0版本:

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

OpenAPI的3.0版本:

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

的代碼生成問題可能是由任何fololowing的原因造成的:

  • 代碼生成不支持的OpenAPI 3.0但
  • 該規範無效(例如使用mi x的2.0和3.0關鍵字)
+0

謝謝,我完全錯過了。我已經提出了您的答案,並且一旦我可以用代碼驗證,就會將其標記爲正確。在3.0中去除'產生'似乎對我來說更加直觀,所以我試圖在3.0而不是2.0 openapi中做到這一點。我已經用swagger2openapi將我的swagger spec轉換爲3.0,但在3.0中獲取/運行codegen時遇到困難。它似乎在git中得到了支持,但我沒有找到任何預先構建的jar或docker容器來運行。 – mike

+0

我看到https://oss.sonatype。org/content/repositories/snapshots/io/swagger/swagger-codegen-cli/3.0.0-SNAPSHOT /,但是失敗並且似乎正在執行2.0(??)'[main] INFO io.swagger.parser.Swagger20Parser - 從/input/myspec.openapi3.json讀取 [main] INFO io.swagger.codegen.ignore.CodegenIgnoreProcessor - 找不到.swagger-codegen-ignore文件。 線程「main」中的異常java.lang.RuntimeException:缺少swagger輸入或配置! – mike

+0

我建議你在[swagger-codegen repo]中打開一個問題(https://github.com/swagger-api/swagger-代碼生成/問題)。 – Helen