Home > Software engineering >  Can I define an extend field for response component Swagger?
Can I define an extend field for response component Swagger?

Time:12-14

Current, I use #/components/responses/Default response as reuseable properties for all api defines. But some API need to add more a field but not change default response format. So Can I reUse default response and add more field for response

{
  "openapi": "3.0.3",
  "path": {
    "/login": {
      "post": {
        "responses": {
          200: {
            "description": "Successful operation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/responses/defaultResponse"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas" :{
      "responseSchema": {
        "type": "object",
        "properties": {
          "httpCode": { "type": "integer" },
          "message": { "type": "string" }
        }
      }
    },
    "responses": {
      "defaultResponse": { "$ref": "#/components/schemas/responseSchema" }
    }
  }
}

Above is my swagger spec. but with Login, if success I want to put more a field (token) to return token for client, Can I do it with this or have to manual define schema ?

CodePudding user response:

In OpenAPI version 3, you do this with the allOf keyword. Detail document

{
  "openapi": "3.0.3",
  "info": {
    "title": "Example",
    "version": "1.0"
  },
  "paths": {
    "/login": {
      "post": {
        "responses": {
          "200": {
            "description": "Successful operation",
            "content": {
              "application/json": {
                "schema": {
                  "allOf": [
                    {
                      "$ref": "#/components/responses/defaultResponse"
                    },
                    {
                      "type": "object",
                      "properties": {
                        "token": {
                          "type": "string"
                        }
                      }
                    }
                  ]
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "responseSchema": {
        "type": "object",
        "properties": {
          "httpCode": {
            "type": "integer"
          },
          "message": {
            "type": "string"
          }
        }
      }
    },
    "responses": {
      "defaultResponse": {
        "$ref": "#/components/schemas/responseSchema"
      }
    }
  }
}
  • Related