Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Swagger Schema error should NOT have additional properties

I am trying to create swagger json and trying to check it's validity in http://editor.swagger.io

Upon validating the json, the above mentioned editor gives the following error:

Schema error should NOT have additional properties
additionalProperty: components
Jump to line 0

If for some reason I can't define an element named components at root level where i am going to have some sort of json schema, what is the right way to do a $ref on the schema for requestBody for an API operation as I intend to do as seen in my example below. Also, do you see anything wrong with my swagger json ?

My swagger json for swagger2.0 look like this.

{
    "swagger": "2.0",
    "info": {
        "version": "1.0",
        "title": "My swagger API",
        "contact": {
            "name": "myName",
            "email": "[email protected]"
        }
    },
    "host": "localhost:1234",
    "basePath": "/",
    "tags": [{
        "name": "someTagName",
        "description": "this is a try"
    }],
    "components":{"schemas": {"myEndPoint": ""}},
    "paths": {
        "/myEndPoint": {
            "post": {
                "tags": ["some-tag"],
                "summary": "myEndPoint endpoint will give you something",
                "description": "some description will go here",
                "operationId": "getMyEndPoint",
                "consumes": ["application/json"],
                "produces": ["application/json"],
                "parameters": [{
                    "in": "body",
                    "name": "somePayload",
                    "description": "somePayload is what this is",
                    "required": true,
                    "schema": {
                        "$ref": "#components/schemas/myEndPoint"
                    }
                },
                {
                    "in": "header",
                    "name": "Authorization",
                    "description": "auth token goes here",
                    "required": true,
                    "type": "string"
                }],
                "responses": {
                    "200": {
                        "description": "Success",
                        "schema": {
                            "type": "string"
                        }
                    },
                    "400": {
                        "description": "Bad Request"
                    }
                }
            }
        }
    }
}
like image 785
Hary Avatar asked Nov 14 '17 19:11

Hary


People also ask

What is additional properties in swagger?

The additionalProperties keyword specifies the type of values in the dictionary. Values can be primitives (strings, numbers or boolean values), arrays or objects. For example, a string-to-object dictionary can be defined as follows: type: object.

How do you pass multiple parameters in swagger?

A URL can have several path parameters, each denoted with curly braces { } . Each path parameter must be substituted with an actual value when the client makes an API call. In OpenAPI, a path parameter is defined using in: path . The parameter name must be the same as specified in the path.

What does schema mean in swagger?

The schema keyword is used to describe the response body. A schema can define: an object or an array — typically used with JSON and XML APIs, a primitive data type such as a number or string – used for plain text responses, a file – (see below).


1 Answers

You are mixing up OpenAPI 3.0 and 2.0 syntax. The components keyword is used in OpenAPI 3.0. In OpenAPI/Swagger 2.0, reusable schemas live under definitions:

"definitions": {
  "myEndPoint": {
    ...
  }
}

Make sure to also change the $ref to

"$ref": "#/definitions/myEndPoint"
like image 77
Helen Avatar answered Nov 29 '22 00:11

Helen