什么是“内容”:意思是swagger / openapi“回复”:

时间:2017-08-15 16:54:36

标签: yaml swagger swagger-codegen

使用Swagger / OpenAPI(以及随后的swagger-codegen)我无法找到应该之间的区别

这是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规范(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不会导致非None返回类型和相应的模式。

关于SwaggerCodgen的注意事项:生成的代码完全匹配生成的yaml所说的内容,因此我没有在这里包含任何这些细节

1 个答案:

答案 0 :(得分:5)

第一个例子是OpenAPI 3.0,第二个例子是OpenAPI 2.0,因此不同。

OpenAPI 3.0中使用的content关键字取代了OpenAPI 2.0中的consumes / produces。在responses的上下文中,content表示响应具有主体并指定媒体类型(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"

codegen问题很可能是由以下任何一个问题引起的:

  • codegen不支持OpenAPI 3.0
  • 规范无效(例如,使用2.0和3.0关键字的混合)